From 9596904952ad627c5356ba35bac01f11469a2e11 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 15 Feb 2020 06:58:01 -0500 Subject: [PATCH 001/140] include ply lexer and parser --- src/cl_ast/__init__.py | 7 + src/cl_ast/astNode.py | 2 + src/cl_ast/declarations.py | 26 +++ src/cl_ast/expressions/complex_exprs.py | 86 ++++++++ src/cl_ast/expressions/constant.py | 15 ++ src/cl_ast/expressions/exprNode.py | 4 + src/cl_ast/expressions/operations.py | 69 +++++++ src/cl_ast/program.py | 6 + src/cl_lexer/__init__.py | 1 + src/cl_lexer/config.py | 121 +++++++++++ src/cl_lexer/coollexer.py | 12 ++ src/cl_parser/__init__.py | 1 + src/cl_parser/config.py | 256 ++++++++++++++++++++++++ src/cl_parser/coolparser.py | 10 + src/cl_parser/parsetab.py | 88 ++++++++ 15 files changed, 704 insertions(+) create mode 100644 src/cl_ast/__init__.py create mode 100644 src/cl_ast/astNode.py create mode 100644 src/cl_ast/declarations.py create mode 100644 src/cl_ast/expressions/complex_exprs.py create mode 100644 src/cl_ast/expressions/constant.py create mode 100644 src/cl_ast/expressions/exprNode.py create mode 100644 src/cl_ast/expressions/operations.py create mode 100644 src/cl_ast/program.py create mode 100755 src/cl_lexer/__init__.py create mode 100755 src/cl_lexer/config.py create mode 100755 src/cl_lexer/coollexer.py create mode 100644 src/cl_parser/__init__.py create mode 100644 src/cl_parser/config.py create mode 100644 src/cl_parser/coolparser.py create mode 100644 src/cl_parser/parsetab.py diff --git a/src/cl_ast/__init__.py b/src/cl_ast/__init__.py new file mode 100644 index 00000000..bc5a3271 --- /dev/null +++ b/src/cl_ast/__init__.py @@ -0,0 +1,7 @@ +from .astNode import ASTNode +from .program import ProgramNode +from .expressions.exprNode import ExpressionNode +from .expressions.complex_exprs import * +from .expressions.constant import * +from .expressions.operations import * +from .declarations import * \ No newline at end of file diff --git a/src/cl_ast/astNode.py b/src/cl_ast/astNode.py new file mode 100644 index 00000000..3045ab1e --- /dev/null +++ b/src/cl_ast/astNode.py @@ -0,0 +1,2 @@ +class ASTNode(object): + pass \ No newline at end of file diff --git a/src/cl_ast/declarations.py b/src/cl_ast/declarations.py new file mode 100644 index 00000000..fa9594e7 --- /dev/null +++ b/src/cl_ast/declarations.py @@ -0,0 +1,26 @@ +from .astNode import ASTNode + +class ClassDeclarationNode(ASTNode): + def __init__(self,idx,features,parent = None): + self.id = idx + self.parent = parent + self.features = features + +class AttrDeclarationNode(ASTNode): + def __init__(self, idx, typex, expr=None): + self.id = idx + self.type = typex + self.expr = expr + +class FuncDeclarationNode(ASTNode): + def __init__(self, idx, params, return_type, body): + self.id = idx + self.params = params + self.type = return_type + self.body = body + +class VarDeclarationNode(ASTNode): + def __init__(self, idx, typex, expr=None): + self.id = idx + self.type = typex + self.expr = expr \ No newline at end of file diff --git a/src/cl_ast/expressions/complex_exprs.py b/src/cl_ast/expressions/complex_exprs.py new file mode 100644 index 00000000..3f342226 --- /dev/null +++ b/src/cl_ast/expressions/complex_exprs.py @@ -0,0 +1,86 @@ +from .exprNode import ExpressionNode + +#Atomic +class VariableNode(ExpressionNode): + + def __init__(self, idx): + self.id = idx + +class NewNode(ExpressionNode): + + def __init__(self, typex): + self.type = typex + +#Exprs + +class ConditionalNode(ExpressionNode): + + def __init__(self, cond, stm, else_stm): + self.cond = cond + self.stm = stm + self.else_stm = else_stm + +class WhileNode(ExpressionNode): + + def __init__(self, cond, expr): + self.cond = cond + self.expr = expr + +class LetNode(ExpressionNode): + + def __init__(self, init_list, expr): + self.init_list = init_list + self.expr = expr + + def __hash__(self): + return id(self) + +class BlockNode(ExpressionNode): + + def __init__(self, expr_list): + self.expr_list = expr_list + +class CaseNode(ExpressionNode): + + def __init__(self, expr, case_list): + self.expr = expr + self.case_list = case_list + + def __hash__(self): + return id(self) + +class OptionNode(ExpressionNode): + def __init__(self, idx, typex, expr): + self.id = idx + self.typex = typex + self.expr = expr + +class AssignNode(ExpressionNode): + + def __init__(self, idx, expr): + self.id = idx + self.expr = expr + +#Dispatch + +class ExprCallNode(ExpressionNode): #CallNode + + def __init__(self, obj, idx, args): + self.obj = obj + self.id = idx + self.args = args + +class SelfCallNode(ExpressionNode): #StaticCallNode + + def __init__(self, idx, args): + self.id = idx + self.args = args + + +class ParentCallNode(ExpressionNode): #BaseCallNode + + def __init__(self, obj, typex, idx, args): + self.obj = obj + self.id = idx + self.args = args + self.type = typex \ No newline at end of file diff --git a/src/cl_ast/expressions/constant.py b/src/cl_ast/expressions/constant.py new file mode 100644 index 00000000..3f47a630 --- /dev/null +++ b/src/cl_ast/expressions/constant.py @@ -0,0 +1,15 @@ +from .exprNode import ExpressionNode + +class ConstantNode(ExpressionNode): + + def __init__(self, lex): + self.lex = lex + +class IntegerNode(ConstantNode): + pass + +class StringNode(ConstantNode): + pass + +class BoolNode(ConstantNode): + pass \ No newline at end of file diff --git a/src/cl_ast/expressions/exprNode.py b/src/cl_ast/expressions/exprNode.py new file mode 100644 index 00000000..1bdc7d89 --- /dev/null +++ b/src/cl_ast/expressions/exprNode.py @@ -0,0 +1,4 @@ +from ..astNode import ASTNode + +class ExpressionNode(ASTNode): + pass \ No newline at end of file diff --git a/src/cl_ast/expressions/operations.py b/src/cl_ast/expressions/operations.py new file mode 100644 index 00000000..4f3ac400 --- /dev/null +++ b/src/cl_ast/expressions/operations.py @@ -0,0 +1,69 @@ +from .exprNode import ExpressionNode + +class OperationNode(ExpressionNode): + pass + +class BinaryOperationNode(OperationNode): + + def __init__(self, left, right): + self.left = left + self.right = right + +class UnaryOperationNode(OperationNode): + + def __init__(self, expr): + self.expr = expr + +#Binaries + +class SumNode(BinaryOperationNode): + + def __init__(self, left, right): + super().__init__(left, right) + +class DiffNode(BinaryOperationNode): + + def __init__(self, left, right): + super().__init__(left, right) + +class StarNode(BinaryOperationNode): + + def __init__(self, left, right): + super().__init__(left, right) + +class DivNode(BinaryOperationNode): + + def __init__(self, left, right): + super().__init__(left, right) + +class LessNode(BinaryOperationNode): + + def __init__(self, left, right): + super().__init__(left, right) + +class LessEqualNode(BinaryOperationNode): + + def __init__(self, left, right): + super().__init__(left, right) + +class EqualNode(BinaryOperationNode): + + def __init__(self, left, right): + super().__init__(left, right) + +#Unaries + +class BitNotNode(UnaryOperationNode): + + def __init__(self, expr): + super().__init__(expr) + +class IsVoidNode(UnaryOperationNode): + + def __init__(self, expr): + super().__init__(expr) + +class NotNode(UnaryOperationNode): + + def __init__(self, expr): + super().__init__(expr) \ No newline at end of file diff --git a/src/cl_ast/program.py b/src/cl_ast/program.py new file mode 100644 index 00000000..2c640469 --- /dev/null +++ b/src/cl_ast/program.py @@ -0,0 +1,6 @@ +from .astNode import ASTNode + +class ProgramNode(ASTNode): + def __init__(self, declarations): + self.declarations = declarations + diff --git a/src/cl_lexer/__init__.py b/src/cl_lexer/__init__.py new file mode 100755 index 00000000..fb646827 --- /dev/null +++ b/src/cl_lexer/__init__.py @@ -0,0 +1 @@ +from .coollexer import CoolLexer \ No newline at end of file diff --git a/src/cl_lexer/config.py b/src/cl_lexer/config.py new file mode 100755 index 00000000..5ecc8a2d --- /dev/null +++ b/src/cl_lexer/config.py @@ -0,0 +1,121 @@ +""" PLY Lexer configuration module for COOL Language """ + +# COOL Keywords +reserved = { + 'class' : 'CLASS', + 'inherits' : 'INHERITS', + 'if' : 'IF', + 'then' : 'THEN', + 'else' : 'ELSE', + 'fi' : 'FI', + 'while': 'WHILE', + 'loop' : 'LOOP', + 'pool' : 'POOL', + 'let' : 'LET', + 'in' : 'IN', + 'case' : 'CASE', + 'of' : 'OF', + 'esac' : 'ESAC', + 'new' : 'NEW', + 'isvoid' : 'ISVOID', + 'not' : 'NOT', +} + +# Tokens +tokens = [ + 'INTEGER', # int + 'STRING', # string + 'BOOL', # bool + 'PLUS', # + + 'MINUS', # - + 'STAR', # * + 'DIVIDE', # / + 'BITNOT', # ~ + 'LESS', # < + 'LESSQ', # <= + 'EQUALS', # = + 'WITH', # => + 'ASSIGN', # <- + 'LPAREN', # ( + 'RPAREN', # ) + 'LBRACE', # { + 'RBRACE', # } + 'SEMI', # ; + 'COLON', # : + 'COMMA', # , + 'DOT', # . + 'ARROBA', # @ + # 'BTYPE', # Types + 'ID' +] + list(reserved.values()) + +#Regular Expressions for Tokens + +# VARS +t_PLUS = r'\+' +t_MINUS = r'-' +t_STAR = r'\*' +t_DIVIDE = r'/' +t_BITNOT = r'~' +t_LESS = r'<' +t_LESSQ = r'<=' +t_EQUALS = r'=' +t_WITH = r'=>' +t_ASSIGN = r'<-' +t_LPAREN = r'\(' +t_RPAREN = r'\)' +t_LBRACE = r'\{' +t_RBRACE = r'\}' +t_SEMI = r'\;' +t_COLON = r'\:' +t_COMMA = r'\,' +t_DOT = r'\.' +t_ARROBA = r'@' + +# METHODS + +def t_INTEGER(t): + r'\d+' + t.value = int(t.value) + return t + +def t_STRING(t): + r'\"([^\\\n]|(\\.))*?\"' + t.value = t.value[1:-1] + return t + +def t_BOOL(t): + r'(true|false)' + t.value = (t.value == 'true') + return t + +# def t_BTYPE(t): +# r'(String|Bool|Int|Object|IO)' +# return t + +def t_ID(t): + r'[a-zA-z_][a-zA-Z_0-9]*' + key = t.value.lower() + t.type = reserved.get(key, 'ID') + return t + + +# OTHER RULES + +# Comments rule +def t_COMMENT(t): # add more comments syntax + r'--.*--' + pass + +# Track line numbers +def t_newline(t): + r'\n+' + t.lexer.lineno += len(t.value) + +# Ignored characters +t_ignore = r' ' + +#Error handling rule +def t_error(t): + print(f"Unknown token {t.value[0]}") + t.lexer.skip(1) \ No newline at end of file diff --git a/src/cl_lexer/coollexer.py b/src/cl_lexer/coollexer.py new file mode 100755 index 00000000..1332ee70 --- /dev/null +++ b/src/cl_lexer/coollexer.py @@ -0,0 +1,12 @@ +import ply.lex as lex +import cl_lexer.config + +class CoolLexer(object): + def __init__(self, *args, **kwargs): + self.lexer = lex.lex(module=cl_lexer.config, **kwargs) + + def token(self): + return self.lexer.token() + + def input(self, data): + self.lexer.input(data) \ No newline at end of file diff --git a/src/cl_parser/__init__.py b/src/cl_parser/__init__.py new file mode 100644 index 00000000..eec1535a --- /dev/null +++ b/src/cl_parser/__init__.py @@ -0,0 +1 @@ +from .coolparser import CoolParser \ No newline at end of file diff --git a/src/cl_parser/config.py b/src/cl_parser/config.py new file mode 100644 index 00000000..0e2f6b6a --- /dev/null +++ b/src/cl_parser/config.py @@ -0,0 +1,256 @@ +# Get the token map from the lexer +from cl_ast import * +from cl_lexer.config import tokens + +# Set the grammar start symbol +start = 'program' + +# Program Rule +def p_program(p): + '''program : class_list''' + p[0] = ProgramNode(p[1]) + +# Empty Production +def p_empty(p): + '''empty :''' + pass + +# Classes Rules +def p_class_list(p): + '''class_list : def_class + | def_class class_list''' + try: + p[0] = [ p[1] ] + p[2] + except: + p[0] = [ p[1] ] + +# Class Definition Rules (TODO: Try include TYPE tokens) +def p_def_class(p): + '''def_class : CLASS ID LBRACE feature_list RBRACE SEMI + | CLASS ID INHERITS ID LBRACE feature_list RBRACE SEMI''' + if p[3] == 'inherits': + p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + else: + p[0] = ClassDeclarationNode(p[2], p[4]) + +# Class Feature List Rules +def p_feature_list(p): + '''feature_list : empty + | def_attr SEMI feature_list + | def_func SEMI feature_list''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [] + +# Attr Definition Rules (TODO: Try include TYPE tokens) +def p_def_attr(p): + '''def_attr : ID COLON ID + | ID COLON ID ASSIGN expr''' + try: + p[0] = AttrDeclarationNode(p[1], p[3], p[5]) + except: + p[0] = AttrDeclarationNode(p[1], p[3]) + +# Func Definition Rules (TODO: Try include TYPE tokens) +def p_def_func(p): + '''def_func : ID LPAREN param_list RPAREN COLON ID LBRACE expr RBRACE''' + p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) + +# Func Parameters List Rules (TODO: Try include TYPE tokens) +def p_param_list(p): + '''param_list : empty + | param + | param COMMA param_list''' + try: + p[0] = [ p[1] ] + p[3] + except: + try: + p[0] = [ p[1] ] + except: + p[0] = [] + +# Parameter Rule (TODO: Try include TYPE ) +def p_param(p): + '''param : ID COLON ID''' + p[0] = (p[1], p[3]) # (ID, TYPE) + +# Expression Rules +# ------------------ + +def p_expr(p): + '''expr : LET let_list IN expr + | CASE expr OF cases_list ESAC + | IF expr THEN expr ELSE expr FI + | WHILE expr LOOP expr POOL + | ID ASSIGN expr + | arith''' + + if p[1] == 'let': + p[0] = LetNode(p[2], p[4]) + elif p[1] == 'case': + p[0] = CaseNode(p[2], p[4]) + elif p[1] == 'if': + p[0] = ConditionalNode(p[2], p[4], p[6]) + elif p[1] == 'while': + p[0] = WhileNode(p[2], p[4]) + else: + p[0] = p[1] + +# Let Rules + +def p_let_list(p): + '''let_list : let_assign + | let_assign COMMA let_list''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [ p[1] ] + +def p_let_assign(p): + '''let_assign : param ASSIGN expr + | param''' + try: + p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) + except: + p[0] = VarDeclarationNode(p[1][0], p[1][1]) + +# Case Rules + +def p_cases_list(p): + '''cases_list : case SEMI + | case SEMI cases_list''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [ p[1] ] + +def p_case(p): + '''case : ID COLON ID WITH expr''' + p[0] = OptionNode(p[1], p[3], p[5]) + +# Arith Operations +# ------------------- + +precedence = ( + ('right', 'BITNOT'), + ('right', 'ISVOID'), + ('left', 'STAR', 'DIVIDE'), + ('left', 'PLUS', 'MINUS'), + ('nonassoc', 'LESS', 'LESSQ', 'EQUALS'), + ('right', 'NOT') +) + +def p_arith_binary(p): #TODO: Change switch-case :( + '''arith : arith PLUS arith + | arith MINUS arith + | arith STAR arith + | arith DIVIDE arith + | arith LESS arith + | arith LESSQ arith + | arith EQUALS arith''' + if p[2] == '+': + p[0] = SumNode(p[1], p[3]) + elif p[2] == '-': + p[0] = DiffNode(p[1], p[3]) + elif p[2] == '*': + p[0] = StarNode(p[1], p[3]) + elif p[2] == '/': + p[0] = DivNode(p[1], p[3]) + elif p[2] == '<': + p[0] = LessNode(p[1], p[3]) + elif p[2] == '<=': + p[0] = LessEqualNode(p[1], p[3]) + elif p[2] == '=': + p[0] = EqualNode(p[1], p[3]) + +def p_arith_unary(p): + '''arith : BITNOT arith + | ISVOID arith + | NOT arith''' + if p[1] == '~': + p[0] = BitNotNode(p[2]) + elif p[1] == 'isvoid': + p[0] = IsVoidNode(p[2]) + elif p[1] == 'not': + p[0] = NotNode(p[2]) + +def p_arith_basecall(p): + '''arith : base_call''' + p[0] = p[1] + +# Function Call Rules + +def p_basecall(p): # Parent Call (Review) + '''base_call : fact ARROBA ID DOT func_call + | fact''' + try: + p[0] = ParentCallNode(p[1], p[3], p[5][0], p[5][1]) + except: + p[0] = p[1] + +def p_factcall(p): + '''fact : fact DOT func_call + | func_call''' + try: + p[0] = ExprCallNode(p[1], p[3][0], p[3][1]) + except: + p[0] = SelfCallNode(p[1][0], p[1][1]) + +def p_func_call(p): + '''func_call : ID LPAREN arg_list RPAREN''' + p[0] = (p[1], p[3]) + +def p_arglist(p): + '''arg_list : empty + | expr + | expr COMMA arg_list''' + try: + p[0] = [ p[1] ] + p[3] + except: + if p[1]: + p[0] = [ p[1] ] + else: + p[0] = [] + +# Atomic Operations + +def p_factatom(p): + '''fact : LPAREN expr RPAREN + | atom''' + try: + p[0] = p[2] + except: + p[0] = p[1] + +def p_atom_int(p): + '''atom : INTEGER''' + p[0] = IntegerNode(p[1]) + +def p_atom_id(p): + '''atom : ID''' + p[0] = VariableNode(p[1]) + +def p_atom_new(p): + '''atom : NEW ID''' + p[0] = NewNode(p[2]) + +def p_atom_block(p): + '''atom : LBRACE block RBRACE''' + p[0] = BlockNode(p[2]) + +def p_block(p): + '''block : expr SEMI + | expr SEMI block''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [ p[1] ] + +def p_atom_bool(p): + '''atom : BOOL''' + p[0] = BoolNode(p[1]) + +def p_atom_string(p): + '''atom : STRING''' + p[0] = StringNode(p[1]) \ No newline at end of file diff --git a/src/cl_parser/coolparser.py b/src/cl_parser/coolparser.py new file mode 100644 index 00000000..a07c771c --- /dev/null +++ b/src/cl_parser/coolparser.py @@ -0,0 +1,10 @@ +import ply.yacc as yacc +import cl_parser.config +from cl_lexer import CoolLexer + +class CoolParser(object): + def __init__(self, *args, **kwargs): + self.parser = yacc.yacc(module=cl_parser.config, **kwargs) + + def parse(self, data, lexer=CoolLexer()): + return self.parser.parse(data, lexer=lexer) \ No newline at end of file diff --git a/src/cl_parser/parsetab.py b/src/cl_parser/parsetab.py new file mode 100644 index 00000000..745a22b5 --- /dev/null +++ b/src/cl_parser/parsetab.py @@ -0,0 +1,88 @@ + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS ID LBRACE feature_list RBRACE SEMI\n | CLASS ID INHERITS ID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON ID\n | ID COLON ID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON ID LBRACE expr RBRACEparam_list : empty\n | param\n | param COMMA param_listparam : ID COLON IDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOL\n | ID ASSIGN expr\n | arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON ID WITH exprarith : arith PLUS arith\n | arith MINUS arith\n | arith STAR arith\n | arith DIVIDE arith\n | arith LESS arith\n | arith LESSQ arith\n | arith EQUALS aritharith : BITNOT arith\n | ISVOID arith\n | NOT aritharith : base_callbase_call : fact ARROBA ID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : empty\n | expr\n | expr COMMA arg_listfact : LPAREN expr RPAREN\n | atomatom : INTEGERatom : IDatom : NEW IDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' + +_lr_action_items = {'CLASS':([0,3,26,58,],[4,4,-5,-6,]),'$end':([1,2,3,5,26,58,],[0,-1,-3,-4,-5,-6,]),'ID':([4,7,8,15,16,18,19,20,30,31,33,37,38,39,40,42,43,44,48,51,52,56,59,60,67,68,69,70,71,72,73,78,79,89,90,91,92,93,94,107,108,110,119,124,125,126,133,],[6,9,14,21,22,9,9,9,35,55,22,22,35,35,35,75,75,75,35,81,35,84,35,35,75,75,75,75,75,75,75,102,104,35,22,35,116,35,35,35,35,35,104,116,131,35,35,]),'LBRACE':([6,14,30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,84,89,91,93,94,107,108,110,126,133,],[7,20,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,108,52,52,52,52,52,52,52,52,52,]),'INHERITS':([6,],[8,]),'RBRACE':([7,10,11,18,19,20,27,28,29,35,41,45,46,47,49,50,53,54,74,75,76,77,81,82,85,95,96,97,98,99,100,101,103,105,106,107,109,111,120,121,123,127,128,134,],[-2,17,-7,-2,-2,-2,-8,-9,34,-52,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,106,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-55,-45,-17,-56,129,-18,-20,-41,-19,]),'COLON':([9,22,32,116,],[15,31,56,125,]),'LPAREN':([9,30,35,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,75,89,91,93,94,104,107,108,110,126,133,],[16,48,60,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,60,48,48,48,48,60,48,48,48,48,48,]),'SEMI':([12,13,17,21,34,35,36,41,45,46,47,49,50,53,54,74,75,76,77,81,83,85,95,96,97,98,99,100,101,103,105,106,109,111,115,123,127,128,129,134,135,],[18,19,26,-10,58,-52,-11,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,107,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,124,-18,-20,-41,-12,-19,-29,]),'RPAREN':([16,23,24,25,33,35,41,45,46,47,49,50,53,54,55,57,60,74,75,76,77,80,81,85,86,87,88,95,96,97,98,99,100,101,103,105,106,109,110,111,122,123,127,128,134,],[-2,32,-13,-14,-2,-52,-22,-40,-42,-44,-50,-51,-57,-58,-16,-15,-2,-37,-52,-38,-39,105,-53,-21,109,-46,-47,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-2,-17,-48,-18,-20,-41,-19,]),'ASSIGN':([21,35,55,63,],[30,59,-16,91,]),'COMMA':([25,35,41,45,46,47,49,50,53,54,55,62,63,74,75,76,77,81,85,88,95,96,97,98,99,100,101,103,105,106,109,111,113,123,127,128,134,],[33,-52,-22,-40,-42,-44,-50,-51,-57,-58,-16,90,-26,-37,-52,-38,-39,-53,-21,110,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-25,-18,-20,-41,-19,]),'LET':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'CASE':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'IF':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'WHILE':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'BITNOT':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'ISVOID':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'NOT':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'INTEGER':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'NEW':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'BOOL':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'STRING':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'ARROBA':([35,46,47,49,50,53,54,75,81,103,105,106,109,],[-52,78,-44,-50,-51,-57,-58,-52,-53,-43,-49,-54,-45,]),'DOT':([35,46,47,49,50,53,54,75,81,102,103,105,106,109,],[-52,79,-44,-50,-51,-57,-58,-52,-53,119,-43,-49,-54,-45,]),'PLUS':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,67,-40,-42,-44,-50,-51,-57,-58,67,-52,67,-39,-53,-30,-31,67,67,-34,-35,-36,-43,-49,-54,-45,-41,]),'MINUS':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,68,-40,-42,-44,-50,-51,-57,-58,68,-52,68,-39,-53,-30,-31,68,68,-34,-35,-36,-43,-49,-54,-45,-41,]),'STAR':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,69,-40,-42,-44,-50,-51,-57,-58,69,-52,69,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-41,]),'DIVIDE':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,70,-40,-42,-44,-50,-51,-57,-58,70,-52,70,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-41,]),'LESS':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,71,-40,-42,-44,-50,-51,-57,-58,71,-52,71,-39,-53,71,71,71,71,None,None,None,-43,-49,-54,-45,-41,]),'LESSQ':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,72,-40,-42,-44,-50,-51,-57,-58,72,-52,72,-39,-53,72,72,72,72,None,None,None,-43,-49,-54,-45,-41,]),'EQUALS':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,73,-40,-42,-44,-50,-51,-57,-58,73,-52,73,-39,-53,73,73,73,73,None,None,None,-43,-49,-54,-45,-41,]),'OF':([35,41,45,46,47,49,50,53,54,64,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,92,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-18,-20,-41,-19,]),'THEN':([35,41,45,46,47,49,50,53,54,65,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,93,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-18,-20,-41,-19,]),'LOOP':([35,41,45,46,47,49,50,53,54,66,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,94,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-18,-20,-41,-19,]),'IN':([35,41,45,46,47,49,50,53,54,55,61,62,63,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,112,113,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,-16,89,-23,-26,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-24,-25,-18,-20,-41,-19,]),'ELSE':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,117,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,126,-18,-20,-41,-19,]),'POOL':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,118,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,127,-18,-20,-41,-19,]),'FI':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,132,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-18,-20,-41,134,-19,]),'ESAC':([114,124,130,],[123,-27,-28,]),'WITH':([131,],[133,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,18,19,20,],[10,27,28,29,]),'empty':([7,16,18,19,20,33,60,110,],[11,24,11,11,11,24,87,87,]),'def_attr':([7,18,19,20,],[12,12,12,12,]),'def_func':([7,18,19,20,],[13,13,13,13,]),'param_list':([16,33,],[23,57,]),'param':([16,33,37,90,],[25,25,63,63,]),'expr':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[36,64,65,66,80,83,85,88,111,113,117,118,83,121,88,132,135,]),'arith':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[41,41,41,41,74,76,77,41,41,41,41,95,96,97,98,99,100,101,41,41,41,41,41,41,41,41,41,]),'base_call':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'fact':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'func_call':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,79,89,91,93,94,107,108,110,119,126,133,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,103,47,47,47,47,47,47,47,128,47,47,]),'atom':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,]),'let_list':([37,90,],[61,112,]),'let_assign':([37,90,],[62,62,]),'block':([52,107,],[82,120,]),'arg_list':([60,110,],[86,122,]),'cases_list':([92,124,],[114,130,]),'case':([92,124,],[115,115,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> program","S'",1,None,None,None), + ('program -> class_list','program',1,'p_program','config.py',10), + ('empty -> ','empty',0,'p_empty','config.py',15), + ('class_list -> def_class','class_list',1,'p_class_list','config.py',20), + ('class_list -> def_class class_list','class_list',2,'p_class_list','config.py',21), + ('def_class -> CLASS ID LBRACE feature_list RBRACE SEMI','def_class',6,'p_def_class','config.py',29), + ('def_class -> CLASS ID INHERITS ID LBRACE feature_list RBRACE SEMI','def_class',8,'p_def_class','config.py',30), + ('feature_list -> empty','feature_list',1,'p_feature_list','config.py',38), + ('feature_list -> def_attr SEMI feature_list','feature_list',3,'p_feature_list','config.py',39), + ('feature_list -> def_func SEMI feature_list','feature_list',3,'p_feature_list','config.py',40), + ('def_attr -> ID COLON ID','def_attr',3,'p_def_attr','config.py',48), + ('def_attr -> ID COLON ID ASSIGN expr','def_attr',5,'p_def_attr','config.py',49), + ('def_func -> ID LPAREN param_list RPAREN COLON ID LBRACE expr RBRACE','def_func',9,'p_def_func','config.py',57), + ('param_list -> empty','param_list',1,'p_param_list','config.py',62), + ('param_list -> param','param_list',1,'p_param_list','config.py',63), + ('param_list -> param COMMA param_list','param_list',3,'p_param_list','config.py',64), + ('param -> ID COLON ID','param',3,'p_param','config.py',75), + ('expr -> LET let_list IN expr','expr',4,'p_expr','config.py',82), + ('expr -> CASE expr OF cases_list ESAC','expr',5,'p_expr','config.py',83), + ('expr -> IF expr THEN expr ELSE expr FI','expr',7,'p_expr','config.py',84), + ('expr -> WHILE expr LOOP expr POOL','expr',5,'p_expr','config.py',85), + ('expr -> ID ASSIGN expr','expr',3,'p_expr','config.py',86), + ('expr -> arith','expr',1,'p_expr','config.py',87), + ('let_list -> let_assign','let_list',1,'p_let_list','config.py',103), + ('let_list -> let_assign COMMA let_list','let_list',3,'p_let_list','config.py',104), + ('let_assign -> param ASSIGN expr','let_assign',3,'p_let_assign','config.py',111), + ('let_assign -> param','let_assign',1,'p_let_assign','config.py',112), + ('cases_list -> case SEMI','cases_list',2,'p_cases_list','config.py',121), + ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','config.py',122), + ('case -> ID COLON ID WITH expr','case',5,'p_case','config.py',129), + ('arith -> arith PLUS arith','arith',3,'p_arith_binary','config.py',145), + ('arith -> arith MINUS arith','arith',3,'p_arith_binary','config.py',146), + ('arith -> arith STAR arith','arith',3,'p_arith_binary','config.py',147), + ('arith -> arith DIVIDE arith','arith',3,'p_arith_binary','config.py',148), + ('arith -> arith LESS arith','arith',3,'p_arith_binary','config.py',149), + ('arith -> arith LESSQ arith','arith',3,'p_arith_binary','config.py',150), + ('arith -> arith EQUALS arith','arith',3,'p_arith_binary','config.py',151), + ('arith -> BITNOT arith','arith',2,'p_arith_unary','config.py',168), + ('arith -> ISVOID arith','arith',2,'p_arith_unary','config.py',169), + ('arith -> NOT arith','arith',2,'p_arith_unary','config.py',170), + ('arith -> base_call','arith',1,'p_arith_basecall','config.py',179), + ('base_call -> fact ARROBA ID DOT func_call','base_call',5,'p_basecall','config.py',185), + ('base_call -> fact','base_call',1,'p_basecall','config.py',186), + ('fact -> fact DOT func_call','fact',3,'p_factcall','config.py',193), + ('fact -> func_call','fact',1,'p_factcall','config.py',194), + ('func_call -> ID LPAREN arg_list RPAREN','func_call',4,'p_func_call','config.py',201), + ('arg_list -> empty','arg_list',1,'p_arglist','config.py',205), + ('arg_list -> expr','arg_list',1,'p_arglist','config.py',206), + ('arg_list -> expr COMMA arg_list','arg_list',3,'p_arglist','config.py',207), + ('fact -> LPAREN expr RPAREN','fact',3,'p_factatom','config.py',219), + ('fact -> atom','fact',1,'p_factatom','config.py',220), + ('atom -> INTEGER','atom',1,'p_atom_int','config.py',227), + ('atom -> ID','atom',1,'p_atom_id','config.py',231), + ('atom -> NEW ID','atom',2,'p_atom_new','config.py',235), + ('atom -> LBRACE block RBRACE','atom',3,'p_atom_block','config.py',239), + ('block -> expr SEMI','block',2,'p_block','config.py',243), + ('block -> expr SEMI block','block',3,'p_block','config.py',244), + ('atom -> BOOL','atom',1,'p_atom_bool','config.py',251), + ('atom -> STRING','atom',1,'p_atom_string','config.py',255), +] From e4bf9f9626e2ed9e1d387607d923fa629883c2f7 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 18 Feb 2020 10:31:31 -0500 Subject: [PATCH 002/140] passing lexer test --- src/cl_lexer/config.py | 131 +++++++++++++++++++++++++++++++----- src/cl_lexer/coollexer.py | 6 +- src/cl_parser/config.py | 57 +++++++++------- src/cl_parser/coolparser.py | 3 +- src/cl_parser/parsetab.py | 82 +++++++++++----------- src/coolc.sh | 6 +- src/main.py | 17 +++++ src/utils.py | 2 + 8 files changed, 217 insertions(+), 87 deletions(-) create mode 100644 src/main.py create mode 100644 src/utils.py diff --git a/src/cl_lexer/config.py b/src/cl_lexer/config.py index 5ecc8a2d..c582847d 100755 --- a/src/cl_lexer/config.py +++ b/src/cl_lexer/config.py @@ -1,5 +1,94 @@ """ PLY Lexer configuration module for COOL Language """ +from utils import ERROR_FORMAT + +states = ( + ('comments', 'exclusive'), + ('str', 'exclusive') +) + +# Comments Actions and Globals +# ------------------------------------ +balance = 0 + +def t_comments(t): + r'\(\*' + global balance + balance = 1 + t.lexer.begin('comments') + +def t_comments_open(t): + r'\(\*' + global balance + balance += 1 + +def t_comments_close(t): + r'\*\)' + global balance + balance -= 1 + + if balance == 0: + t.lexer.begin('INITIAL') + +def t_comments_newline(t): + r'\n+' + t.lexer.lineno += len(t.value) + +t_comments_ignore = r' ' + +# Skip tokens inside comments using error method +def t_comments_error(t): + t.lexer.skip(1) + +def t_comments_eof(t): + global balance + if balance > 0: + print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t), "LexicographicError", "EOF in comment")) + +# String Matching State +# --------------------------------------- + +def t_str(t): + r'\"' + t.lexer.str_start = t.lexer.lexpos + t.lexer.begin('str') + +def t_str_end(t): + r'\"' + t.value = t.lexer.lexdata[t.lexer.str_start:t.lexer.lexpos - 1] + t.type = 'STRING' + t.lexer.begin('INITIAL') + return t + +def t_str_newline(t): + r'\\\n' + #t.lexer.lineno += len(t.value) + t.lexer.lineno += 1 + #pass + +t_str_ignore = '' + +def t_str_consume(t): + r'([^\n\"\\]|\\.)+' + fnil = t.value.rfind('\0') + if fnil != -1: + print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t) + fnil, "LexicographicError", "String contains null character")) + +def t_str_error(t): + if t.value[0] == '\n': + print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t), "LexicographicError", "Unterminated string constant")) + t.lexer.lineno += 1 + t.lexer.skip(1) + t.lexer.begin('INITIAL') + else: + print('??Error??') + +def t_str_eof(t): + print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t), "LexicographicError", "EOF in string constant")) + +# Initial State +# --------------------------------------- + # COOL Keywords reserved = { 'class' : 'CLASS', @@ -45,7 +134,7 @@ 'COMMA', # , 'DOT', # . 'ARROBA', # @ - # 'BTYPE', # Types + 'TYPEID', 'ID' ] + list(reserved.values()) @@ -73,49 +162,57 @@ t_ARROBA = r'@' # METHODS - def t_INTEGER(t): r'\d+' t.value = int(t.value) return t -def t_STRING(t): - r'\"([^\\\n]|(\\.))*?\"' - t.value = t.value[1:-1] - return t - def t_BOOL(t): - r'(true|false)' - t.value = (t.value == 'true') + r'(t[Rr][Uu][Ee]|f[Aa][Ll][Ss][Ee])' + t.value = (t.value.lower() == 'true') return t -# def t_BTYPE(t): -# r'(String|Bool|Int|Object|IO)' -# return t +def t_TYPEID(t): + r'[A-Z][a-zA-Z_0-9]*' + key = t.value.lower() + t.type = reserved.get(key, 'TYPEID') + return t def t_ID(t): - r'[a-zA-z_][a-zA-Z_0-9]*' + r'[a-z][a-zA-Z_0-9]*' key = t.value.lower() t.type = reserved.get(key, 'ID') return t - # OTHER RULES # Comments rule def t_COMMENT(t): # add more comments syntax - r'--.*--' + r'--.*($|\n)' + t.lexer.lineno += 1 pass +# Compute column. +# input is the input text string +# token is a token instance +def find_column(input, token): + line_start = input.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 + # Track line numbers def t_newline(t): r'\n+' t.lexer.lineno += len(t.value) +# Special Ignore +def t_special_ign(t): + r'(\ |\t)' + t.lexer.skip(1) + # Ignored characters -t_ignore = r' ' +t_ignore = ' ' #Error handling rule def t_error(t): - print(f"Unknown token {t.value[0]}") + print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t), "LexicographicError", f"ERROR {t.value[0]}")) t.lexer.skip(1) \ No newline at end of file diff --git a/src/cl_lexer/coollexer.py b/src/cl_lexer/coollexer.py index 1332ee70..36b1f3fb 100755 --- a/src/cl_lexer/coollexer.py +++ b/src/cl_lexer/coollexer.py @@ -3,10 +3,10 @@ class CoolLexer(object): def __init__(self, *args, **kwargs): - self.lexer = lex.lex(module=cl_lexer.config, **kwargs) + self.lexer = lex.lex(module=cl_lexer.config,**kwargs) def token(self): return self.lexer.token() - def input(self, data): - self.lexer.input(data) \ No newline at end of file + def input(self, raw): + self.lexer.input(raw) \ No newline at end of file diff --git a/src/cl_parser/config.py b/src/cl_parser/config.py index 0e2f6b6a..cfc6c5d6 100644 --- a/src/cl_parser/config.py +++ b/src/cl_parser/config.py @@ -24,11 +24,11 @@ def p_class_list(p): except: p[0] = [ p[1] ] -# Class Definition Rules (TODO: Try include TYPE tokens) +# Class Definition Rules def p_def_class(p): '''def_class : CLASS ID LBRACE feature_list RBRACE SEMI | CLASS ID INHERITS ID LBRACE feature_list RBRACE SEMI''' - if p[3] == 'inherits': + if p[3].lower() == 'inherits': p[0] = ClassDeclarationNode(p[2], p[6], p[4]) else: p[0] = ClassDeclarationNode(p[2], p[4]) @@ -43,7 +43,7 @@ def p_feature_list(p): except: p[0] = [] -# Attr Definition Rules (TODO: Try include TYPE tokens) +# Attr Definition Rules def p_def_attr(p): '''def_attr : ID COLON ID | ID COLON ID ASSIGN expr''' @@ -52,12 +52,12 @@ def p_def_attr(p): except: p[0] = AttrDeclarationNode(p[1], p[3]) -# Func Definition Rules (TODO: Try include TYPE tokens) +# Func Definition Rules def p_def_func(p): '''def_func : ID LPAREN param_list RPAREN COLON ID LBRACE expr RBRACE''' p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) -# Func Parameters List Rules (TODO: Try include TYPE tokens) +# Func Parameters List Rules def p_param_list(p): '''param_list : empty | param @@ -70,7 +70,7 @@ def p_param_list(p): except: p[0] = [] -# Parameter Rule (TODO: Try include TYPE ) +# Parameter Rule def p_param(p): '''param : ID COLON ID''' p[0] = (p[1], p[3]) # (ID, TYPE) @@ -82,20 +82,26 @@ def p_expr(p): '''expr : LET let_list IN expr | CASE expr OF cases_list ESAC | IF expr THEN expr ELSE expr FI - | WHILE expr LOOP expr POOL - | ID ASSIGN expr - | arith''' + | WHILE expr LOOP expr POOL''' - if p[1] == 'let': + if p[1].lower() == 'let': p[0] = LetNode(p[2], p[4]) - elif p[1] == 'case': + elif p[1].lower() == 'case': p[0] = CaseNode(p[2], p[4]) - elif p[1] == 'if': + elif p[1].lower() == 'if': p[0] = ConditionalNode(p[2], p[4], p[6]) - elif p[1] == 'while': + elif p[1].lower() == 'while': p[0] = WhileNode(p[2], p[4]) - else: - p[0] = p[1] + +# Assign Production +def p_expr_assign(p): + '''expr : ID ASSIGN expr''' + p[0] = AssignNode(p[1], p[3]) + +# Precedence Production +def p_expr_arith(p): + '''expr : arith''' + p[0] = p[1] # Let Rules @@ -132,6 +138,7 @@ def p_case(p): # Arith Operations # ------------------- +# Operators Precedence precedence = ( ('right', 'BITNOT'), ('right', 'ISVOID'), @@ -141,6 +148,8 @@ def p_case(p): ('right', 'NOT') ) +# Binary Operations Rules + def p_arith_binary(p): #TODO: Change switch-case :( '''arith : arith PLUS arith | arith MINUS arith @@ -164,15 +173,17 @@ def p_arith_binary(p): #TODO: Change switch-case :( elif p[2] == '=': p[0] = EqualNode(p[1], p[3]) +# Unary Operations Rules + def p_arith_unary(p): '''arith : BITNOT arith | ISVOID arith | NOT arith''' if p[1] == '~': p[0] = BitNotNode(p[2]) - elif p[1] == 'isvoid': + elif p[1].lower() == 'isvoid': p[0] = IsVoidNode(p[2]) - elif p[1] == 'not': + elif p[1].lower() == 'not': p[0] = NotNode(p[2]) def p_arith_basecall(p): @@ -216,12 +227,12 @@ def p_arglist(p): # Atomic Operations def p_factatom(p): - '''fact : LPAREN expr RPAREN - | atom''' - try: - p[0] = p[2] - except: - p[0] = p[1] + '''fact : atom''' + p[0] = p[1] + +def p_fact_group(p): + '''fact : LPAREN expr RPAREN''' + p[0] = p[2] def p_atom_int(p): '''atom : INTEGER''' diff --git a/src/cl_parser/coolparser.py b/src/cl_parser/coolparser.py index a07c771c..6ea559dd 100644 --- a/src/cl_parser/coolparser.py +++ b/src/cl_parser/coolparser.py @@ -7,4 +7,5 @@ def __init__(self, *args, **kwargs): self.parser = yacc.yacc(module=cl_parser.config, **kwargs) def parse(self, data, lexer=CoolLexer()): - return self.parser.parse(data, lexer=lexer) \ No newline at end of file + return self.parser.parse(data, lexer=lexer) + \ No newline at end of file diff --git a/src/cl_parser/parsetab.py b/src/cl_parser/parsetab.py index 745a22b5..8d5a3402 100644 --- a/src/cl_parser/parsetab.py +++ b/src/cl_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS ID LBRACE feature_list RBRACE SEMI\n | CLASS ID INHERITS ID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON ID\n | ID COLON ID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON ID LBRACE expr RBRACEparam_list : empty\n | param\n | param COMMA param_listparam : ID COLON IDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOL\n | ID ASSIGN expr\n | arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON ID WITH exprarith : arith PLUS arith\n | arith MINUS arith\n | arith STAR arith\n | arith DIVIDE arith\n | arith LESS arith\n | arith LESSQ arith\n | arith EQUALS aritharith : BITNOT arith\n | ISVOID arith\n | NOT aritharith : base_callbase_call : fact ARROBA ID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : empty\n | expr\n | expr COMMA arg_listfact : LPAREN expr RPAREN\n | atomatom : INTEGERatom : IDatom : NEW IDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' +_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS ID LBRACE feature_list RBRACE SEMI\n | CLASS ID INHERITS ID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON ID\n | ID COLON ID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON ID LBRACE expr RBRACEparam_list : empty\n | param\n | param COMMA param_listparam : ID COLON IDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON ID WITH exprarith : arith PLUS arith\n | arith MINUS arith\n | arith STAR arith\n | arith DIVIDE arith\n | arith LESS arith\n | arith LESSQ arith\n | arith EQUALS aritharith : BITNOT arith\n | ISVOID arith\n | NOT aritharith : base_callbase_call : fact ARROBA ID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : empty\n | expr\n | expr COMMA arg_listfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW IDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' -_lr_action_items = {'CLASS':([0,3,26,58,],[4,4,-5,-6,]),'$end':([1,2,3,5,26,58,],[0,-1,-3,-4,-5,-6,]),'ID':([4,7,8,15,16,18,19,20,30,31,33,37,38,39,40,42,43,44,48,51,52,56,59,60,67,68,69,70,71,72,73,78,79,89,90,91,92,93,94,107,108,110,119,124,125,126,133,],[6,9,14,21,22,9,9,9,35,55,22,22,35,35,35,75,75,75,35,81,35,84,35,35,75,75,75,75,75,75,75,102,104,35,22,35,116,35,35,35,35,35,104,116,131,35,35,]),'LBRACE':([6,14,30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,84,89,91,93,94,107,108,110,126,133,],[7,20,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,108,52,52,52,52,52,52,52,52,52,]),'INHERITS':([6,],[8,]),'RBRACE':([7,10,11,18,19,20,27,28,29,35,41,45,46,47,49,50,53,54,74,75,76,77,81,82,85,95,96,97,98,99,100,101,103,105,106,107,109,111,120,121,123,127,128,134,],[-2,17,-7,-2,-2,-2,-8,-9,34,-52,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,106,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-55,-45,-17,-56,129,-18,-20,-41,-19,]),'COLON':([9,22,32,116,],[15,31,56,125,]),'LPAREN':([9,30,35,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,75,89,91,93,94,104,107,108,110,126,133,],[16,48,60,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,60,48,48,48,48,60,48,48,48,48,48,]),'SEMI':([12,13,17,21,34,35,36,41,45,46,47,49,50,53,54,74,75,76,77,81,83,85,95,96,97,98,99,100,101,103,105,106,109,111,115,123,127,128,129,134,135,],[18,19,26,-10,58,-52,-11,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,107,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,124,-18,-20,-41,-12,-19,-29,]),'RPAREN':([16,23,24,25,33,35,41,45,46,47,49,50,53,54,55,57,60,74,75,76,77,80,81,85,86,87,88,95,96,97,98,99,100,101,103,105,106,109,110,111,122,123,127,128,134,],[-2,32,-13,-14,-2,-52,-22,-40,-42,-44,-50,-51,-57,-58,-16,-15,-2,-37,-52,-38,-39,105,-53,-21,109,-46,-47,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-2,-17,-48,-18,-20,-41,-19,]),'ASSIGN':([21,35,55,63,],[30,59,-16,91,]),'COMMA':([25,35,41,45,46,47,49,50,53,54,55,62,63,74,75,76,77,81,85,88,95,96,97,98,99,100,101,103,105,106,109,111,113,123,127,128,134,],[33,-52,-22,-40,-42,-44,-50,-51,-57,-58,-16,90,-26,-37,-52,-38,-39,-53,-21,110,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-25,-18,-20,-41,-19,]),'LET':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'CASE':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'IF':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'WHILE':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'BITNOT':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'ISVOID':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'NOT':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'INTEGER':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'NEW':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'BOOL':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'STRING':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'ARROBA':([35,46,47,49,50,53,54,75,81,103,105,106,109,],[-52,78,-44,-50,-51,-57,-58,-52,-53,-43,-49,-54,-45,]),'DOT':([35,46,47,49,50,53,54,75,81,102,103,105,106,109,],[-52,79,-44,-50,-51,-57,-58,-52,-53,119,-43,-49,-54,-45,]),'PLUS':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,67,-40,-42,-44,-50,-51,-57,-58,67,-52,67,-39,-53,-30,-31,67,67,-34,-35,-36,-43,-49,-54,-45,-41,]),'MINUS':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,68,-40,-42,-44,-50,-51,-57,-58,68,-52,68,-39,-53,-30,-31,68,68,-34,-35,-36,-43,-49,-54,-45,-41,]),'STAR':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,69,-40,-42,-44,-50,-51,-57,-58,69,-52,69,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-41,]),'DIVIDE':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,70,-40,-42,-44,-50,-51,-57,-58,70,-52,70,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-41,]),'LESS':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,71,-40,-42,-44,-50,-51,-57,-58,71,-52,71,-39,-53,71,71,71,71,None,None,None,-43,-49,-54,-45,-41,]),'LESSQ':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,72,-40,-42,-44,-50,-51,-57,-58,72,-52,72,-39,-53,72,72,72,72,None,None,None,-43,-49,-54,-45,-41,]),'EQUALS':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,73,-40,-42,-44,-50,-51,-57,-58,73,-52,73,-39,-53,73,73,73,73,None,None,None,-43,-49,-54,-45,-41,]),'OF':([35,41,45,46,47,49,50,53,54,64,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,92,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-18,-20,-41,-19,]),'THEN':([35,41,45,46,47,49,50,53,54,65,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,93,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-18,-20,-41,-19,]),'LOOP':([35,41,45,46,47,49,50,53,54,66,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,94,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-18,-20,-41,-19,]),'IN':([35,41,45,46,47,49,50,53,54,55,61,62,63,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,112,113,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,-16,89,-23,-26,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-24,-25,-18,-20,-41,-19,]),'ELSE':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,117,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,126,-18,-20,-41,-19,]),'POOL':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,118,123,127,128,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,127,-18,-20,-41,-19,]),'FI':([35,41,45,46,47,49,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,132,134,],[-52,-22,-40,-42,-44,-50,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-49,-54,-45,-17,-18,-20,-41,134,-19,]),'ESAC':([114,124,130,],[123,-27,-28,]),'WITH':([131,],[133,]),} +_lr_action_items = {'CLASS':([0,3,26,58,],[4,4,-5,-6,]),'$end':([1,2,3,5,26,58,],[0,-1,-3,-4,-5,-6,]),'ID':([4,7,8,15,16,18,19,20,30,31,33,37,38,39,40,42,43,44,49,51,52,56,59,60,67,68,69,70,71,72,73,78,79,89,90,91,92,93,94,107,108,110,119,124,125,126,133,],[6,9,14,21,22,9,9,9,35,55,22,22,35,35,35,75,75,75,35,81,35,84,35,35,75,75,75,75,75,75,75,102,104,35,22,35,116,35,35,35,35,35,104,116,131,35,35,]),'LBRACE':([6,14,30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,84,89,91,93,94,107,108,110,126,133,],[7,20,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,108,52,52,52,52,52,52,52,52,52,]),'INHERITS':([6,],[8,]),'RBRACE':([7,10,11,18,19,20,27,28,29,35,41,45,46,47,48,50,53,54,74,75,76,77,81,82,85,95,96,97,98,99,100,101,103,105,106,107,109,111,120,121,123,127,128,134,],[-2,17,-7,-2,-2,-2,-8,-9,34,-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,106,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-55,-45,-17,-56,129,-18,-20,-41,-19,]),'COLON':([9,22,32,116,],[15,31,56,125,]),'LPAREN':([9,30,35,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,75,89,91,93,94,104,107,108,110,126,133,],[16,49,60,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,60,49,49,49,49,60,49,49,49,49,49,]),'SEMI':([12,13,17,21,34,35,36,41,45,46,47,48,50,53,54,74,75,76,77,81,83,85,95,96,97,98,99,100,101,103,105,106,109,111,115,123,127,128,129,134,135,],[18,19,26,-10,58,-52,-11,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,107,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,124,-18,-20,-41,-12,-19,-29,]),'RPAREN':([16,23,24,25,33,35,41,45,46,47,48,50,53,54,55,57,60,74,75,76,77,80,81,85,86,87,88,95,96,97,98,99,100,101,103,105,106,109,110,111,122,123,127,128,134,],[-2,32,-13,-14,-2,-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,-15,-2,-37,-52,-38,-39,105,-53,-21,109,-46,-47,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-2,-17,-48,-18,-20,-41,-19,]),'ASSIGN':([21,35,55,63,],[30,59,-16,91,]),'COMMA':([25,35,41,45,46,47,48,50,53,54,55,62,63,74,75,76,77,81,85,88,95,96,97,98,99,100,101,103,105,106,109,111,113,123,127,128,134,],[33,-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,90,-26,-37,-52,-38,-39,-53,-21,110,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-25,-18,-20,-41,-19,]),'LET':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'CASE':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'IF':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'WHILE':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'BITNOT':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'ISVOID':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'NOT':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'INTEGER':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'NEW':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'BOOL':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'STRING':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'ARROBA':([35,46,47,48,50,53,54,75,81,103,105,106,109,],[-52,78,-44,-49,-51,-57,-58,-52,-53,-43,-50,-54,-45,]),'DOT':([35,46,47,48,50,53,54,75,81,102,103,105,106,109,],[-52,79,-44,-49,-51,-57,-58,-52,-53,119,-43,-50,-54,-45,]),'PLUS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,67,-40,-42,-44,-49,-51,-57,-58,67,-52,67,-39,-53,-30,-31,67,67,-34,-35,-36,-43,-50,-54,-45,-41,]),'MINUS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,68,-40,-42,-44,-49,-51,-57,-58,68,-52,68,-39,-53,-30,-31,68,68,-34,-35,-36,-43,-50,-54,-45,-41,]),'STAR':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,69,-40,-42,-44,-49,-51,-57,-58,69,-52,69,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-41,]),'DIVIDE':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,70,-40,-42,-44,-49,-51,-57,-58,70,-52,70,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-41,]),'LESS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,71,-40,-42,-44,-49,-51,-57,-58,71,-52,71,-39,-53,71,71,71,71,None,None,None,-43,-50,-54,-45,-41,]),'LESSQ':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,72,-40,-42,-44,-49,-51,-57,-58,72,-52,72,-39,-53,72,72,72,72,None,None,None,-43,-50,-54,-45,-41,]),'EQUALS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,73,-40,-42,-44,-49,-51,-57,-58,73,-52,73,-39,-53,73,73,73,73,None,None,None,-43,-50,-54,-45,-41,]),'OF':([35,41,45,46,47,48,50,53,54,64,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,92,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'THEN':([35,41,45,46,47,48,50,53,54,65,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,93,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'LOOP':([35,41,45,46,47,48,50,53,54,66,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,94,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'IN':([35,41,45,46,47,48,50,53,54,55,61,62,63,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,112,113,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,89,-23,-26,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-24,-25,-18,-20,-41,-19,]),'ELSE':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,117,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,126,-18,-20,-41,-19,]),'POOL':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,118,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,127,-18,-20,-41,-19,]),'FI':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,132,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,134,-19,]),'ESAC':([114,124,130,],[123,-27,-28,]),'WITH':([131,],[133,]),} _lr_action = {} for _k, _v in _lr_action_items.items(): @@ -17,7 +17,7 @@ _lr_action[_x][_k] = _y del _lr_action_items -_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,18,19,20,],[10,27,28,29,]),'empty':([7,16,18,19,20,33,60,110,],[11,24,11,11,11,24,87,87,]),'def_attr':([7,18,19,20,],[12,12,12,12,]),'def_func':([7,18,19,20,],[13,13,13,13,]),'param_list':([16,33,],[23,57,]),'param':([16,33,37,90,],[25,25,63,63,]),'expr':([30,38,39,40,48,52,59,60,89,91,93,94,107,108,110,126,133,],[36,64,65,66,80,83,85,88,111,113,117,118,83,121,88,132,135,]),'arith':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[41,41,41,41,74,76,77,41,41,41,41,95,96,97,98,99,100,101,41,41,41,41,41,41,41,41,41,]),'base_call':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'fact':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'func_call':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,79,89,91,93,94,107,108,110,119,126,133,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,103,47,47,47,47,47,47,47,128,47,47,]),'atom':([30,38,39,40,42,43,44,48,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,]),'let_list':([37,90,],[61,112,]),'let_assign':([37,90,],[62,62,]),'block':([52,107,],[82,120,]),'arg_list':([60,110,],[86,122,]),'cases_list':([92,124,],[114,130,]),'case':([92,124,],[115,115,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,18,19,20,],[10,27,28,29,]),'empty':([7,16,18,19,20,33,60,110,],[11,24,11,11,11,24,87,87,]),'def_attr':([7,18,19,20,],[12,12,12,12,]),'def_func':([7,18,19,20,],[13,13,13,13,]),'param_list':([16,33,],[23,57,]),'param':([16,33,37,90,],[25,25,63,63,]),'expr':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[36,64,65,66,80,83,85,88,111,113,117,118,83,121,88,132,135,]),'arith':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[41,41,41,41,74,76,77,41,41,41,41,95,96,97,98,99,100,101,41,41,41,41,41,41,41,41,41,]),'base_call':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'fact':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'func_call':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,79,89,91,93,94,107,108,110,119,126,133,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,103,47,47,47,47,47,47,47,128,47,47,]),'atom':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'let_list':([37,90,],[61,112,]),'let_assign':([37,90,],[62,62,]),'block':([52,107,],[82,120,]),'arg_list':([60,110,],[86,122,]),'cases_list':([92,124,],[114,130,]),'case':([92,124,],[115,115,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -47,42 +47,42 @@ ('expr -> CASE expr OF cases_list ESAC','expr',5,'p_expr','config.py',83), ('expr -> IF expr THEN expr ELSE expr FI','expr',7,'p_expr','config.py',84), ('expr -> WHILE expr LOOP expr POOL','expr',5,'p_expr','config.py',85), - ('expr -> ID ASSIGN expr','expr',3,'p_expr','config.py',86), - ('expr -> arith','expr',1,'p_expr','config.py',87), - ('let_list -> let_assign','let_list',1,'p_let_list','config.py',103), - ('let_list -> let_assign COMMA let_list','let_list',3,'p_let_list','config.py',104), - ('let_assign -> param ASSIGN expr','let_assign',3,'p_let_assign','config.py',111), - ('let_assign -> param','let_assign',1,'p_let_assign','config.py',112), - ('cases_list -> case SEMI','cases_list',2,'p_cases_list','config.py',121), - ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','config.py',122), - ('case -> ID COLON ID WITH expr','case',5,'p_case','config.py',129), - ('arith -> arith PLUS arith','arith',3,'p_arith_binary','config.py',145), - ('arith -> arith MINUS arith','arith',3,'p_arith_binary','config.py',146), - ('arith -> arith STAR arith','arith',3,'p_arith_binary','config.py',147), - ('arith -> arith DIVIDE arith','arith',3,'p_arith_binary','config.py',148), - ('arith -> arith LESS arith','arith',3,'p_arith_binary','config.py',149), - ('arith -> arith LESSQ arith','arith',3,'p_arith_binary','config.py',150), - ('arith -> arith EQUALS arith','arith',3,'p_arith_binary','config.py',151), - ('arith -> BITNOT arith','arith',2,'p_arith_unary','config.py',168), - ('arith -> ISVOID arith','arith',2,'p_arith_unary','config.py',169), - ('arith -> NOT arith','arith',2,'p_arith_unary','config.py',170), - ('arith -> base_call','arith',1,'p_arith_basecall','config.py',179), - ('base_call -> fact ARROBA ID DOT func_call','base_call',5,'p_basecall','config.py',185), - ('base_call -> fact','base_call',1,'p_basecall','config.py',186), - ('fact -> fact DOT func_call','fact',3,'p_factcall','config.py',193), - ('fact -> func_call','fact',1,'p_factcall','config.py',194), - ('func_call -> ID LPAREN arg_list RPAREN','func_call',4,'p_func_call','config.py',201), - ('arg_list -> empty','arg_list',1,'p_arglist','config.py',205), - ('arg_list -> expr','arg_list',1,'p_arglist','config.py',206), - ('arg_list -> expr COMMA arg_list','arg_list',3,'p_arglist','config.py',207), - ('fact -> LPAREN expr RPAREN','fact',3,'p_factatom','config.py',219), - ('fact -> atom','fact',1,'p_factatom','config.py',220), - ('atom -> INTEGER','atom',1,'p_atom_int','config.py',227), - ('atom -> ID','atom',1,'p_atom_id','config.py',231), - ('atom -> NEW ID','atom',2,'p_atom_new','config.py',235), - ('atom -> LBRACE block RBRACE','atom',3,'p_atom_block','config.py',239), - ('block -> expr SEMI','block',2,'p_block','config.py',243), - ('block -> expr SEMI block','block',3,'p_block','config.py',244), - ('atom -> BOOL','atom',1,'p_atom_bool','config.py',251), - ('atom -> STRING','atom',1,'p_atom_string','config.py',255), + ('expr -> ID ASSIGN expr','expr',3,'p_expr_assign','config.py',98), + ('expr -> arith','expr',1,'p_expr_arith','config.py',103), + ('let_list -> let_assign','let_list',1,'p_let_list','config.py',109), + ('let_list -> let_assign COMMA let_list','let_list',3,'p_let_list','config.py',110), + ('let_assign -> param ASSIGN expr','let_assign',3,'p_let_assign','config.py',117), + ('let_assign -> param','let_assign',1,'p_let_assign','config.py',118), + ('cases_list -> case SEMI','cases_list',2,'p_cases_list','config.py',127), + ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','config.py',128), + ('case -> ID COLON ID WITH expr','case',5,'p_case','config.py',135), + ('arith -> arith PLUS arith','arith',3,'p_arith_binary','config.py',154), + ('arith -> arith MINUS arith','arith',3,'p_arith_binary','config.py',155), + ('arith -> arith STAR arith','arith',3,'p_arith_binary','config.py',156), + ('arith -> arith DIVIDE arith','arith',3,'p_arith_binary','config.py',157), + ('arith -> arith LESS arith','arith',3,'p_arith_binary','config.py',158), + ('arith -> arith LESSQ arith','arith',3,'p_arith_binary','config.py',159), + ('arith -> arith EQUALS arith','arith',3,'p_arith_binary','config.py',160), + ('arith -> BITNOT arith','arith',2,'p_arith_unary','config.py',179), + ('arith -> ISVOID arith','arith',2,'p_arith_unary','config.py',180), + ('arith -> NOT arith','arith',2,'p_arith_unary','config.py',181), + ('arith -> base_call','arith',1,'p_arith_basecall','config.py',190), + ('base_call -> fact ARROBA ID DOT func_call','base_call',5,'p_basecall','config.py',196), + ('base_call -> fact','base_call',1,'p_basecall','config.py',197), + ('fact -> fact DOT func_call','fact',3,'p_factcall','config.py',204), + ('fact -> func_call','fact',1,'p_factcall','config.py',205), + ('func_call -> ID LPAREN arg_list RPAREN','func_call',4,'p_func_call','config.py',212), + ('arg_list -> empty','arg_list',1,'p_arglist','config.py',216), + ('arg_list -> expr','arg_list',1,'p_arglist','config.py',217), + ('arg_list -> expr COMMA arg_list','arg_list',3,'p_arglist','config.py',218), + ('fact -> atom','fact',1,'p_factatom','config.py',230), + ('fact -> LPAREN expr RPAREN','fact',3,'p_fact_group','config.py',234), + ('atom -> INTEGER','atom',1,'p_atom_int','config.py',238), + ('atom -> ID','atom',1,'p_atom_id','config.py',242), + ('atom -> NEW ID','atom',2,'p_atom_new','config.py',246), + ('atom -> LBRACE block RBRACE','atom',3,'p_atom_block','config.py',250), + ('block -> expr SEMI','block',2,'p_block','config.py',254), + ('block -> expr SEMI block','block',3,'p_block','config.py',255), + ('atom -> BOOL','atom',1,'p_atom_bool','config.py',262), + ('atom -> STRING','atom',1,'p_atom_string','config.py',266), ] diff --git a/src/coolc.sh b/src/coolc.sh index 3088de4f..61d7ef04 100755 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -1,11 +1,13 @@ # Incluya aquí las instrucciones necesarias para ejecutar su compilador INPUT_FILE=$1 -OUTPUT_FILE=${INPUT_FILE:0: -2}mips +#OUTPUT_FILE=${INPUT_FILE:0: -2}mips # Si su compilador no lo hace ya, aquí puede imprimir la información de contacto echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas echo "Copyright (c) 2019: Nombre1, Nombre2, Nombre3" # TODO: líneas a los valores correctos # Llamar al compilador -echo "Compiling $INPUT_FILE into $OUTPUT_FILE" +#echo "Compiling $INPUT_FILE into $OUTPUT_FILE" + +python3 test.py $INPUT_FILE \ No newline at end of file diff --git a/src/main.py b/src/main.py new file mode 100644 index 00000000..7a8d401e --- /dev/null +++ b/src/main.py @@ -0,0 +1,17 @@ +from cl_lexer import CoolLexer +from cl_parser import CoolParser + +import sys + +def main(): + program = open(sys.argv[1]).read() + lex = CoolLexer() + lex.input(program) + while True: + tok = lex.token() + if not tok: + break + +if __name__ == "__main__": + main() + exit(1) # temporal diff --git a/src/utils.py b/src/utils.py new file mode 100644 index 00000000..cd291931 --- /dev/null +++ b/src/utils.py @@ -0,0 +1,2 @@ +#(Row, Col) - ErrorType: Message +ERROR_FORMAT = "(%d, %d) - %s: %s" \ No newline at end of file From 22690bf4756b94ecb190ad38d672ed7ea4905ecb Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 18 Feb 2020 11:43:04 -0500 Subject: [PATCH 003/140] including TYPEID in grammar rules --- src/cl_parser/config.py | 18 +++++++++--------- src/cl_parser/parsetab.py | 24 ++++++++++++------------ src/main.py | 2 +- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/cl_parser/config.py b/src/cl_parser/config.py index cfc6c5d6..7fb930c0 100644 --- a/src/cl_parser/config.py +++ b/src/cl_parser/config.py @@ -26,8 +26,8 @@ def p_class_list(p): # Class Definition Rules def p_def_class(p): - '''def_class : CLASS ID LBRACE feature_list RBRACE SEMI - | CLASS ID INHERITS ID LBRACE feature_list RBRACE SEMI''' + '''def_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI + | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI''' if p[3].lower() == 'inherits': p[0] = ClassDeclarationNode(p[2], p[6], p[4]) else: @@ -45,8 +45,8 @@ def p_feature_list(p): # Attr Definition Rules def p_def_attr(p): - '''def_attr : ID COLON ID - | ID COLON ID ASSIGN expr''' + '''def_attr : ID COLON TYPEID + | ID COLON TYPEID ASSIGN expr''' try: p[0] = AttrDeclarationNode(p[1], p[3], p[5]) except: @@ -54,7 +54,7 @@ def p_def_attr(p): # Func Definition Rules def p_def_func(p): - '''def_func : ID LPAREN param_list RPAREN COLON ID LBRACE expr RBRACE''' + '''def_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE''' p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) # Func Parameters List Rules @@ -72,7 +72,7 @@ def p_param_list(p): # Parameter Rule def p_param(p): - '''param : ID COLON ID''' + '''param : ID COLON TYPEID''' p[0] = (p[1], p[3]) # (ID, TYPE) # Expression Rules @@ -132,7 +132,7 @@ def p_cases_list(p): p[0] = [ p[1] ] def p_case(p): - '''case : ID COLON ID WITH expr''' + '''case : ID COLON TYPEID WITH expr''' p[0] = OptionNode(p[1], p[3], p[5]) # Arith Operations @@ -193,7 +193,7 @@ def p_arith_basecall(p): # Function Call Rules def p_basecall(p): # Parent Call (Review) - '''base_call : fact ARROBA ID DOT func_call + '''base_call : fact ARROBA TYPEID DOT func_call | fact''' try: p[0] = ParentCallNode(p[1], p[3], p[5][0], p[5][1]) @@ -243,7 +243,7 @@ def p_atom_id(p): p[0] = VariableNode(p[1]) def p_atom_new(p): - '''atom : NEW ID''' + '''atom : NEW TYPEID''' p[0] = NewNode(p[2]) def p_atom_block(p): diff --git a/src/cl_parser/parsetab.py b/src/cl_parser/parsetab.py index 8d5a3402..e6306d15 100644 --- a/src/cl_parser/parsetab.py +++ b/src/cl_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS ID LBRACE feature_list RBRACE SEMI\n | CLASS ID INHERITS ID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON ID\n | ID COLON ID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON ID LBRACE expr RBRACEparam_list : empty\n | param\n | param COMMA param_listparam : ID COLON IDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON ID WITH exprarith : arith PLUS arith\n | arith MINUS arith\n | arith STAR arith\n | arith DIVIDE arith\n | arith LESS arith\n | arith LESSQ arith\n | arith EQUALS aritharith : BITNOT arith\n | ISVOID arith\n | NOT aritharith : base_callbase_call : fact ARROBA ID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : empty\n | expr\n | expr COMMA arg_listfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW IDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' +_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : empty\n | param\n | param COMMA param_listparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprarith : arith PLUS arith\n | arith MINUS arith\n | arith STAR arith\n | arith DIVIDE arith\n | arith LESS arith\n | arith LESSQ arith\n | arith EQUALS aritharith : BITNOT arith\n | ISVOID arith\n | NOT aritharith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : empty\n | expr\n | expr COMMA arg_listfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' -_lr_action_items = {'CLASS':([0,3,26,58,],[4,4,-5,-6,]),'$end':([1,2,3,5,26,58,],[0,-1,-3,-4,-5,-6,]),'ID':([4,7,8,15,16,18,19,20,30,31,33,37,38,39,40,42,43,44,49,51,52,56,59,60,67,68,69,70,71,72,73,78,79,89,90,91,92,93,94,107,108,110,119,124,125,126,133,],[6,9,14,21,22,9,9,9,35,55,22,22,35,35,35,75,75,75,35,81,35,84,35,35,75,75,75,75,75,75,75,102,104,35,22,35,116,35,35,35,35,35,104,116,131,35,35,]),'LBRACE':([6,14,30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,84,89,91,93,94,107,108,110,126,133,],[7,20,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,108,52,52,52,52,52,52,52,52,52,]),'INHERITS':([6,],[8,]),'RBRACE':([7,10,11,18,19,20,27,28,29,35,41,45,46,47,48,50,53,54,74,75,76,77,81,82,85,95,96,97,98,99,100,101,103,105,106,107,109,111,120,121,123,127,128,134,],[-2,17,-7,-2,-2,-2,-8,-9,34,-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,106,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-55,-45,-17,-56,129,-18,-20,-41,-19,]),'COLON':([9,22,32,116,],[15,31,56,125,]),'LPAREN':([9,30,35,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,75,89,91,93,94,104,107,108,110,126,133,],[16,49,60,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,60,49,49,49,49,60,49,49,49,49,49,]),'SEMI':([12,13,17,21,34,35,36,41,45,46,47,48,50,53,54,74,75,76,77,81,83,85,95,96,97,98,99,100,101,103,105,106,109,111,115,123,127,128,129,134,135,],[18,19,26,-10,58,-52,-11,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,107,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,124,-18,-20,-41,-12,-19,-29,]),'RPAREN':([16,23,24,25,33,35,41,45,46,47,48,50,53,54,55,57,60,74,75,76,77,80,81,85,86,87,88,95,96,97,98,99,100,101,103,105,106,109,110,111,122,123,127,128,134,],[-2,32,-13,-14,-2,-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,-15,-2,-37,-52,-38,-39,105,-53,-21,109,-46,-47,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-2,-17,-48,-18,-20,-41,-19,]),'ASSIGN':([21,35,55,63,],[30,59,-16,91,]),'COMMA':([25,35,41,45,46,47,48,50,53,54,55,62,63,74,75,76,77,81,85,88,95,96,97,98,99,100,101,103,105,106,109,111,113,123,127,128,134,],[33,-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,90,-26,-37,-52,-38,-39,-53,-21,110,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-25,-18,-20,-41,-19,]),'LET':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'CASE':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'IF':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'WHILE':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'BITNOT':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'ISVOID':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'NOT':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'INTEGER':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'NEW':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'BOOL':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'STRING':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'ARROBA':([35,46,47,48,50,53,54,75,81,103,105,106,109,],[-52,78,-44,-49,-51,-57,-58,-52,-53,-43,-50,-54,-45,]),'DOT':([35,46,47,48,50,53,54,75,81,102,103,105,106,109,],[-52,79,-44,-49,-51,-57,-58,-52,-53,119,-43,-50,-54,-45,]),'PLUS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,67,-40,-42,-44,-49,-51,-57,-58,67,-52,67,-39,-53,-30,-31,67,67,-34,-35,-36,-43,-50,-54,-45,-41,]),'MINUS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,68,-40,-42,-44,-49,-51,-57,-58,68,-52,68,-39,-53,-30,-31,68,68,-34,-35,-36,-43,-50,-54,-45,-41,]),'STAR':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,69,-40,-42,-44,-49,-51,-57,-58,69,-52,69,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-41,]),'DIVIDE':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,70,-40,-42,-44,-49,-51,-57,-58,70,-52,70,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-41,]),'LESS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,71,-40,-42,-44,-49,-51,-57,-58,71,-52,71,-39,-53,71,71,71,71,None,None,None,-43,-50,-54,-45,-41,]),'LESSQ':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,72,-40,-42,-44,-49,-51,-57,-58,72,-52,72,-39,-53,72,72,72,72,None,None,None,-43,-50,-54,-45,-41,]),'EQUALS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,73,-40,-42,-44,-49,-51,-57,-58,73,-52,73,-39,-53,73,73,73,73,None,None,None,-43,-50,-54,-45,-41,]),'OF':([35,41,45,46,47,48,50,53,54,64,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,92,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'THEN':([35,41,45,46,47,48,50,53,54,65,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,93,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'LOOP':([35,41,45,46,47,48,50,53,54,66,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,94,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'IN':([35,41,45,46,47,48,50,53,54,55,61,62,63,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,112,113,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,89,-23,-26,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-24,-25,-18,-20,-41,-19,]),'ELSE':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,117,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,126,-18,-20,-41,-19,]),'POOL':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,118,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,127,-18,-20,-41,-19,]),'FI':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,132,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,134,-19,]),'ESAC':([114,124,130,],[123,-27,-28,]),'WITH':([131,],[133,]),} +_lr_action_items = {'CLASS':([0,3,21,58,],[4,4,-5,-6,]),'$end':([1,2,3,5,21,58,],[0,-1,-3,-4,-5,-6,]),'TYPEID':([4,8,18,31,51,56,78,125,],[6,14,24,55,81,84,102,131,]),'LBRACE':([6,14,30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,84,89,91,93,94,107,108,110,126,133,],[7,20,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,108,52,52,52,52,52,52,52,52,52,]),'INHERITS':([6,],[8,]),'RBRACE':([7,9,10,16,17,20,22,23,29,35,41,45,46,47,48,50,53,54,74,75,76,77,81,82,85,95,96,97,98,99,100,101,103,105,106,107,109,111,120,121,123,127,128,134,],[-2,15,-7,-2,-2,-2,-8,-9,34,-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,106,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-55,-45,-17,-56,129,-18,-20,-41,-19,]),'ID':([7,16,17,19,20,30,33,37,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,79,89,90,91,92,93,94,107,108,110,119,124,126,133,],[13,13,13,25,13,35,25,25,35,35,35,75,75,75,35,35,35,35,75,75,75,75,75,75,75,104,35,25,35,116,35,35,35,35,35,104,116,35,35,]),'SEMI':([11,12,15,24,34,35,36,41,45,46,47,48,50,53,54,74,75,76,77,81,83,85,95,96,97,98,99,100,101,103,105,106,109,111,115,123,127,128,129,134,135,],[16,17,21,-10,58,-52,-11,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,107,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,124,-18,-20,-41,-12,-19,-29,]),'COLON':([13,25,32,116,],[18,31,56,125,]),'LPAREN':([13,30,35,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,75,89,91,93,94,104,107,108,110,126,133,],[19,49,60,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,60,49,49,49,49,60,49,49,49,49,49,]),'RPAREN':([19,26,27,28,33,35,41,45,46,47,48,50,53,54,55,57,60,74,75,76,77,80,81,85,86,87,88,95,96,97,98,99,100,101,103,105,106,109,110,111,122,123,127,128,134,],[-2,32,-13,-14,-2,-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,-15,-2,-37,-52,-38,-39,105,-53,-21,109,-46,-47,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-2,-17,-48,-18,-20,-41,-19,]),'ASSIGN':([24,35,55,63,],[30,59,-16,91,]),'COMMA':([28,35,41,45,46,47,48,50,53,54,55,62,63,74,75,76,77,81,85,88,95,96,97,98,99,100,101,103,105,106,109,111,113,123,127,128,134,],[33,-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,90,-26,-37,-52,-38,-39,-53,-21,110,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-25,-18,-20,-41,-19,]),'LET':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'CASE':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'IF':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'WHILE':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'BITNOT':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'ISVOID':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'NOT':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'INTEGER':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'NEW':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'BOOL':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'STRING':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'ARROBA':([35,46,47,48,50,53,54,75,81,103,105,106,109,],[-52,78,-44,-49,-51,-57,-58,-52,-53,-43,-50,-54,-45,]),'DOT':([35,46,47,48,50,53,54,75,81,102,103,105,106,109,],[-52,79,-44,-49,-51,-57,-58,-52,-53,119,-43,-50,-54,-45,]),'PLUS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,67,-40,-42,-44,-49,-51,-57,-58,67,-52,67,-39,-53,-30,-31,67,67,-34,-35,-36,-43,-50,-54,-45,-41,]),'MINUS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,68,-40,-42,-44,-49,-51,-57,-58,68,-52,68,-39,-53,-30,-31,68,68,-34,-35,-36,-43,-50,-54,-45,-41,]),'STAR':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,69,-40,-42,-44,-49,-51,-57,-58,69,-52,69,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-41,]),'DIVIDE':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,70,-40,-42,-44,-49,-51,-57,-58,70,-52,70,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-41,]),'LESS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,71,-40,-42,-44,-49,-51,-57,-58,71,-52,71,-39,-53,71,71,71,71,None,None,None,-43,-50,-54,-45,-41,]),'LESSQ':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,72,-40,-42,-44,-49,-51,-57,-58,72,-52,72,-39,-53,72,72,72,72,None,None,None,-43,-50,-54,-45,-41,]),'EQUALS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,73,-40,-42,-44,-49,-51,-57,-58,73,-52,73,-39,-53,73,73,73,73,None,None,None,-43,-50,-54,-45,-41,]),'OF':([35,41,45,46,47,48,50,53,54,64,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,92,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'THEN':([35,41,45,46,47,48,50,53,54,65,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,93,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'LOOP':([35,41,45,46,47,48,50,53,54,66,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,94,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'IN':([35,41,45,46,47,48,50,53,54,55,61,62,63,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,112,113,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,89,-23,-26,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-24,-25,-18,-20,-41,-19,]),'ELSE':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,117,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,126,-18,-20,-41,-19,]),'POOL':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,118,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,127,-18,-20,-41,-19,]),'FI':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,132,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,134,-19,]),'ESAC':([114,124,130,],[123,-27,-28,]),'WITH':([131,],[133,]),} _lr_action = {} for _k, _v in _lr_action_items.items(): @@ -17,7 +17,7 @@ _lr_action[_x][_k] = _y del _lr_action_items -_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,18,19,20,],[10,27,28,29,]),'empty':([7,16,18,19,20,33,60,110,],[11,24,11,11,11,24,87,87,]),'def_attr':([7,18,19,20,],[12,12,12,12,]),'def_func':([7,18,19,20,],[13,13,13,13,]),'param_list':([16,33,],[23,57,]),'param':([16,33,37,90,],[25,25,63,63,]),'expr':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[36,64,65,66,80,83,85,88,111,113,117,118,83,121,88,132,135,]),'arith':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[41,41,41,41,74,76,77,41,41,41,41,95,96,97,98,99,100,101,41,41,41,41,41,41,41,41,41,]),'base_call':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'fact':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'func_call':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,79,89,91,93,94,107,108,110,119,126,133,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,103,47,47,47,47,47,47,47,128,47,47,]),'atom':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'let_list':([37,90,],[61,112,]),'let_assign':([37,90,],[62,62,]),'block':([52,107,],[82,120,]),'arg_list':([60,110,],[86,122,]),'cases_list':([92,124,],[114,130,]),'case':([92,124,],[115,115,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,16,17,20,],[9,22,23,29,]),'empty':([7,16,17,19,20,33,60,110,],[10,10,10,27,10,27,87,87,]),'def_attr':([7,16,17,20,],[11,11,11,11,]),'def_func':([7,16,17,20,],[12,12,12,12,]),'param_list':([19,33,],[26,57,]),'param':([19,33,37,90,],[28,28,63,63,]),'expr':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[36,64,65,66,80,83,85,88,111,113,117,118,83,121,88,132,135,]),'arith':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[41,41,41,41,74,76,77,41,41,41,41,95,96,97,98,99,100,101,41,41,41,41,41,41,41,41,41,]),'base_call':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'fact':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'func_call':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,79,89,91,93,94,107,108,110,119,126,133,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,103,47,47,47,47,47,47,47,128,47,47,]),'atom':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'let_list':([37,90,],[61,112,]),'let_assign':([37,90,],[62,62,]),'block':([52,107,],[82,120,]),'arg_list':([60,110,],[86,122,]),'cases_list':([92,124,],[114,130,]),'case':([92,124,],[115,115,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -31,18 +31,18 @@ ('empty -> ','empty',0,'p_empty','config.py',15), ('class_list -> def_class','class_list',1,'p_class_list','config.py',20), ('class_list -> def_class class_list','class_list',2,'p_class_list','config.py',21), - ('def_class -> CLASS ID LBRACE feature_list RBRACE SEMI','def_class',6,'p_def_class','config.py',29), - ('def_class -> CLASS ID INHERITS ID LBRACE feature_list RBRACE SEMI','def_class',8,'p_def_class','config.py',30), + ('def_class -> CLASS TYPEID LBRACE feature_list RBRACE SEMI','def_class',6,'p_def_class','config.py',29), + ('def_class -> CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI','def_class',8,'p_def_class','config.py',30), ('feature_list -> empty','feature_list',1,'p_feature_list','config.py',38), ('feature_list -> def_attr SEMI feature_list','feature_list',3,'p_feature_list','config.py',39), ('feature_list -> def_func SEMI feature_list','feature_list',3,'p_feature_list','config.py',40), - ('def_attr -> ID COLON ID','def_attr',3,'p_def_attr','config.py',48), - ('def_attr -> ID COLON ID ASSIGN expr','def_attr',5,'p_def_attr','config.py',49), - ('def_func -> ID LPAREN param_list RPAREN COLON ID LBRACE expr RBRACE','def_func',9,'p_def_func','config.py',57), + ('def_attr -> ID COLON TYPEID','def_attr',3,'p_def_attr','config.py',48), + ('def_attr -> ID COLON TYPEID ASSIGN expr','def_attr',5,'p_def_attr','config.py',49), + ('def_func -> ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE','def_func',9,'p_def_func','config.py',57), ('param_list -> empty','param_list',1,'p_param_list','config.py',62), ('param_list -> param','param_list',1,'p_param_list','config.py',63), ('param_list -> param COMMA param_list','param_list',3,'p_param_list','config.py',64), - ('param -> ID COLON ID','param',3,'p_param','config.py',75), + ('param -> ID COLON TYPEID','param',3,'p_param','config.py',75), ('expr -> LET let_list IN expr','expr',4,'p_expr','config.py',82), ('expr -> CASE expr OF cases_list ESAC','expr',5,'p_expr','config.py',83), ('expr -> IF expr THEN expr ELSE expr FI','expr',7,'p_expr','config.py',84), @@ -55,7 +55,7 @@ ('let_assign -> param','let_assign',1,'p_let_assign','config.py',118), ('cases_list -> case SEMI','cases_list',2,'p_cases_list','config.py',127), ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','config.py',128), - ('case -> ID COLON ID WITH expr','case',5,'p_case','config.py',135), + ('case -> ID COLON TYPEID WITH expr','case',5,'p_case','config.py',135), ('arith -> arith PLUS arith','arith',3,'p_arith_binary','config.py',154), ('arith -> arith MINUS arith','arith',3,'p_arith_binary','config.py',155), ('arith -> arith STAR arith','arith',3,'p_arith_binary','config.py',156), @@ -67,7 +67,7 @@ ('arith -> ISVOID arith','arith',2,'p_arith_unary','config.py',180), ('arith -> NOT arith','arith',2,'p_arith_unary','config.py',181), ('arith -> base_call','arith',1,'p_arith_basecall','config.py',190), - ('base_call -> fact ARROBA ID DOT func_call','base_call',5,'p_basecall','config.py',196), + ('base_call -> fact ARROBA TYPEID DOT func_call','base_call',5,'p_basecall','config.py',196), ('base_call -> fact','base_call',1,'p_basecall','config.py',197), ('fact -> fact DOT func_call','fact',3,'p_factcall','config.py',204), ('fact -> func_call','fact',1,'p_factcall','config.py',205), @@ -79,7 +79,7 @@ ('fact -> LPAREN expr RPAREN','fact',3,'p_fact_group','config.py',234), ('atom -> INTEGER','atom',1,'p_atom_int','config.py',238), ('atom -> ID','atom',1,'p_atom_id','config.py',242), - ('atom -> NEW ID','atom',2,'p_atom_new','config.py',246), + ('atom -> NEW TYPEID','atom',2,'p_atom_new','config.py',246), ('atom -> LBRACE block RBRACE','atom',3,'p_atom_block','config.py',250), ('block -> expr SEMI','block',2,'p_block','config.py',254), ('block -> expr SEMI block','block',3,'p_block','config.py',255), diff --git a/src/main.py b/src/main.py index 7a8d401e..898da948 100644 --- a/src/main.py +++ b/src/main.py @@ -14,4 +14,4 @@ def main(): if __name__ == "__main__": main() - exit(1) # temporal + exit(1) # temporal \ No newline at end of file From c2098c083156d23482f7ad0d3eb8d39f6f679be3 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 18 Feb 2020 12:37:48 -0500 Subject: [PATCH 004/140] solving issues in cool.sh and running parser tests --- src/cl_parser/config.py | 19 ++++++++++++++++++- src/coolc.sh | 2 +- src/main.py | 12 +++++++----- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/cl_parser/config.py b/src/cl_parser/config.py index 7fb930c0..ce7681cd 100644 --- a/src/cl_parser/config.py +++ b/src/cl_parser/config.py @@ -2,6 +2,8 @@ from cl_ast import * from cl_lexer.config import tokens +from utils import ERROR_FORMAT + # Set the grammar start symbol start = 'program' @@ -264,4 +266,19 @@ def p_atom_bool(p): def p_atom_string(p): '''atom : STRING''' - p[0] = StringNode(p[1]) \ No newline at end of file + p[0] = StringNode(p[1]) + +def p_error(p): + if p: + line = p.lexer.lineno + col = find_column(p.lexer.lexdata, p) + print(ERROR_FORMAT % (line, col, "SyntacticError", f"ERROR at or near {p.value}")) + else: + print(ERROR_FORMAT % (line, col, "SyntacticError", "ERROR at or near EOF")) + +# Compute column. +# input is the input text string +# token is a token instance +def find_column(input, token): + line_start = input.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 \ No newline at end of file diff --git a/src/coolc.sh b/src/coolc.sh index 61d7ef04..30cee95d 100755 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -10,4 +10,4 @@ echo "Copyright (c) 2019: Nombre1, Nombre2, Nombre3" # TODO: líneas a los va # Llamar al compilador #echo "Compiling $INPUT_FILE into $OUTPUT_FILE" -python3 test.py $INPUT_FILE \ No newline at end of file +python3 main.py $INPUT_FILE \ No newline at end of file diff --git a/src/main.py b/src/main.py index 898da948..9229c1e5 100644 --- a/src/main.py +++ b/src/main.py @@ -6,11 +6,13 @@ def main(): program = open(sys.argv[1]).read() lex = CoolLexer() - lex.input(program) - while True: - tok = lex.token() - if not tok: - break + parser = CoolParser() + # lex.input(program) + # while True: + # tok = lex.token() + # if not tok: + # break + ast = parser.parse(program, lexer=lex.lexer) if __name__ == "__main__": main() From 06559a397f9027df5044edfc47d0805ccec25d82 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 18 Feb 2020 13:06:32 -0500 Subject: [PATCH 005/140] hotfix in grammar --- src/cl_parser/config.py | 42 +++++++------ src/cl_parser/parsetab.py | 124 +++++++++++++++++++------------------- 2 files changed, 88 insertions(+), 78 deletions(-) diff --git a/src/cl_parser/config.py b/src/cl_parser/config.py index ce7681cd..d1583529 100644 --- a/src/cl_parser/config.py +++ b/src/cl_parser/config.py @@ -60,17 +60,21 @@ def p_def_func(p): p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) # Func Parameters List Rules -def p_param_list(p): - '''param_list : empty - | param - | param COMMA param_list''' +def p_param_list_ept(p): + '''param_list : empty''' + p[0] = [] + +def p_param_list_prm(p): + '''param_list : param_build''' + p[0] = p[1] + +def p_param_build(p): + '''param_build : param empty + | param COMMA param_build''' try: p[0] = [ p[1] ] + p[3] except: - try: - p[0] = [ p[1] ] - except: - p[0] = [] + p[0] = [ p[1] ] # Parameter Rule def p_param(p): @@ -214,17 +218,21 @@ def p_func_call(p): '''func_call : ID LPAREN arg_list RPAREN''' p[0] = (p[1], p[3]) -def p_arglist(p): - '''arg_list : empty - | expr - | expr COMMA arg_list''' +def p_arglist_ept(p): + '''arg_list : empty''' + p[0] = [] + +def p_arglist_prm(p): + '''arg_list : arg_build''' + p[0] = p[1] + +def p_arg_build(p): + '''arg_build : expr empty + | expr COMMA arg_build''' try: p[0] = [ p[1] ] + p[3] except: - if p[1]: - p[0] = [ p[1] ] - else: - p[0] = [] + p[0] = [ p[1] ] # Atomic Operations @@ -274,7 +282,7 @@ def p_error(p): col = find_column(p.lexer.lexdata, p) print(ERROR_FORMAT % (line, col, "SyntacticError", f"ERROR at or near {p.value}")) else: - print(ERROR_FORMAT % (line, col, "SyntacticError", "ERROR at or near EOF")) + print(ERROR_FORMAT % (0, 0, "SyntacticError", "ERROR at or near EOF")) # Compute column. # input is the input text string diff --git a/src/cl_parser/parsetab.py b/src/cl_parser/parsetab.py index e6306d15..46412655 100644 --- a/src/cl_parser/parsetab.py +++ b/src/cl_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : empty\n | param\n | param COMMA param_listparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprarith : arith PLUS arith\n | arith MINUS arith\n | arith STAR arith\n | arith DIVIDE arith\n | arith LESS arith\n | arith LESSQ arith\n | arith EQUALS aritharith : BITNOT arith\n | ISVOID arith\n | NOT aritharith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : empty\n | expr\n | expr COMMA arg_listfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' +_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : emptyparam_list : param_buildparam_build : param empty\n | param COMMA param_buildparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprarith : arith PLUS arith\n | arith MINUS arith\n | arith STAR arith\n | arith DIVIDE arith\n | arith LESS arith\n | arith LESSQ arith\n | arith EQUALS aritharith : BITNOT arith\n | ISVOID arith\n | NOT aritharith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : emptyarg_list : arg_buildarg_build : expr empty\n | expr COMMA arg_buildfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' -_lr_action_items = {'CLASS':([0,3,21,58,],[4,4,-5,-6,]),'$end':([1,2,3,5,21,58,],[0,-1,-3,-4,-5,-6,]),'TYPEID':([4,8,18,31,51,56,78,125,],[6,14,24,55,81,84,102,131,]),'LBRACE':([6,14,30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,84,89,91,93,94,107,108,110,126,133,],[7,20,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,108,52,52,52,52,52,52,52,52,52,]),'INHERITS':([6,],[8,]),'RBRACE':([7,9,10,16,17,20,22,23,29,35,41,45,46,47,48,50,53,54,74,75,76,77,81,82,85,95,96,97,98,99,100,101,103,105,106,107,109,111,120,121,123,127,128,134,],[-2,15,-7,-2,-2,-2,-8,-9,34,-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,106,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-55,-45,-17,-56,129,-18,-20,-41,-19,]),'ID':([7,16,17,19,20,30,33,37,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,79,89,90,91,92,93,94,107,108,110,119,124,126,133,],[13,13,13,25,13,35,25,25,35,35,35,75,75,75,35,35,35,35,75,75,75,75,75,75,75,104,35,25,35,116,35,35,35,35,35,104,116,35,35,]),'SEMI':([11,12,15,24,34,35,36,41,45,46,47,48,50,53,54,74,75,76,77,81,83,85,95,96,97,98,99,100,101,103,105,106,109,111,115,123,127,128,129,134,135,],[16,17,21,-10,58,-52,-11,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,107,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,124,-18,-20,-41,-12,-19,-29,]),'COLON':([13,25,32,116,],[18,31,56,125,]),'LPAREN':([13,30,35,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,75,89,91,93,94,104,107,108,110,126,133,],[19,49,60,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,60,49,49,49,49,60,49,49,49,49,49,]),'RPAREN':([19,26,27,28,33,35,41,45,46,47,48,50,53,54,55,57,60,74,75,76,77,80,81,85,86,87,88,95,96,97,98,99,100,101,103,105,106,109,110,111,122,123,127,128,134,],[-2,32,-13,-14,-2,-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,-15,-2,-37,-52,-38,-39,105,-53,-21,109,-46,-47,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-2,-17,-48,-18,-20,-41,-19,]),'ASSIGN':([24,35,55,63,],[30,59,-16,91,]),'COMMA':([28,35,41,45,46,47,48,50,53,54,55,62,63,74,75,76,77,81,85,88,95,96,97,98,99,100,101,103,105,106,109,111,113,123,127,128,134,],[33,-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,90,-26,-37,-52,-38,-39,-53,-21,110,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-25,-18,-20,-41,-19,]),'LET':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'CASE':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'IF':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'WHILE':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'BITNOT':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'ISVOID':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'NOT':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'INTEGER':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'NEW':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'BOOL':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'STRING':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'ARROBA':([35,46,47,48,50,53,54,75,81,103,105,106,109,],[-52,78,-44,-49,-51,-57,-58,-52,-53,-43,-50,-54,-45,]),'DOT':([35,46,47,48,50,53,54,75,81,102,103,105,106,109,],[-52,79,-44,-49,-51,-57,-58,-52,-53,119,-43,-50,-54,-45,]),'PLUS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,67,-40,-42,-44,-49,-51,-57,-58,67,-52,67,-39,-53,-30,-31,67,67,-34,-35,-36,-43,-50,-54,-45,-41,]),'MINUS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,68,-40,-42,-44,-49,-51,-57,-58,68,-52,68,-39,-53,-30,-31,68,68,-34,-35,-36,-43,-50,-54,-45,-41,]),'STAR':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,69,-40,-42,-44,-49,-51,-57,-58,69,-52,69,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-41,]),'DIVIDE':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,70,-40,-42,-44,-49,-51,-57,-58,70,-52,70,-39,-53,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-41,]),'LESS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,71,-40,-42,-44,-49,-51,-57,-58,71,-52,71,-39,-53,71,71,71,71,None,None,None,-43,-50,-54,-45,-41,]),'LESSQ':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,72,-40,-42,-44,-49,-51,-57,-58,72,-52,72,-39,-53,72,72,72,72,None,None,None,-43,-50,-54,-45,-41,]),'EQUALS':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,95,96,97,98,99,100,101,103,105,106,109,128,],[-52,73,-40,-42,-44,-49,-51,-57,-58,73,-52,73,-39,-53,73,73,73,73,None,None,None,-43,-50,-54,-45,-41,]),'OF':([35,41,45,46,47,48,50,53,54,64,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,92,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'THEN':([35,41,45,46,47,48,50,53,54,65,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,93,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'LOOP':([35,41,45,46,47,48,50,53,54,66,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,94,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,-19,]),'IN':([35,41,45,46,47,48,50,53,54,55,61,62,63,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,112,113,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-16,89,-23,-26,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-24,-25,-18,-20,-41,-19,]),'ELSE':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,117,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,126,-18,-20,-41,-19,]),'POOL':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,118,123,127,128,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,127,-18,-20,-41,-19,]),'FI':([35,41,45,46,47,48,50,53,54,74,75,76,77,81,85,95,96,97,98,99,100,101,103,105,106,109,111,123,127,128,132,134,],[-52,-22,-40,-42,-44,-49,-51,-57,-58,-37,-52,-38,-39,-53,-21,-30,-31,-32,-33,-34,-35,-36,-43,-50,-54,-45,-17,-18,-20,-41,134,-19,]),'ESAC':([114,124,130,],[123,-27,-28,]),'WITH':([131,],[133,]),} +_lr_action_items = {'CLASS':([0,3,21,60,],[4,4,-5,-6,]),'$end':([1,2,3,5,21,60,],[0,-1,-3,-4,-5,-6,]),'TYPEID':([4,8,18,32,53,58,80,129,],[6,14,24,57,83,86,105,135,]),'LBRACE':([6,14,31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,86,92,94,96,97,110,111,114,130,137,],[7,20,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,111,54,54,54,54,54,54,54,54,54,]),'INHERITS':([6,],[8,]),'RBRACE':([7,9,10,16,17,20,22,23,30,37,43,47,48,49,50,52,55,56,76,77,78,79,83,84,87,98,99,100,101,102,103,104,106,108,109,110,112,115,124,125,127,131,132,138,],[-2,15,-7,-2,-2,-2,-8,-9,36,-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,109,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-57,-46,-18,-58,133,-19,-21,-42,-20,]),'ID':([7,16,17,19,20,31,35,39,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,81,92,93,94,95,96,97,110,111,114,123,128,130,137,],[13,13,13,25,13,37,25,25,37,37,37,77,77,77,37,37,37,37,77,77,77,77,77,77,77,107,37,25,37,120,37,37,37,37,37,107,120,37,37,]),'SEMI':([11,12,15,24,36,37,38,43,47,48,49,50,52,55,56,76,77,78,79,83,85,87,98,99,100,101,102,103,104,106,108,109,112,115,119,127,131,132,133,138,139,],[16,17,21,-10,60,-54,-11,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,110,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,128,-19,-21,-42,-12,-20,-30,]),'COLON':([13,25,33,120,],[18,32,58,129,]),'LPAREN':([13,31,37,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,77,92,94,96,97,107,110,111,114,130,137,],[19,51,62,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,62,51,51,51,51,62,51,51,51,51,51,]),'RPAREN':([19,26,27,28,29,34,37,43,47,48,49,50,52,55,56,57,59,62,76,77,78,79,82,83,87,88,89,90,91,98,99,100,101,102,103,104,106,108,109,112,113,115,126,127,131,132,138,],[-2,33,-13,-14,-2,-15,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,-16,-2,-38,-54,-39,-40,108,-55,-22,112,-47,-48,-2,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-49,-18,-50,-19,-21,-42,-20,]),'ASSIGN':([24,37,57,65,],[31,61,-17,94,]),'COMMA':([29,37,43,47,48,49,50,52,55,56,57,64,65,76,77,78,79,83,87,91,98,99,100,101,102,103,104,106,108,109,112,115,117,127,131,132,138,],[35,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,93,-27,-38,-54,-39,-40,-55,-22,114,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-26,-19,-21,-42,-20,]),'LET':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'CASE':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'IF':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'WHILE':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'BITNOT':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'ISVOID':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'NOT':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'INTEGER':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,]),'NEW':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'BOOL':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,]),'STRING':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'ARROBA':([37,48,49,50,52,55,56,77,83,106,108,109,112,],[-54,80,-45,-51,-53,-59,-60,-54,-55,-44,-52,-56,-46,]),'DOT':([37,48,49,50,52,55,56,77,83,105,106,108,109,112,],[-54,81,-45,-51,-53,-59,-60,-54,-55,123,-44,-52,-56,-46,]),'PLUS':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,69,-41,-43,-45,-51,-53,-59,-60,69,-54,69,-40,-55,-31,-32,69,69,-35,-36,-37,-44,-52,-56,-46,-42,]),'MINUS':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,70,-41,-43,-45,-51,-53,-59,-60,70,-54,70,-40,-55,-31,-32,70,70,-35,-36,-37,-44,-52,-56,-46,-42,]),'STAR':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,71,-41,-43,-45,-51,-53,-59,-60,71,-54,71,-40,-55,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-42,]),'DIVIDE':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,72,-41,-43,-45,-51,-53,-59,-60,72,-54,72,-40,-55,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-42,]),'LESS':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,73,-41,-43,-45,-51,-53,-59,-60,73,-54,73,-40,-55,73,73,73,73,None,None,None,-44,-52,-56,-46,-42,]),'LESSQ':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,74,-41,-43,-45,-51,-53,-59,-60,74,-54,74,-40,-55,74,74,74,74,None,None,None,-44,-52,-56,-46,-42,]),'EQUALS':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,75,-41,-43,-45,-51,-53,-59,-60,75,-54,75,-40,-55,75,75,75,75,None,None,None,-44,-52,-56,-46,-42,]),'OF':([37,43,47,48,49,50,52,55,56,66,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,95,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'THEN':([37,43,47,48,49,50,52,55,56,67,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,96,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'LOOP':([37,43,47,48,49,50,52,55,56,68,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,97,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'IN':([37,43,47,48,49,50,52,55,56,57,63,64,65,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,116,117,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,92,-24,-27,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-25,-26,-19,-21,-42,-20,]),'ELSE':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,121,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,130,-19,-21,-42,-20,]),'POOL':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,122,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,131,-19,-21,-42,-20,]),'FI':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,127,131,132,136,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,138,-20,]),'ESAC':([118,128,134,],[127,-28,-29,]),'WITH':([135,],[137,]),} _lr_action = {} for _k, _v in _lr_action_items.items(): @@ -17,7 +17,7 @@ _lr_action[_x][_k] = _y del _lr_action_items -_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,16,17,20,],[9,22,23,29,]),'empty':([7,16,17,19,20,33,60,110,],[10,10,10,27,10,27,87,87,]),'def_attr':([7,16,17,20,],[11,11,11,11,]),'def_func':([7,16,17,20,],[12,12,12,12,]),'param_list':([19,33,],[26,57,]),'param':([19,33,37,90,],[28,28,63,63,]),'expr':([30,38,39,40,49,52,59,60,89,91,93,94,107,108,110,126,133,],[36,64,65,66,80,83,85,88,111,113,117,118,83,121,88,132,135,]),'arith':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[41,41,41,41,74,76,77,41,41,41,41,95,96,97,98,99,100,101,41,41,41,41,41,41,41,41,41,]),'base_call':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'fact':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'func_call':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,79,89,91,93,94,107,108,110,119,126,133,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,103,47,47,47,47,47,47,47,128,47,47,]),'atom':([30,38,39,40,42,43,44,49,52,59,60,67,68,69,70,71,72,73,89,91,93,94,107,108,110,126,133,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'let_list':([37,90,],[61,112,]),'let_assign':([37,90,],[62,62,]),'block':([52,107,],[82,120,]),'arg_list':([60,110,],[86,122,]),'cases_list':([92,124,],[114,130,]),'case':([92,124,],[115,115,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,16,17,20,],[9,22,23,30,]),'empty':([7,16,17,19,20,29,62,91,],[10,10,10,27,10,34,89,113,]),'def_attr':([7,16,17,20,],[11,11,11,11,]),'def_func':([7,16,17,20,],[12,12,12,12,]),'param_list':([19,],[26,]),'param_build':([19,35,],[28,59,]),'param':([19,35,39,93,],[29,29,65,65,]),'expr':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[38,66,67,68,82,85,87,91,115,117,121,122,85,125,91,136,139,]),'arith':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[43,43,43,43,76,78,79,43,43,43,43,98,99,100,101,102,103,104,43,43,43,43,43,43,43,43,43,]),'base_call':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'fact':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'func_call':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,81,92,94,96,97,110,111,114,123,130,137,],[49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,106,49,49,49,49,49,49,49,132,49,49,]),'atom':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'let_list':([39,93,],[63,116,]),'let_assign':([39,93,],[64,64,]),'block':([54,110,],[84,124,]),'arg_list':([62,],[88,]),'arg_build':([62,114,],[90,126,]),'cases_list':([95,128,],[118,134,]),'case':([95,128,],[119,119,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -27,62 +27,64 @@ del _lr_goto_items _lr_productions = [ ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','config.py',10), - ('empty -> ','empty',0,'p_empty','config.py',15), - ('class_list -> def_class','class_list',1,'p_class_list','config.py',20), - ('class_list -> def_class class_list','class_list',2,'p_class_list','config.py',21), - ('def_class -> CLASS TYPEID LBRACE feature_list RBRACE SEMI','def_class',6,'p_def_class','config.py',29), - ('def_class -> CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI','def_class',8,'p_def_class','config.py',30), - ('feature_list -> empty','feature_list',1,'p_feature_list','config.py',38), - ('feature_list -> def_attr SEMI feature_list','feature_list',3,'p_feature_list','config.py',39), - ('feature_list -> def_func SEMI feature_list','feature_list',3,'p_feature_list','config.py',40), - ('def_attr -> ID COLON TYPEID','def_attr',3,'p_def_attr','config.py',48), - ('def_attr -> ID COLON TYPEID ASSIGN expr','def_attr',5,'p_def_attr','config.py',49), - ('def_func -> ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE','def_func',9,'p_def_func','config.py',57), - ('param_list -> empty','param_list',1,'p_param_list','config.py',62), - ('param_list -> param','param_list',1,'p_param_list','config.py',63), - ('param_list -> param COMMA param_list','param_list',3,'p_param_list','config.py',64), - ('param -> ID COLON TYPEID','param',3,'p_param','config.py',75), - ('expr -> LET let_list IN expr','expr',4,'p_expr','config.py',82), - ('expr -> CASE expr OF cases_list ESAC','expr',5,'p_expr','config.py',83), - ('expr -> IF expr THEN expr ELSE expr FI','expr',7,'p_expr','config.py',84), - ('expr -> WHILE expr LOOP expr POOL','expr',5,'p_expr','config.py',85), - ('expr -> ID ASSIGN expr','expr',3,'p_expr_assign','config.py',98), - ('expr -> arith','expr',1,'p_expr_arith','config.py',103), - ('let_list -> let_assign','let_list',1,'p_let_list','config.py',109), - ('let_list -> let_assign COMMA let_list','let_list',3,'p_let_list','config.py',110), - ('let_assign -> param ASSIGN expr','let_assign',3,'p_let_assign','config.py',117), - ('let_assign -> param','let_assign',1,'p_let_assign','config.py',118), - ('cases_list -> case SEMI','cases_list',2,'p_cases_list','config.py',127), - ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','config.py',128), - ('case -> ID COLON TYPEID WITH expr','case',5,'p_case','config.py',135), - ('arith -> arith PLUS arith','arith',3,'p_arith_binary','config.py',154), - ('arith -> arith MINUS arith','arith',3,'p_arith_binary','config.py',155), - ('arith -> arith STAR arith','arith',3,'p_arith_binary','config.py',156), - ('arith -> arith DIVIDE arith','arith',3,'p_arith_binary','config.py',157), - ('arith -> arith LESS arith','arith',3,'p_arith_binary','config.py',158), - ('arith -> arith LESSQ arith','arith',3,'p_arith_binary','config.py',159), - ('arith -> arith EQUALS arith','arith',3,'p_arith_binary','config.py',160), - ('arith -> BITNOT arith','arith',2,'p_arith_unary','config.py',179), - ('arith -> ISVOID arith','arith',2,'p_arith_unary','config.py',180), - ('arith -> NOT arith','arith',2,'p_arith_unary','config.py',181), - ('arith -> base_call','arith',1,'p_arith_basecall','config.py',190), - ('base_call -> fact ARROBA TYPEID DOT func_call','base_call',5,'p_basecall','config.py',196), - ('base_call -> fact','base_call',1,'p_basecall','config.py',197), - ('fact -> fact DOT func_call','fact',3,'p_factcall','config.py',204), - ('fact -> func_call','fact',1,'p_factcall','config.py',205), - ('func_call -> ID LPAREN arg_list RPAREN','func_call',4,'p_func_call','config.py',212), - ('arg_list -> empty','arg_list',1,'p_arglist','config.py',216), - ('arg_list -> expr','arg_list',1,'p_arglist','config.py',217), - ('arg_list -> expr COMMA arg_list','arg_list',3,'p_arglist','config.py',218), - ('fact -> atom','fact',1,'p_factatom','config.py',230), - ('fact -> LPAREN expr RPAREN','fact',3,'p_fact_group','config.py',234), - ('atom -> INTEGER','atom',1,'p_atom_int','config.py',238), - ('atom -> ID','atom',1,'p_atom_id','config.py',242), - ('atom -> NEW TYPEID','atom',2,'p_atom_new','config.py',246), - ('atom -> LBRACE block RBRACE','atom',3,'p_atom_block','config.py',250), - ('block -> expr SEMI','block',2,'p_block','config.py',254), - ('block -> expr SEMI block','block',3,'p_block','config.py',255), - ('atom -> BOOL','atom',1,'p_atom_bool','config.py',262), - ('atom -> STRING','atom',1,'p_atom_string','config.py',266), + ('program -> class_list','program',1,'p_program','config.py',12), + ('empty -> ','empty',0,'p_empty','config.py',17), + ('class_list -> def_class','class_list',1,'p_class_list','config.py',22), + ('class_list -> def_class class_list','class_list',2,'p_class_list','config.py',23), + ('def_class -> CLASS TYPEID LBRACE feature_list RBRACE SEMI','def_class',6,'p_def_class','config.py',31), + ('def_class -> CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI','def_class',8,'p_def_class','config.py',32), + ('feature_list -> empty','feature_list',1,'p_feature_list','config.py',40), + ('feature_list -> def_attr SEMI feature_list','feature_list',3,'p_feature_list','config.py',41), + ('feature_list -> def_func SEMI feature_list','feature_list',3,'p_feature_list','config.py',42), + ('def_attr -> ID COLON TYPEID','def_attr',3,'p_def_attr','config.py',50), + ('def_attr -> ID COLON TYPEID ASSIGN expr','def_attr',5,'p_def_attr','config.py',51), + ('def_func -> ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE','def_func',9,'p_def_func','config.py',59), + ('param_list -> empty','param_list',1,'p_param_list_ept','config.py',64), + ('param_list -> param_build','param_list',1,'p_param_list_prm','config.py',68), + ('param_build -> param empty','param_build',2,'p_param_build','config.py',72), + ('param_build -> param COMMA param_build','param_build',3,'p_param_build','config.py',73), + ('param -> ID COLON TYPEID','param',3,'p_param','config.py',81), + ('expr -> LET let_list IN expr','expr',4,'p_expr','config.py',88), + ('expr -> CASE expr OF cases_list ESAC','expr',5,'p_expr','config.py',89), + ('expr -> IF expr THEN expr ELSE expr FI','expr',7,'p_expr','config.py',90), + ('expr -> WHILE expr LOOP expr POOL','expr',5,'p_expr','config.py',91), + ('expr -> ID ASSIGN expr','expr',3,'p_expr_assign','config.py',104), + ('expr -> arith','expr',1,'p_expr_arith','config.py',109), + ('let_list -> let_assign','let_list',1,'p_let_list','config.py',115), + ('let_list -> let_assign COMMA let_list','let_list',3,'p_let_list','config.py',116), + ('let_assign -> param ASSIGN expr','let_assign',3,'p_let_assign','config.py',123), + ('let_assign -> param','let_assign',1,'p_let_assign','config.py',124), + ('cases_list -> case SEMI','cases_list',2,'p_cases_list','config.py',133), + ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','config.py',134), + ('case -> ID COLON TYPEID WITH expr','case',5,'p_case','config.py',141), + ('arith -> arith PLUS arith','arith',3,'p_arith_binary','config.py',160), + ('arith -> arith MINUS arith','arith',3,'p_arith_binary','config.py',161), + ('arith -> arith STAR arith','arith',3,'p_arith_binary','config.py',162), + ('arith -> arith DIVIDE arith','arith',3,'p_arith_binary','config.py',163), + ('arith -> arith LESS arith','arith',3,'p_arith_binary','config.py',164), + ('arith -> arith LESSQ arith','arith',3,'p_arith_binary','config.py',165), + ('arith -> arith EQUALS arith','arith',3,'p_arith_binary','config.py',166), + ('arith -> BITNOT arith','arith',2,'p_arith_unary','config.py',185), + ('arith -> ISVOID arith','arith',2,'p_arith_unary','config.py',186), + ('arith -> NOT arith','arith',2,'p_arith_unary','config.py',187), + ('arith -> base_call','arith',1,'p_arith_basecall','config.py',196), + ('base_call -> fact ARROBA TYPEID DOT func_call','base_call',5,'p_basecall','config.py',202), + ('base_call -> fact','base_call',1,'p_basecall','config.py',203), + ('fact -> fact DOT func_call','fact',3,'p_factcall','config.py',210), + ('fact -> func_call','fact',1,'p_factcall','config.py',211), + ('func_call -> ID LPAREN arg_list RPAREN','func_call',4,'p_func_call','config.py',218), + ('arg_list -> empty','arg_list',1,'p_arglist_ept','config.py',222), + ('arg_list -> arg_build','arg_list',1,'p_arglist_prm','config.py',226), + ('arg_build -> expr empty','arg_build',2,'p_arg_build','config.py',230), + ('arg_build -> expr COMMA arg_build','arg_build',3,'p_arg_build','config.py',231), + ('fact -> atom','fact',1,'p_factatom','config.py',240), + ('fact -> LPAREN expr RPAREN','fact',3,'p_fact_group','config.py',244), + ('atom -> INTEGER','atom',1,'p_atom_int','config.py',248), + ('atom -> ID','atom',1,'p_atom_id','config.py',252), + ('atom -> NEW TYPEID','atom',2,'p_atom_new','config.py',256), + ('atom -> LBRACE block RBRACE','atom',3,'p_atom_block','config.py',260), + ('block -> expr SEMI','block',2,'p_block','config.py',264), + ('block -> expr SEMI block','block',3,'p_block','config.py',265), + ('atom -> BOOL','atom',1,'p_atom_bool','config.py',272), + ('atom -> STRING','atom',1,'p_atom_string','config.py',276), ] From 7c58843efc12e653a4f114ed53cdd0bf6e80f437 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 18 Feb 2020 13:44:18 -0500 Subject: [PATCH 006/140] changing grammar for expr operations --- src/cl_parser/config.py | 24 ++++++++++++------------ src/cl_parser/parsetab.py | 26 +++++++++++++------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/cl_parser/config.py b/src/cl_parser/config.py index d1583529..d036e552 100644 --- a/src/cl_parser/config.py +++ b/src/cl_parser/config.py @@ -156,14 +156,14 @@ def p_case(p): # Binary Operations Rules -def p_arith_binary(p): #TODO: Change switch-case :( - '''arith : arith PLUS arith - | arith MINUS arith - | arith STAR arith - | arith DIVIDE arith - | arith LESS arith - | arith LESSQ arith - | arith EQUALS arith''' +def p_expr_binary(p): #TODO: Change switch-case :( + '''expr : expr PLUS expr + | expr MINUS expr + | expr STAR expr + | expr DIVIDE expr + | expr LESS expr + | expr LESSQ expr + | expr EQUALS expr''' if p[2] == '+': p[0] = SumNode(p[1], p[3]) elif p[2] == '-': @@ -181,10 +181,10 @@ def p_arith_binary(p): #TODO: Change switch-case :( # Unary Operations Rules -def p_arith_unary(p): - '''arith : BITNOT arith - | ISVOID arith - | NOT arith''' +def p_expr_unary(p): + '''expr : BITNOT expr + | ISVOID expr + | NOT expr''' if p[1] == '~': p[0] = BitNotNode(p[2]) elif p[1].lower() == 'isvoid': diff --git a/src/cl_parser/parsetab.py b/src/cl_parser/parsetab.py index 46412655..14cdec2a 100644 --- a/src/cl_parser/parsetab.py +++ b/src/cl_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : emptyparam_list : param_buildparam_build : param empty\n | param COMMA param_buildparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprarith : arith PLUS arith\n | arith MINUS arith\n | arith STAR arith\n | arith DIVIDE arith\n | arith LESS arith\n | arith LESSQ arith\n | arith EQUALS aritharith : BITNOT arith\n | ISVOID arith\n | NOT aritharith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : emptyarg_list : arg_buildarg_build : expr empty\n | expr COMMA arg_buildfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' +_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : emptyparam_list : param_buildparam_build : param empty\n | param COMMA param_buildparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprexpr : expr PLUS expr\n | expr MINUS expr\n | expr STAR expr\n | expr DIVIDE expr\n | expr LESS expr\n | expr LESSQ expr\n | expr EQUALS exprexpr : BITNOT expr\n | ISVOID expr\n | NOT exprarith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : emptyarg_list : arg_buildarg_build : expr empty\n | expr COMMA arg_buildfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' -_lr_action_items = {'CLASS':([0,3,21,60,],[4,4,-5,-6,]),'$end':([1,2,3,5,21,60,],[0,-1,-3,-4,-5,-6,]),'TYPEID':([4,8,18,32,53,58,80,129,],[6,14,24,57,83,86,105,135,]),'LBRACE':([6,14,31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,86,92,94,96,97,110,111,114,130,137,],[7,20,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,111,54,54,54,54,54,54,54,54,54,]),'INHERITS':([6,],[8,]),'RBRACE':([7,9,10,16,17,20,22,23,30,37,43,47,48,49,50,52,55,56,76,77,78,79,83,84,87,98,99,100,101,102,103,104,106,108,109,110,112,115,124,125,127,131,132,138,],[-2,15,-7,-2,-2,-2,-8,-9,36,-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,109,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-57,-46,-18,-58,133,-19,-21,-42,-20,]),'ID':([7,16,17,19,20,31,35,39,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,81,92,93,94,95,96,97,110,111,114,123,128,130,137,],[13,13,13,25,13,37,25,25,37,37,37,77,77,77,37,37,37,37,77,77,77,77,77,77,77,107,37,25,37,120,37,37,37,37,37,107,120,37,37,]),'SEMI':([11,12,15,24,36,37,38,43,47,48,49,50,52,55,56,76,77,78,79,83,85,87,98,99,100,101,102,103,104,106,108,109,112,115,119,127,131,132,133,138,139,],[16,17,21,-10,60,-54,-11,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,110,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,128,-19,-21,-42,-12,-20,-30,]),'COLON':([13,25,33,120,],[18,32,58,129,]),'LPAREN':([13,31,37,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,77,92,94,96,97,107,110,111,114,130,137,],[19,51,62,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,62,51,51,51,51,62,51,51,51,51,51,]),'RPAREN':([19,26,27,28,29,34,37,43,47,48,49,50,52,55,56,57,59,62,76,77,78,79,82,83,87,88,89,90,91,98,99,100,101,102,103,104,106,108,109,112,113,115,126,127,131,132,138,],[-2,33,-13,-14,-2,-15,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,-16,-2,-38,-54,-39,-40,108,-55,-22,112,-47,-48,-2,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-49,-18,-50,-19,-21,-42,-20,]),'ASSIGN':([24,37,57,65,],[31,61,-17,94,]),'COMMA':([29,37,43,47,48,49,50,52,55,56,57,64,65,76,77,78,79,83,87,91,98,99,100,101,102,103,104,106,108,109,112,115,117,127,131,132,138,],[35,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,93,-27,-38,-54,-39,-40,-55,-22,114,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-26,-19,-21,-42,-20,]),'LET':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'CASE':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'IF':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'WHILE':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'BITNOT':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'ISVOID':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'NOT':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'INTEGER':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,]),'NEW':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'BOOL':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,]),'STRING':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'ARROBA':([37,48,49,50,52,55,56,77,83,106,108,109,112,],[-54,80,-45,-51,-53,-59,-60,-54,-55,-44,-52,-56,-46,]),'DOT':([37,48,49,50,52,55,56,77,83,105,106,108,109,112,],[-54,81,-45,-51,-53,-59,-60,-54,-55,123,-44,-52,-56,-46,]),'PLUS':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,69,-41,-43,-45,-51,-53,-59,-60,69,-54,69,-40,-55,-31,-32,69,69,-35,-36,-37,-44,-52,-56,-46,-42,]),'MINUS':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,70,-41,-43,-45,-51,-53,-59,-60,70,-54,70,-40,-55,-31,-32,70,70,-35,-36,-37,-44,-52,-56,-46,-42,]),'STAR':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,71,-41,-43,-45,-51,-53,-59,-60,71,-54,71,-40,-55,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-42,]),'DIVIDE':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,72,-41,-43,-45,-51,-53,-59,-60,72,-54,72,-40,-55,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-42,]),'LESS':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,73,-41,-43,-45,-51,-53,-59,-60,73,-54,73,-40,-55,73,73,73,73,None,None,None,-44,-52,-56,-46,-42,]),'LESSQ':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,74,-41,-43,-45,-51,-53,-59,-60,74,-54,74,-40,-55,74,74,74,74,None,None,None,-44,-52,-56,-46,-42,]),'EQUALS':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,98,99,100,101,102,103,104,106,108,109,112,132,],[-54,75,-41,-43,-45,-51,-53,-59,-60,75,-54,75,-40,-55,75,75,75,75,None,None,None,-44,-52,-56,-46,-42,]),'OF':([37,43,47,48,49,50,52,55,56,66,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,95,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'THEN':([37,43,47,48,49,50,52,55,56,67,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,96,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'LOOP':([37,43,47,48,49,50,52,55,56,68,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,97,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'IN':([37,43,47,48,49,50,52,55,56,57,63,64,65,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,116,117,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,92,-24,-27,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-25,-26,-19,-21,-42,-20,]),'ELSE':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,121,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,130,-19,-21,-42,-20,]),'POOL':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,122,127,131,132,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,131,-19,-21,-42,-20,]),'FI':([37,43,47,48,49,50,52,55,56,76,77,78,79,83,87,98,99,100,101,102,103,104,106,108,109,112,115,127,131,132,136,138,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-54,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,138,-20,]),'ESAC':([118,128,134,],[127,-28,-29,]),'WITH':([135,],[137,]),} +_lr_action_items = {'CLASS':([0,3,21,60,],[4,4,-5,-6,]),'$end':([1,2,3,5,21,60,],[0,-1,-3,-4,-5,-6,]),'TYPEID':([4,8,18,32,53,58,79,128,],[6,14,24,57,82,85,104,134,]),'LBRACE':([6,14,31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,85,98,100,102,103,109,110,113,129,136,],[7,20,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,110,54,54,54,54,54,54,54,54,54,]),'INHERITS':([6,],[8,]),'RBRACE':([7,9,10,16,17,20,22,23,30,37,43,47,48,49,50,52,55,56,76,77,78,82,83,86,91,92,93,94,95,96,97,105,107,108,109,111,114,123,124,126,130,131,137,],[-2,15,-7,-2,-2,-2,-8,-9,36,-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,108,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-57,-46,-18,-58,132,-19,-21,-42,-20,]),'ID':([7,16,17,19,20,31,35,39,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,80,98,99,100,101,102,103,109,110,113,122,127,129,136,],[13,13,13,25,13,37,25,25,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,106,37,25,37,119,37,37,37,37,37,106,119,37,37,]),'SEMI':([11,12,15,24,36,37,38,43,47,48,49,50,52,55,56,76,77,78,82,84,86,91,92,93,94,95,96,97,105,107,108,111,114,118,126,130,131,132,137,138,],[16,17,21,-10,60,-54,-11,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,109,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,127,-19,-21,-42,-12,-20,-30,]),'COLON':([13,25,33,119,],[18,32,58,128,]),'LPAREN':([13,31,37,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,106,109,110,113,129,136,],[19,51,62,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,62,51,51,51,51,51,]),'RPAREN':([19,26,27,28,29,34,37,43,47,48,49,50,52,55,56,57,59,62,76,77,78,81,82,86,87,88,89,90,91,92,93,94,95,96,97,105,107,108,111,112,114,125,126,130,131,137,],[-2,33,-13,-14,-2,-15,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,-16,-2,-38,-39,-40,107,-55,-22,111,-47,-48,-2,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-49,-18,-50,-19,-21,-42,-20,]),'ASSIGN':([24,37,57,72,],[31,61,-17,100,]),'COMMA':([29,37,43,47,48,49,50,52,55,56,57,71,72,76,77,78,82,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,126,130,131,137,],[35,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,99,-27,-38,-39,-40,-55,-22,113,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-26,-19,-21,-42,-20,]),'LET':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'CASE':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'IF':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'WHILE':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'BITNOT':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'ISVOID':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'NOT':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'INTEGER':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,]),'NEW':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'BOOL':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,]),'STRING':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'ARROBA':([37,48,49,50,52,55,56,82,105,107,108,111,],[-54,79,-45,-51,-53,-59,-60,-55,-44,-52,-56,-46,]),'DOT':([37,48,49,50,52,55,56,82,104,105,107,108,111,],[-54,80,-45,-51,-53,-59,-60,-55,122,-44,-52,-56,-46,]),'PLUS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,63,-23,-41,-43,-45,-51,-53,-59,-60,63,63,63,63,63,-40,63,-55,63,63,63,-31,-32,63,63,-35,-36,-37,-44,-52,-56,-46,63,63,63,63,63,-19,-21,-42,63,-20,63,]),'MINUS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,64,-23,-41,-43,-45,-51,-53,-59,-60,64,64,64,64,64,-40,64,-55,64,64,64,-31,-32,64,64,-35,-36,-37,-44,-52,-56,-46,64,64,64,64,64,-19,-21,-42,64,-20,64,]),'STAR':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,65,-23,-41,-43,-45,-51,-53,-59,-60,65,65,65,65,65,-40,65,-55,65,65,65,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,65,65,65,65,65,-19,-21,-42,65,-20,65,]),'DIVIDE':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,66,-23,-41,-43,-45,-51,-53,-59,-60,66,66,66,66,66,-40,66,-55,66,66,66,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,66,66,66,66,66,-19,-21,-42,66,-20,66,]),'LESS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,67,-23,-41,-43,-45,-51,-53,-59,-60,67,67,67,67,67,-40,67,-55,67,67,67,67,67,67,67,None,None,None,-44,-52,-56,-46,67,67,67,67,67,-19,-21,-42,67,-20,67,]),'LESSQ':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,68,-23,-41,-43,-45,-51,-53,-59,-60,68,68,68,68,68,-40,68,-55,68,68,68,68,68,68,68,None,None,None,-44,-52,-56,-46,68,68,68,68,68,-19,-21,-42,68,-20,68,]),'EQUALS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,69,-23,-41,-43,-45,-51,-53,-59,-60,69,69,69,69,69,-40,69,-55,69,69,69,69,69,69,69,None,None,None,-44,-52,-56,-46,69,69,69,69,69,-19,-21,-42,69,-20,69,]),'OF':([37,43,47,48,49,50,52,55,56,73,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,101,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'THEN':([37,43,47,48,49,50,52,55,56,74,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,102,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'LOOP':([37,43,47,48,49,50,52,55,56,75,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,103,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'IN':([37,43,47,48,49,50,52,55,56,57,70,71,72,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,115,116,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,98,-24,-27,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-25,-26,-19,-21,-42,-20,]),'ELSE':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,120,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,129,-19,-21,-42,-20,]),'POOL':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,121,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,130,-19,-21,-42,-20,]),'FI':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,135,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,137,-20,]),'ESAC':([117,127,133,],[126,-28,-29,]),'WITH':([134,],[136,]),} _lr_action = {} for _k, _v in _lr_action_items.items(): @@ -17,7 +17,7 @@ _lr_action[_x][_k] = _y del _lr_action_items -_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,16,17,20,],[9,22,23,30,]),'empty':([7,16,17,19,20,29,62,91,],[10,10,10,27,10,34,89,113,]),'def_attr':([7,16,17,20,],[11,11,11,11,]),'def_func':([7,16,17,20,],[12,12,12,12,]),'param_list':([19,],[26,]),'param_build':([19,35,],[28,59,]),'param':([19,35,39,93,],[29,29,65,65,]),'expr':([31,40,41,42,51,54,61,62,92,94,96,97,110,111,114,130,137,],[38,66,67,68,82,85,87,91,115,117,121,122,85,125,91,136,139,]),'arith':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[43,43,43,43,76,78,79,43,43,43,43,98,99,100,101,102,103,104,43,43,43,43,43,43,43,43,43,]),'base_call':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'fact':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'func_call':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,81,92,94,96,97,110,111,114,123,130,137,],[49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,106,49,49,49,49,49,49,49,132,49,49,]),'atom':([31,40,41,42,44,45,46,51,54,61,62,69,70,71,72,73,74,75,92,94,96,97,110,111,114,130,137,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'let_list':([39,93,],[63,116,]),'let_assign':([39,93,],[64,64,]),'block':([54,110,],[84,124,]),'arg_list':([62,],[88,]),'arg_build':([62,114,],[90,126,]),'cases_list':([95,128,],[118,134,]),'case':([95,128,],[119,119,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,16,17,20,],[9,22,23,30,]),'empty':([7,16,17,19,20,29,62,90,],[10,10,10,27,10,34,88,112,]),'def_attr':([7,16,17,20,],[11,11,11,11,]),'def_func':([7,16,17,20,],[12,12,12,12,]),'param_list':([19,],[26,]),'param_build':([19,35,],[28,59,]),'param':([19,35,39,99,],[29,29,72,72,]),'expr':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[38,73,74,75,76,77,78,81,84,86,90,91,92,93,94,95,96,97,114,116,120,121,84,124,90,135,138,]),'arith':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'base_call':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'fact':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'func_call':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,80,98,100,102,103,109,110,113,122,129,136,],[49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,105,49,49,49,49,49,49,49,131,49,49,]),'atom':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'let_list':([39,99,],[70,115,]),'let_assign':([39,99,],[71,71,]),'block':([54,109,],[83,123,]),'arg_list':([62,],[87,]),'arg_build':([62,113,],[89,125,]),'cases_list':([101,127,],[117,133,]),'case':([101,127,],[118,118,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -57,16 +57,16 @@ ('cases_list -> case SEMI','cases_list',2,'p_cases_list','config.py',133), ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','config.py',134), ('case -> ID COLON TYPEID WITH expr','case',5,'p_case','config.py',141), - ('arith -> arith PLUS arith','arith',3,'p_arith_binary','config.py',160), - ('arith -> arith MINUS arith','arith',3,'p_arith_binary','config.py',161), - ('arith -> arith STAR arith','arith',3,'p_arith_binary','config.py',162), - ('arith -> arith DIVIDE arith','arith',3,'p_arith_binary','config.py',163), - ('arith -> arith LESS arith','arith',3,'p_arith_binary','config.py',164), - ('arith -> arith LESSQ arith','arith',3,'p_arith_binary','config.py',165), - ('arith -> arith EQUALS arith','arith',3,'p_arith_binary','config.py',166), - ('arith -> BITNOT arith','arith',2,'p_arith_unary','config.py',185), - ('arith -> ISVOID arith','arith',2,'p_arith_unary','config.py',186), - ('arith -> NOT arith','arith',2,'p_arith_unary','config.py',187), + ('expr -> expr PLUS expr','expr',3,'p_expr_binary','config.py',160), + ('expr -> expr MINUS expr','expr',3,'p_expr_binary','config.py',161), + ('expr -> expr STAR expr','expr',3,'p_expr_binary','config.py',162), + ('expr -> expr DIVIDE expr','expr',3,'p_expr_binary','config.py',163), + ('expr -> expr LESS expr','expr',3,'p_expr_binary','config.py',164), + ('expr -> expr LESSQ expr','expr',3,'p_expr_binary','config.py',165), + ('expr -> expr EQUALS expr','expr',3,'p_expr_binary','config.py',166), + ('expr -> BITNOT expr','expr',2,'p_expr_unary','config.py',185), + ('expr -> ISVOID expr','expr',2,'p_expr_unary','config.py',186), + ('expr -> NOT expr','expr',2,'p_expr_unary','config.py',187), ('arith -> base_call','arith',1,'p_arith_basecall','config.py',196), ('base_call -> fact ARROBA TYPEID DOT func_call','base_call',5,'p_basecall','config.py',202), ('base_call -> fact','base_call',1,'p_basecall','config.py',203), From 42c6d53097da77d742d75611990d4017966a1381 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 18 Feb 2020 15:27:26 -0500 Subject: [PATCH 007/140] to merge --- src/main.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main.py b/src/main.py index 9229c1e5..7e434688 100644 --- a/src/main.py +++ b/src/main.py @@ -7,11 +7,12 @@ def main(): program = open(sys.argv[1]).read() lex = CoolLexer() parser = CoolParser() - # lex.input(program) - # while True: - # tok = lex.token() - # if not tok: - # break + #lex.input(program) + #while True: + # tok = lex.token() + # if not tok: + # break + # print(tok) ast = parser.parse(program, lexer=lex.lexer) if __name__ == "__main__": From ae38b1150c0bce27630f1ea25d3284c8318b2775 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 18 Feb 2020 18:50:55 -0500 Subject: [PATCH 008/140] Error Token added for Syntax Error report --- src/cl_lexer/config.py | 39 ++++++++++++++++----------------------- src/cl_lexer/coollexer.py | 2 +- src/cl_parser/config.py | 17 +++++------------ src/cl_parser/parsetab.py | 2 +- src/main.py | 29 +++++++++++++++++++++-------- src/utils.py | 13 ++++++++++++- 6 files changed, 56 insertions(+), 46 deletions(-) diff --git a/src/cl_lexer/config.py b/src/cl_lexer/config.py index c582847d..03d66f36 100755 --- a/src/cl_lexer/config.py +++ b/src/cl_lexer/config.py @@ -1,6 +1,6 @@ """ PLY Lexer configuration module for COOL Language """ -from utils import ERROR_FORMAT +from utils import ERROR_FORMAT, find_column, LEX_ERRORS states = ( ('comments', 'exclusive'), @@ -34,7 +34,7 @@ def t_comments_newline(t): r'\n+' t.lexer.lineno += len(t.value) -t_comments_ignore = r' ' +t_comments_ignore = ' \t\v\f\r' # Skip tokens inside comments using error method def t_comments_error(t): @@ -43,7 +43,7 @@ def t_comments_error(t): def t_comments_eof(t): global balance if balance > 0: - print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t), "LexicographicError", "EOF in comment")) + LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "EOF in comment")) # String Matching State # --------------------------------------- @@ -72,19 +72,19 @@ def t_str_consume(t): r'([^\n\"\\]|\\.)+' fnil = t.value.rfind('\0') if fnil != -1: - print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t) + fnil, "LexicographicError", "String contains null character")) + LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos) + fnil, "LexicographicError", "String contains null character")) def t_str_error(t): if t.value[0] == '\n': - print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t), "LexicographicError", "Unterminated string constant")) + LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "Unterminated string constant")) t.lexer.lineno += 1 t.lexer.skip(1) t.lexer.begin('INITIAL') else: - print('??Error??') + pass def t_str_eof(t): - print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t), "LexicographicError", "EOF in string constant")) + LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "EOF in string constant")) # Initial State # --------------------------------------- @@ -135,7 +135,8 @@ def t_str_eof(t): 'DOT', # . 'ARROBA', # @ 'TYPEID', - 'ID' + 'ID', + 'ERROR' ] + list(reserved.values()) #Regular Expressions for Tokens @@ -192,27 +193,19 @@ def t_COMMENT(t): # add more comments syntax t.lexer.lineno += 1 pass -# Compute column. -# input is the input text string -# token is a token instance -def find_column(input, token): - line_start = input.rfind('\n', 0, token.lexpos) + 1 - return (token.lexpos - line_start) + 1 - # Track line numbers def t_newline(t): r'\n+' t.lexer.lineno += len(t.value) -# Special Ignore -def t_special_ign(t): - r'(\ |\t)' - t.lexer.skip(1) - # Ignored characters -t_ignore = ' ' +t_ignore = ' \t\r\v\f' #Error handling rule def t_error(t): - print(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t), "LexicographicError", f"ERROR {t.value[0]}")) - t.lexer.skip(1) \ No newline at end of file + LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", f"ERROR {t.value[0]}")) + # Generate a Error Token + t.value = t.value[0] + t.type = 'ERROR' + t.lexer.skip(1) + return t \ No newline at end of file diff --git a/src/cl_lexer/coollexer.py b/src/cl_lexer/coollexer.py index 36b1f3fb..51d4fc32 100755 --- a/src/cl_lexer/coollexer.py +++ b/src/cl_lexer/coollexer.py @@ -3,7 +3,7 @@ class CoolLexer(object): def __init__(self, *args, **kwargs): - self.lexer = lex.lex(module=cl_lexer.config,**kwargs) + self.lexer = lex.lex(module=cl_lexer.config, **kwargs) def token(self): return self.lexer.token() diff --git a/src/cl_parser/config.py b/src/cl_parser/config.py index d036e552..a5f2dca7 100644 --- a/src/cl_parser/config.py +++ b/src/cl_parser/config.py @@ -2,7 +2,7 @@ from cl_ast import * from cl_lexer.config import tokens -from utils import ERROR_FORMAT +from utils import ERROR_FORMAT, find_column, PARSER_ERRORS # Set the grammar start symbol start = 'program' @@ -98,7 +98,7 @@ def p_expr(p): p[0] = ConditionalNode(p[2], p[4], p[6]) elif p[1].lower() == 'while': p[0] = WhileNode(p[2], p[4]) - + # Assign Production def p_expr_assign(p): '''expr : ID ASSIGN expr''' @@ -279,14 +279,7 @@ def p_atom_string(p): def p_error(p): if p: line = p.lexer.lineno - col = find_column(p.lexer.lexdata, p) - print(ERROR_FORMAT % (line, col, "SyntacticError", f"ERROR at or near {p.value}")) + col = find_column(p.lexer.lexdata, p.lexpos) + PARSER_ERRORS.append(ERROR_FORMAT % (line, col, "SyntacticError", f"ERROR at or near {p.value}")) else: - print(ERROR_FORMAT % (0, 0, "SyntacticError", "ERROR at or near EOF")) - -# Compute column. -# input is the input text string -# token is a token instance -def find_column(input, token): - line_start = input.rfind('\n', 0, token.lexpos) + 1 - return (token.lexpos - line_start) + 1 \ No newline at end of file + PARSER_ERRORS.append(ERROR_FORMAT % (0, 0, "SyntacticError", "ERROR at or near EOF")) \ No newline at end of file diff --git a/src/cl_parser/parsetab.py b/src/cl_parser/parsetab.py index 14cdec2a..3db0514e 100644 --- a/src/cl_parser/parsetab.py +++ b/src/cl_parser/parsetab.py @@ -6,7 +6,7 @@ _lr_method = 'LALR' -_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : emptyparam_list : param_buildparam_build : param empty\n | param COMMA param_buildparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprexpr : expr PLUS expr\n | expr MINUS expr\n | expr STAR expr\n | expr DIVIDE expr\n | expr LESS expr\n | expr LESSQ expr\n | expr EQUALS exprexpr : BITNOT expr\n | ISVOID expr\n | NOT exprarith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : emptyarg_list : arg_buildarg_build : expr empty\n | expr COMMA arg_buildfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' +_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ERROR ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : emptyparam_list : param_buildparam_build : param empty\n | param COMMA param_buildparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprexpr : expr PLUS expr\n | expr MINUS expr\n | expr STAR expr\n | expr DIVIDE expr\n | expr LESS expr\n | expr LESSQ expr\n | expr EQUALS exprexpr : BITNOT expr\n | ISVOID expr\n | NOT exprarith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : emptyarg_list : arg_buildarg_build : expr empty\n | expr COMMA arg_buildfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' _lr_action_items = {'CLASS':([0,3,21,60,],[4,4,-5,-6,]),'$end':([1,2,3,5,21,60,],[0,-1,-3,-4,-5,-6,]),'TYPEID':([4,8,18,32,53,58,79,128,],[6,14,24,57,82,85,104,134,]),'LBRACE':([6,14,31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,85,98,100,102,103,109,110,113,129,136,],[7,20,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,110,54,54,54,54,54,54,54,54,54,]),'INHERITS':([6,],[8,]),'RBRACE':([7,9,10,16,17,20,22,23,30,37,43,47,48,49,50,52,55,56,76,77,78,82,83,86,91,92,93,94,95,96,97,105,107,108,109,111,114,123,124,126,130,131,137,],[-2,15,-7,-2,-2,-2,-8,-9,36,-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,108,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-57,-46,-18,-58,132,-19,-21,-42,-20,]),'ID':([7,16,17,19,20,31,35,39,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,80,98,99,100,101,102,103,109,110,113,122,127,129,136,],[13,13,13,25,13,37,25,25,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,106,37,25,37,119,37,37,37,37,37,106,119,37,37,]),'SEMI':([11,12,15,24,36,37,38,43,47,48,49,50,52,55,56,76,77,78,82,84,86,91,92,93,94,95,96,97,105,107,108,111,114,118,126,130,131,132,137,138,],[16,17,21,-10,60,-54,-11,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,109,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,127,-19,-21,-42,-12,-20,-30,]),'COLON':([13,25,33,119,],[18,32,58,128,]),'LPAREN':([13,31,37,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,106,109,110,113,129,136,],[19,51,62,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,62,51,51,51,51,51,]),'RPAREN':([19,26,27,28,29,34,37,43,47,48,49,50,52,55,56,57,59,62,76,77,78,81,82,86,87,88,89,90,91,92,93,94,95,96,97,105,107,108,111,112,114,125,126,130,131,137,],[-2,33,-13,-14,-2,-15,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,-16,-2,-38,-39,-40,107,-55,-22,111,-47,-48,-2,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-49,-18,-50,-19,-21,-42,-20,]),'ASSIGN':([24,37,57,72,],[31,61,-17,100,]),'COMMA':([29,37,43,47,48,49,50,52,55,56,57,71,72,76,77,78,82,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,126,130,131,137,],[35,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,99,-27,-38,-39,-40,-55,-22,113,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-26,-19,-21,-42,-20,]),'LET':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'CASE':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'IF':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'WHILE':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'BITNOT':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'ISVOID':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'NOT':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'INTEGER':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,]),'NEW':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'BOOL':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,]),'STRING':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'ARROBA':([37,48,49,50,52,55,56,82,105,107,108,111,],[-54,79,-45,-51,-53,-59,-60,-55,-44,-52,-56,-46,]),'DOT':([37,48,49,50,52,55,56,82,104,105,107,108,111,],[-54,80,-45,-51,-53,-59,-60,-55,122,-44,-52,-56,-46,]),'PLUS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,63,-23,-41,-43,-45,-51,-53,-59,-60,63,63,63,63,63,-40,63,-55,63,63,63,-31,-32,63,63,-35,-36,-37,-44,-52,-56,-46,63,63,63,63,63,-19,-21,-42,63,-20,63,]),'MINUS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,64,-23,-41,-43,-45,-51,-53,-59,-60,64,64,64,64,64,-40,64,-55,64,64,64,-31,-32,64,64,-35,-36,-37,-44,-52,-56,-46,64,64,64,64,64,-19,-21,-42,64,-20,64,]),'STAR':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,65,-23,-41,-43,-45,-51,-53,-59,-60,65,65,65,65,65,-40,65,-55,65,65,65,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,65,65,65,65,65,-19,-21,-42,65,-20,65,]),'DIVIDE':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,66,-23,-41,-43,-45,-51,-53,-59,-60,66,66,66,66,66,-40,66,-55,66,66,66,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,66,66,66,66,66,-19,-21,-42,66,-20,66,]),'LESS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,67,-23,-41,-43,-45,-51,-53,-59,-60,67,67,67,67,67,-40,67,-55,67,67,67,67,67,67,67,None,None,None,-44,-52,-56,-46,67,67,67,67,67,-19,-21,-42,67,-20,67,]),'LESSQ':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,68,-23,-41,-43,-45,-51,-53,-59,-60,68,68,68,68,68,-40,68,-55,68,68,68,68,68,68,68,None,None,None,-44,-52,-56,-46,68,68,68,68,68,-19,-21,-42,68,-20,68,]),'EQUALS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,69,-23,-41,-43,-45,-51,-53,-59,-60,69,69,69,69,69,-40,69,-55,69,69,69,69,69,69,69,None,None,None,-44,-52,-56,-46,69,69,69,69,69,-19,-21,-42,69,-20,69,]),'OF':([37,43,47,48,49,50,52,55,56,73,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,101,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'THEN':([37,43,47,48,49,50,52,55,56,74,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,102,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'LOOP':([37,43,47,48,49,50,52,55,56,75,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,103,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'IN':([37,43,47,48,49,50,52,55,56,57,70,71,72,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,115,116,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,98,-24,-27,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-25,-26,-19,-21,-42,-20,]),'ELSE':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,120,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,129,-19,-21,-42,-20,]),'POOL':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,121,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,130,-19,-21,-42,-20,]),'FI':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,135,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,137,-20,]),'ESAC':([117,127,133,],[126,-28,-29,]),'WITH':([134,],[136,]),} diff --git a/src/main.py b/src/main.py index 7e434688..a75a99ef 100644 --- a/src/main.py +++ b/src/main.py @@ -2,19 +2,32 @@ from cl_parser import CoolParser import sys +from utils import LEX_ERRORS, PARSER_ERRORS def main(): program = open(sys.argv[1]).read() lex = CoolLexer() parser = CoolParser() - #lex.input(program) - #while True: - # tok = lex.token() - # if not tok: - # break - # print(tok) ast = parser.parse(program, lexer=lex.lexer) + # lex.input(program) + # while True: + # tok = lex.token() + # if not tok: + # break + # print(tok) + + #print first Lex Errors + for e in LEX_ERRORS: + print(e) + + for e in PARSER_ERRORS: + print(e) + + if LEX_ERRORS or PARSER_ERRORS: + exit(1) + else: + exit(0) + if __name__ == "__main__": - main() - exit(1) # temporal \ No newline at end of file + main() # temporal \ No newline at end of file diff --git a/src/utils.py b/src/utils.py index cd291931..930c8bc6 100644 --- a/src/utils.py +++ b/src/utils.py @@ -1,2 +1,13 @@ #(Row, Col) - ErrorType: Message -ERROR_FORMAT = "(%d, %d) - %s: %s" \ No newline at end of file +ERROR_FORMAT = "(%d, %d) - %s: %s" + +#This is bad +LEX_ERRORS = [] +PARSER_ERRORS = [] + +# Compute column. +# input is the input text string +# lexpos is a lex position in token instance +def find_column(input, lexpos): + line_start = input.rfind('\n', 0, lexpos) + 1 + return (lexpos - line_start) + 1 \ No newline at end of file From 950292cfe64ec2e03712b110bb36330dcc503f7a Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 20 Feb 2020 14:12:35 -0500 Subject: [PATCH 009/140] adding ply to requirements.txt --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 9eb0cad1..cba16ee2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pytest pytest-ordering +ply From 1710a41828a1963e1ffe8111461a62f094b46e7a Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 20 Feb 2020 14:30:55 -0500 Subject: [PATCH 010/140] adding ply to requirements.txt --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 9eb0cad1..cba16ee2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pytest pytest-ordering +ply From 2cc9be0ef47f29b9f1c266e8198fd6d0a7f8a94b Mon Sep 17 00:00:00 2001 From: Carlos Date: Fri, 21 Feb 2020 04:40:54 -0500 Subject: [PATCH 011/140] update readme with names --- doc/Readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/Readme.md b/doc/Readme.md index 402477c8..9317d6a4 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -4,9 +4,9 @@ **Nombre** | **Grupo** | **Github** --|--|-- -Nombre1 Apellido1 Apellido2 | C4xx | [@github_user](https://github.com/) -Nombre2 Apellido1 Apellido2 | C4xx | [@github_user](https://github.com/) -Nombre3 Apellido1 Apellido2 | C4xx | [@github_user](https://github.com/) +Oscar Luis Hernandez Solano | C411 | [@oschdez97](https://github.com/oschdez97) +Harold Rosales Hernandez | C411 | [@hros18](https://github.com/hros18) +Carlos Rafael Ortega Lezcano | C411 | [@CRafa97](https://github.com/CRafa97) ## Readme From 94cb3d8fccc264126fc7050c68f24f150c346759 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 22 Feb 2020 18:15:07 -0500 Subject: [PATCH 012/140] passing lex-parser test with pipeline --- src/cl_lexer/config.py | 211 ------------------------- src/cl_lexer/coollexer.py | 233 ++++++++++++++++++++++++++- src/cl_parser/config.py | 285 --------------------------------- src/cl_parser/coolparser.py | 303 +++++++++++++++++++++++++++++++++++- src/cl_parser/parsetab.py | 122 +++++++-------- src/main.py | 27 ++-- src/pipeline/__init__.py | 2 + src/pipeline/pipeline.py | 23 +++ src/pipeline/state.py | 8 + src/utils.py | 4 - 10 files changed, 625 insertions(+), 593 deletions(-) delete mode 100755 src/cl_lexer/config.py delete mode 100644 src/cl_parser/config.py create mode 100644 src/pipeline/__init__.py create mode 100644 src/pipeline/pipeline.py create mode 100644 src/pipeline/state.py diff --git a/src/cl_lexer/config.py b/src/cl_lexer/config.py deleted file mode 100755 index 03d66f36..00000000 --- a/src/cl_lexer/config.py +++ /dev/null @@ -1,211 +0,0 @@ -""" PLY Lexer configuration module for COOL Language """ - -from utils import ERROR_FORMAT, find_column, LEX_ERRORS - -states = ( - ('comments', 'exclusive'), - ('str', 'exclusive') -) - -# Comments Actions and Globals -# ------------------------------------ -balance = 0 - -def t_comments(t): - r'\(\*' - global balance - balance = 1 - t.lexer.begin('comments') - -def t_comments_open(t): - r'\(\*' - global balance - balance += 1 - -def t_comments_close(t): - r'\*\)' - global balance - balance -= 1 - - if balance == 0: - t.lexer.begin('INITIAL') - -def t_comments_newline(t): - r'\n+' - t.lexer.lineno += len(t.value) - -t_comments_ignore = ' \t\v\f\r' - -# Skip tokens inside comments using error method -def t_comments_error(t): - t.lexer.skip(1) - -def t_comments_eof(t): - global balance - if balance > 0: - LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "EOF in comment")) - -# String Matching State -# --------------------------------------- - -def t_str(t): - r'\"' - t.lexer.str_start = t.lexer.lexpos - t.lexer.begin('str') - -def t_str_end(t): - r'\"' - t.value = t.lexer.lexdata[t.lexer.str_start:t.lexer.lexpos - 1] - t.type = 'STRING' - t.lexer.begin('INITIAL') - return t - -def t_str_newline(t): - r'\\\n' - #t.lexer.lineno += len(t.value) - t.lexer.lineno += 1 - #pass - -t_str_ignore = '' - -def t_str_consume(t): - r'([^\n\"\\]|\\.)+' - fnil = t.value.rfind('\0') - if fnil != -1: - LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos) + fnil, "LexicographicError", "String contains null character")) - -def t_str_error(t): - if t.value[0] == '\n': - LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "Unterminated string constant")) - t.lexer.lineno += 1 - t.lexer.skip(1) - t.lexer.begin('INITIAL') - else: - pass - -def t_str_eof(t): - LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "EOF in string constant")) - -# Initial State -# --------------------------------------- - -# COOL Keywords -reserved = { - 'class' : 'CLASS', - 'inherits' : 'INHERITS', - 'if' : 'IF', - 'then' : 'THEN', - 'else' : 'ELSE', - 'fi' : 'FI', - 'while': 'WHILE', - 'loop' : 'LOOP', - 'pool' : 'POOL', - 'let' : 'LET', - 'in' : 'IN', - 'case' : 'CASE', - 'of' : 'OF', - 'esac' : 'ESAC', - 'new' : 'NEW', - 'isvoid' : 'ISVOID', - 'not' : 'NOT', -} - -# Tokens -tokens = [ - 'INTEGER', # int - 'STRING', # string - 'BOOL', # bool - 'PLUS', # + - 'MINUS', # - - 'STAR', # * - 'DIVIDE', # / - 'BITNOT', # ~ - 'LESS', # < - 'LESSQ', # <= - 'EQUALS', # = - 'WITH', # => - 'ASSIGN', # <- - 'LPAREN', # ( - 'RPAREN', # ) - 'LBRACE', # { - 'RBRACE', # } - 'SEMI', # ; - 'COLON', # : - 'COMMA', # , - 'DOT', # . - 'ARROBA', # @ - 'TYPEID', - 'ID', - 'ERROR' -] + list(reserved.values()) - -#Regular Expressions for Tokens - -# VARS -t_PLUS = r'\+' -t_MINUS = r'-' -t_STAR = r'\*' -t_DIVIDE = r'/' -t_BITNOT = r'~' -t_LESS = r'<' -t_LESSQ = r'<=' -t_EQUALS = r'=' -t_WITH = r'=>' -t_ASSIGN = r'<-' -t_LPAREN = r'\(' -t_RPAREN = r'\)' -t_LBRACE = r'\{' -t_RBRACE = r'\}' -t_SEMI = r'\;' -t_COLON = r'\:' -t_COMMA = r'\,' -t_DOT = r'\.' -t_ARROBA = r'@' - -# METHODS -def t_INTEGER(t): - r'\d+' - t.value = int(t.value) - return t - -def t_BOOL(t): - r'(t[Rr][Uu][Ee]|f[Aa][Ll][Ss][Ee])' - t.value = (t.value.lower() == 'true') - return t - -def t_TYPEID(t): - r'[A-Z][a-zA-Z_0-9]*' - key = t.value.lower() - t.type = reserved.get(key, 'TYPEID') - return t - -def t_ID(t): - r'[a-z][a-zA-Z_0-9]*' - key = t.value.lower() - t.type = reserved.get(key, 'ID') - return t - -# OTHER RULES - -# Comments rule -def t_COMMENT(t): # add more comments syntax - r'--.*($|\n)' - t.lexer.lineno += 1 - pass - -# Track line numbers -def t_newline(t): - r'\n+' - t.lexer.lineno += len(t.value) - -# Ignored characters -t_ignore = ' \t\r\v\f' - -#Error handling rule -def t_error(t): - LEX_ERRORS.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", f"ERROR {t.value[0]}")) - # Generate a Error Token - t.value = t.value[0] - t.type = 'ERROR' - t.lexer.skip(1) - return t \ No newline at end of file diff --git a/src/cl_lexer/coollexer.py b/src/cl_lexer/coollexer.py index 51d4fc32..7e15d5d2 100755 --- a/src/cl_lexer/coollexer.py +++ b/src/cl_lexer/coollexer.py @@ -1,12 +1,233 @@ +""" Lexer module for COOL Language """ + import ply.lex as lex -import cl_lexer.config +from pipeline import State +from utils import ERROR_FORMAT, find_column + +class CoolLexer(State): + def __init__(self, name, **kwargs): + super().__init__(name) + self.lexer = lex.lex(module=self, **kwargs) + self.balance = 0 -class CoolLexer(object): - def __init__(self, *args, **kwargs): - self.lexer = lex.lex(module=cl_lexer.config, **kwargs) + # TODO: Change to Dispatch + # ------------------------------- + + def input(self, raw): + return self.lexer.input(raw) def token(self): return self.lexer.token() - def input(self, raw): - self.lexer.input(raw) \ No newline at end of file + # ------------------------------- + + def run(self, inputx): + self.lexer.input(inputx) + toks = [] + while True: + t = self.lexer.token() + if not t: + break + toks.append(t) + return toks + + states = ( + ('comments', 'exclusive'), + ('str', 'exclusive') + ) + + # Comments Multiline State + # ------------------------------------ + + def t_comments(self, t): + r'\(\*' + self.balance = 1 + t.lexer.begin('comments') + + def t_comments_open(self, t): + r'\(\*' + self.balance += 1 + + def t_comments_close(self, t): + r'\*\)' + self.balance -= 1 + + if self.balance == 0: + t.lexer.begin('INITIAL') + + def t_comments_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + + t_comments_ignore = ' \t\v\f\r' + + # Skip tokens inside comments using error method + def t_comments_error(self, t): + t.lexer.skip(1) + + def t_comments_eof(self, t): + if self.balance > 0: + self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "EOF in comment")) + + # String Matching State + # --------------------------------------- + + def t_str(self, t): + r'\"' + t.lexer.str_start = t.lexer.lexpos + t.lexer.begin('str') + + def t_str_end(self, t): + r'\"' + t.value = t.lexer.lexdata[t.lexer.str_start:t.lexer.lexpos - 1] + t.type = 'STRING' + t.lexer.begin('INITIAL') + return t + + t_str_ignore = '' + + def t_str_newline(self, t): + r'\\\n' + t.lexer.lineno += 1 + + def t_str_consume(self, t): + r'([^\n\"\\]|\\.)+' + fnil = t.value.rfind('\0') + if fnil != -1: + self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos) + fnil, "LexicographicError", "String contains null character")) + + def t_str_error(self, t): + if t.value[0] == '\n': + self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "Unterminated string constant")) + t.lexer.lineno += 1 + t.lexer.skip(1) + t.lexer.begin('INITIAL') + else: + pass + + def t_str_eof(self, t): + self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "EOF in string constant")) + + # Initial State + # --------------------------------------- + + # COOL Keywords + reserved = { + 'class' : 'CLASS', + 'inherits' : 'INHERITS', + 'if' : 'IF', + 'then' : 'THEN', + 'else' : 'ELSE', + 'fi' : 'FI', + 'while': 'WHILE', + 'loop' : 'LOOP', + 'pool' : 'POOL', + 'let' : 'LET', + 'in' : 'IN', + 'case' : 'CASE', + 'of' : 'OF', + 'esac' : 'ESAC', + 'new' : 'NEW', + 'isvoid' : 'ISVOID', + 'not' : 'NOT', + } + + # Tokens + tokens = [ + 'INTEGER', # int + 'STRING', # string + 'BOOL', # bool + 'PLUS', # + + 'MINUS', # - + 'STAR', # * + 'DIVIDE', # / + 'BITNOT', # ~ + 'LESS', # < + 'LESSQ', # <= + 'EQUALS', # = + 'WITH', # => + 'ASSIGN', # <- + 'LPAREN', # ( + 'RPAREN', # ) + 'LBRACE', # { + 'RBRACE', # } + 'SEMI', # ; + 'COLON', # : + 'COMMA', # , + 'DOT', # . + 'ARROBA', # @ + 'TYPEID', + 'ID', + 'ERROR' + ] + list(reserved.values()) + + #Regular Expressions for Tokens + + # VARS + t_PLUS = r'\+' + t_MINUS = r'-' + t_STAR = r'\*' + t_DIVIDE = r'/' + t_BITNOT = r'~' + t_LESS = r'<' + t_LESSQ = r'<=' + t_EQUALS = r'=' + t_WITH = r'=>' + t_ASSIGN = r'<-' + t_LPAREN = r'\(' + t_RPAREN = r'\)' + t_LBRACE = r'\{' + t_RBRACE = r'\}' + t_SEMI = r'\;' + t_COLON = r'\:' + t_COMMA = r'\,' + t_DOT = r'\.' + t_ARROBA = r'@' + + # METHODS + def t_INTEGER(self, t): + r'\d+' + t.value = int(t.value) + return t + + def t_BOOL(self, t): + r'(t[Rr][Uu][Ee]|f[Aa][Ll][Ss][Ee])' + t.value = (t.value.lower() == 'true') + return t + + def t_TYPEID(self, t): + r'[A-Z][a-zA-Z_0-9]*' + key = t.value.lower() + t.type = self.reserved.get(key, 'TYPEID') + return t + + def t_ID(self, t): + r'[a-z][a-zA-Z_0-9]*' + key = t.value.lower() + t.type = self.reserved.get(key, 'ID') + return t + + # OTHER RULES + + # Line Comments rule + def t_COMMENT(self, t): + r'--.*($|\n)' + t.lexer.lineno += 1 + pass + + # Track line numbers + def t_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + + # Ignored characters + t_ignore = ' \t\r\v\f' + + #Error handling rule + def t_error(self, t): + self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", f"ERROR {t.value[0]}")) + # Generate Error Token + t.value = t.value[0] + t.type = 'ERROR' + t.lexer.skip(1) + return t \ No newline at end of file diff --git a/src/cl_parser/config.py b/src/cl_parser/config.py deleted file mode 100644 index a5f2dca7..00000000 --- a/src/cl_parser/config.py +++ /dev/null @@ -1,285 +0,0 @@ -# Get the token map from the lexer -from cl_ast import * -from cl_lexer.config import tokens - -from utils import ERROR_FORMAT, find_column, PARSER_ERRORS - -# Set the grammar start symbol -start = 'program' - -# Program Rule -def p_program(p): - '''program : class_list''' - p[0] = ProgramNode(p[1]) - -# Empty Production -def p_empty(p): - '''empty :''' - pass - -# Classes Rules -def p_class_list(p): - '''class_list : def_class - | def_class class_list''' - try: - p[0] = [ p[1] ] + p[2] - except: - p[0] = [ p[1] ] - -# Class Definition Rules -def p_def_class(p): - '''def_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI - | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI''' - if p[3].lower() == 'inherits': - p[0] = ClassDeclarationNode(p[2], p[6], p[4]) - else: - p[0] = ClassDeclarationNode(p[2], p[4]) - -# Class Feature List Rules -def p_feature_list(p): - '''feature_list : empty - | def_attr SEMI feature_list - | def_func SEMI feature_list''' - try: - p[0] = [ p[1] ] + p[3] - except: - p[0] = [] - -# Attr Definition Rules -def p_def_attr(p): - '''def_attr : ID COLON TYPEID - | ID COLON TYPEID ASSIGN expr''' - try: - p[0] = AttrDeclarationNode(p[1], p[3], p[5]) - except: - p[0] = AttrDeclarationNode(p[1], p[3]) - -# Func Definition Rules -def p_def_func(p): - '''def_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE''' - p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) - -# Func Parameters List Rules -def p_param_list_ept(p): - '''param_list : empty''' - p[0] = [] - -def p_param_list_prm(p): - '''param_list : param_build''' - p[0] = p[1] - -def p_param_build(p): - '''param_build : param empty - | param COMMA param_build''' - try: - p[0] = [ p[1] ] + p[3] - except: - p[0] = [ p[1] ] - -# Parameter Rule -def p_param(p): - '''param : ID COLON TYPEID''' - p[0] = (p[1], p[3]) # (ID, TYPE) - -# Expression Rules -# ------------------ - -def p_expr(p): - '''expr : LET let_list IN expr - | CASE expr OF cases_list ESAC - | IF expr THEN expr ELSE expr FI - | WHILE expr LOOP expr POOL''' - - if p[1].lower() == 'let': - p[0] = LetNode(p[2], p[4]) - elif p[1].lower() == 'case': - p[0] = CaseNode(p[2], p[4]) - elif p[1].lower() == 'if': - p[0] = ConditionalNode(p[2], p[4], p[6]) - elif p[1].lower() == 'while': - p[0] = WhileNode(p[2], p[4]) - -# Assign Production -def p_expr_assign(p): - '''expr : ID ASSIGN expr''' - p[0] = AssignNode(p[1], p[3]) - -# Precedence Production -def p_expr_arith(p): - '''expr : arith''' - p[0] = p[1] - -# Let Rules - -def p_let_list(p): - '''let_list : let_assign - | let_assign COMMA let_list''' - try: - p[0] = [ p[1] ] + p[3] - except: - p[0] = [ p[1] ] - -def p_let_assign(p): - '''let_assign : param ASSIGN expr - | param''' - try: - p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) - except: - p[0] = VarDeclarationNode(p[1][0], p[1][1]) - -# Case Rules - -def p_cases_list(p): - '''cases_list : case SEMI - | case SEMI cases_list''' - try: - p[0] = [ p[1] ] + p[3] - except: - p[0] = [ p[1] ] - -def p_case(p): - '''case : ID COLON TYPEID WITH expr''' - p[0] = OptionNode(p[1], p[3], p[5]) - -# Arith Operations -# ------------------- - -# Operators Precedence -precedence = ( - ('right', 'BITNOT'), - ('right', 'ISVOID'), - ('left', 'STAR', 'DIVIDE'), - ('left', 'PLUS', 'MINUS'), - ('nonassoc', 'LESS', 'LESSQ', 'EQUALS'), - ('right', 'NOT') -) - -# Binary Operations Rules - -def p_expr_binary(p): #TODO: Change switch-case :( - '''expr : expr PLUS expr - | expr MINUS expr - | expr STAR expr - | expr DIVIDE expr - | expr LESS expr - | expr LESSQ expr - | expr EQUALS expr''' - if p[2] == '+': - p[0] = SumNode(p[1], p[3]) - elif p[2] == '-': - p[0] = DiffNode(p[1], p[3]) - elif p[2] == '*': - p[0] = StarNode(p[1], p[3]) - elif p[2] == '/': - p[0] = DivNode(p[1], p[3]) - elif p[2] == '<': - p[0] = LessNode(p[1], p[3]) - elif p[2] == '<=': - p[0] = LessEqualNode(p[1], p[3]) - elif p[2] == '=': - p[0] = EqualNode(p[1], p[3]) - -# Unary Operations Rules - -def p_expr_unary(p): - '''expr : BITNOT expr - | ISVOID expr - | NOT expr''' - if p[1] == '~': - p[0] = BitNotNode(p[2]) - elif p[1].lower() == 'isvoid': - p[0] = IsVoidNode(p[2]) - elif p[1].lower() == 'not': - p[0] = NotNode(p[2]) - -def p_arith_basecall(p): - '''arith : base_call''' - p[0] = p[1] - -# Function Call Rules - -def p_basecall(p): # Parent Call (Review) - '''base_call : fact ARROBA TYPEID DOT func_call - | fact''' - try: - p[0] = ParentCallNode(p[1], p[3], p[5][0], p[5][1]) - except: - p[0] = p[1] - -def p_factcall(p): - '''fact : fact DOT func_call - | func_call''' - try: - p[0] = ExprCallNode(p[1], p[3][0], p[3][1]) - except: - p[0] = SelfCallNode(p[1][0], p[1][1]) - -def p_func_call(p): - '''func_call : ID LPAREN arg_list RPAREN''' - p[0] = (p[1], p[3]) - -def p_arglist_ept(p): - '''arg_list : empty''' - p[0] = [] - -def p_arglist_prm(p): - '''arg_list : arg_build''' - p[0] = p[1] - -def p_arg_build(p): - '''arg_build : expr empty - | expr COMMA arg_build''' - try: - p[0] = [ p[1] ] + p[3] - except: - p[0] = [ p[1] ] - -# Atomic Operations - -def p_factatom(p): - '''fact : atom''' - p[0] = p[1] - -def p_fact_group(p): - '''fact : LPAREN expr RPAREN''' - p[0] = p[2] - -def p_atom_int(p): - '''atom : INTEGER''' - p[0] = IntegerNode(p[1]) - -def p_atom_id(p): - '''atom : ID''' - p[0] = VariableNode(p[1]) - -def p_atom_new(p): - '''atom : NEW TYPEID''' - p[0] = NewNode(p[2]) - -def p_atom_block(p): - '''atom : LBRACE block RBRACE''' - p[0] = BlockNode(p[2]) - -def p_block(p): - '''block : expr SEMI - | expr SEMI block''' - try: - p[0] = [ p[1] ] + p[3] - except: - p[0] = [ p[1] ] - -def p_atom_bool(p): - '''atom : BOOL''' - p[0] = BoolNode(p[1]) - -def p_atom_string(p): - '''atom : STRING''' - p[0] = StringNode(p[1]) - -def p_error(p): - if p: - line = p.lexer.lineno - col = find_column(p.lexer.lexdata, p.lexpos) - PARSER_ERRORS.append(ERROR_FORMAT % (line, col, "SyntacticError", f"ERROR at or near {p.value}")) - else: - PARSER_ERRORS.append(ERROR_FORMAT % (0, 0, "SyntacticError", "ERROR at or near EOF")) \ No newline at end of file diff --git a/src/cl_parser/coolparser.py b/src/cl_parser/coolparser.py index 6ea559dd..e153786b 100644 --- a/src/cl_parser/coolparser.py +++ b/src/cl_parser/coolparser.py @@ -1,11 +1,298 @@ +# Get the token map from the lexer +from cl_ast import * +from cl_lexer.coollexer import CoolLexer +from pipeline import State +from utils import ERROR_FORMAT, find_column import ply.yacc as yacc -import cl_parser.config -from cl_lexer import CoolLexer -class CoolParser(object): - def __init__(self, *args, **kwargs): - self.parser = yacc.yacc(module=cl_parser.config, **kwargs) +class CoolParser(State): + def __init__(self, name, **kwargs): + super().__init__(name) + self.lexer = CoolLexer('Lex') + self.tokens = self.lexer.tokens + self.parser = yacc.yacc(module=self) - def parse(self, data, lexer=CoolLexer()): - return self.parser.parse(data, lexer=lexer) - \ No newline at end of file + def run(self, inputx): + ast = self.parser.parse(inputx, lexer=self.lexer) + self.errors = self.lexer.errors + self.errors + return ast + + # Set the grammar start symbol + start = 'program' + + # Program Rule + def p_program(self, p): + '''program : class_list''' + p[0] = ProgramNode(p[1]) + + # Empty Production + def p_empty(self, p): + '''empty :''' + pass + + # Classes Rules + def p_class_list(self, p): + '''class_list : def_class + | def_class class_list''' + try: + p[0] = [ p[1] ] + p[2] + except: + p[0] = [ p[1] ] + + # Class Definition Rules + def p_def_class(self, p): + '''def_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI + | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI''' + if p[3].lower() == 'inherits': + p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + else: + p[0] = ClassDeclarationNode(p[2], p[4]) + + # Class Feature List Rules + def p_feature_list(self, p): + '''feature_list : empty + | def_attr SEMI feature_list + | def_func SEMI feature_list''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [] + + # Attr Definition Rules + def p_def_attr(self, p): + '''def_attr : ID COLON TYPEID + | ID COLON TYPEID ASSIGN expr''' + try: + p[0] = AttrDeclarationNode(p[1], p[3], p[5]) + except: + p[0] = AttrDeclarationNode(p[1], p[3]) + + # Func Definition Rules + def p_def_func(self, p): + '''def_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE''' + p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) + + # Func Parameters List Rules + def p_param_list_ept(self, p): + '''param_list : empty''' + p[0] = [] + + def p_param_list_prm(self, p): + '''param_list : param_build''' + p[0] = p[1] + + def p_param_build(self, p): + '''param_build : param empty + | param COMMA param_build''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [ p[1] ] + + # Parameter Rule + def p_param(self, p): + '''param : ID COLON TYPEID''' + p[0] = (p[1], p[3]) # (ID, TYPE) + + # Expression Rules + # ------------------ + + def p_expr(self, p): + '''expr : LET let_list IN expr + | CASE expr OF cases_list ESAC + | IF expr THEN expr ELSE expr FI + | WHILE expr LOOP expr POOL''' + + if p[1].lower() == 'let': + p[0] = LetNode(p[2], p[4]) + elif p[1].lower() == 'case': + p[0] = CaseNode(p[2], p[4]) + elif p[1].lower() == 'if': + p[0] = ConditionalNode(p[2], p[4], p[6]) + elif p[1].lower() == 'while': + p[0] = WhileNode(p[2], p[4]) + + # Assign Production + def p_expr_assign(self, p): + '''expr : ID ASSIGN expr''' + p[0] = AssignNode(p[1], p[3]) + + # Precedence Production + def p_expr_arith(self, p): + '''expr : arith''' + p[0] = p[1] + + # Let Rules + + def p_let_list(self, p): + '''let_list : let_assign + | let_assign COMMA let_list''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [ p[1] ] + + def p_let_assign(self, p): + '''let_assign : param ASSIGN expr + | param''' + try: + p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) + except: + p[0] = VarDeclarationNode(p[1][0], p[1][1]) + + # Case Rules + + def p_cases_list(self, p): + '''cases_list : case SEMI + | case SEMI cases_list''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [ p[1] ] + + def p_case(self, p): + '''case : ID COLON TYPEID WITH expr''' + p[0] = OptionNode(p[1], p[3], p[5]) + + # Arith Operations + # ------------------- + + # Operators Precedence + precedence = ( + ('right', 'BITNOT'), + ('right', 'ISVOID'), + ('left', 'STAR', 'DIVIDE'), + ('left', 'PLUS', 'MINUS'), + ('nonassoc', 'LESS', 'LESSQ', 'EQUALS'), + ('right', 'NOT') + ) + + # Binary Operations Rules + + def p_expr_binary(self, p): + '''expr : expr PLUS expr + | expr MINUS expr + | expr STAR expr + | expr DIVIDE expr + | expr LESS expr + | expr LESSQ expr + | expr EQUALS expr''' + if p[2] == '+': + p[0] = SumNode(p[1], p[3]) + elif p[2] == '-': + p[0] = DiffNode(p[1], p[3]) + elif p[2] == '*': + p[0] = StarNode(p[1], p[3]) + elif p[2] == '/': + p[0] = DivNode(p[1], p[3]) + elif p[2] == '<': + p[0] = LessNode(p[1], p[3]) + elif p[2] == '<=': + p[0] = LessEqualNode(p[1], p[3]) + elif p[2] == '=': + p[0] = EqualNode(p[1], p[3]) + + # Unary Operations Rules + + def p_expr_unary(self, p): + '''expr : BITNOT expr + | ISVOID expr + | NOT expr''' + if p[1] == '~': + p[0] = BitNotNode(p[2]) + elif p[1].lower() == 'isvoid': + p[0] = IsVoidNode(p[2]) + elif p[1].lower() == 'not': + p[0] = NotNode(p[2]) + + def p_arith_basecall(self, p): + '''arith : base_call''' + p[0] = p[1] + + # Function Call Rules + + def p_basecall(self, p): # Parent Call (Review) + '''base_call : fact ARROBA TYPEID DOT func_call + | fact''' + try: + p[0] = ParentCallNode(p[1], p[3], p[5][0], p[5][1]) + except: + p[0] = p[1] + + def p_factcall(self, p): + '''fact : fact DOT func_call + | func_call''' + try: + p[0] = ExprCallNode(p[1], p[3][0], p[3][1]) + except: + p[0] = SelfCallNode(p[1][0], p[1][1]) + + def p_func_call(self, p): + '''func_call : ID LPAREN arg_list RPAREN''' + p[0] = (p[1], p[3]) + + def p_arglist_ept(self, p): + '''arg_list : empty''' + p[0] = [] + + def p_arglist_prm(self, p): + '''arg_list : arg_build''' + p[0] = p[1] + + def p_arg_build(self, p): + '''arg_build : expr empty + | expr COMMA arg_build''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [ p[1] ] + + # Atomic Operations + + def p_factatom(self, p): + '''fact : atom''' + p[0] = p[1] + + def p_fact_group(self, p): + '''fact : LPAREN expr RPAREN''' + p[0] = p[2] + + def p_atom_int(self, p): + '''atom : INTEGER''' + p[0] = IntegerNode(p[1]) + + def p_atom_id(self, p): + '''atom : ID''' + p[0] = VariableNode(p[1]) + + def p_atom_new(self, p): + '''atom : NEW TYPEID''' + p[0] = NewNode(p[2]) + + def p_atom_block(self, p): + '''atom : LBRACE block RBRACE''' + p[0] = BlockNode(p[2]) + + def p_block(self, p): + '''block : expr SEMI + | expr SEMI block''' + try: + p[0] = [ p[1] ] + p[3] + except: + p[0] = [ p[1] ] + + def p_atom_bool(self, p): + '''atom : BOOL''' + p[0] = BoolNode(p[1]) + + def p_atom_string(self, p): + '''atom : STRING''' + p[0] = StringNode(p[1]) + + def p_error(self, p): + if p: + line = self.lexer.lexer.lineno + col = find_column(self.lexer.lexer.lexdata, p.lexpos) + self.errors.append(ERROR_FORMAT % (line, col, "SyntacticError", f"ERROR at or near {p.value}")) + else: + self.errors.append(ERROR_FORMAT % (0, 0, "SyntacticError", "ERROR at or near EOF")) \ No newline at end of file diff --git a/src/cl_parser/parsetab.py b/src/cl_parser/parsetab.py index 3db0514e..75bfc61a 100644 --- a/src/cl_parser/parsetab.py +++ b/src/cl_parser/parsetab.py @@ -6,7 +6,7 @@ _lr_method = 'LALR' -_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ERROR ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : emptyparam_list : param_buildparam_build : param empty\n | param COMMA param_buildparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprexpr : expr PLUS expr\n | expr MINUS expr\n | expr STAR expr\n | expr DIVIDE expr\n | expr LESS expr\n | expr LESSQ expr\n | expr EQUALS exprexpr : BITNOT expr\n | ISVOID expr\n | NOT exprarith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : emptyarg_list : arg_buildarg_build : expr empty\n | expr COMMA arg_buildfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' +_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ERROR ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : emptyparam_list : param_buildparam_build : param empty\n | param COMMA param_buildparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprexpr : expr PLUS expr\n | expr MINUS expr\n | expr STAR expr\n | expr DIVIDE expr\n | expr LESS expr\n | expr LESSQ expr\n | expr EQUALS exprexpr : BITNOT expr\n | ISVOID expr\n | NOT exprarith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : emptyarg_list : arg_buildarg_build : expr empty\n | expr COMMA arg_buildfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' _lr_action_items = {'CLASS':([0,3,21,60,],[4,4,-5,-6,]),'$end':([1,2,3,5,21,60,],[0,-1,-3,-4,-5,-6,]),'TYPEID':([4,8,18,32,53,58,79,128,],[6,14,24,57,82,85,104,134,]),'LBRACE':([6,14,31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,85,98,100,102,103,109,110,113,129,136,],[7,20,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,110,54,54,54,54,54,54,54,54,54,]),'INHERITS':([6,],[8,]),'RBRACE':([7,9,10,16,17,20,22,23,30,37,43,47,48,49,50,52,55,56,76,77,78,82,83,86,91,92,93,94,95,96,97,105,107,108,109,111,114,123,124,126,130,131,137,],[-2,15,-7,-2,-2,-2,-8,-9,36,-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,108,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-57,-46,-18,-58,132,-19,-21,-42,-20,]),'ID':([7,16,17,19,20,31,35,39,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,80,98,99,100,101,102,103,109,110,113,122,127,129,136,],[13,13,13,25,13,37,25,25,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,106,37,25,37,119,37,37,37,37,37,106,119,37,37,]),'SEMI':([11,12,15,24,36,37,38,43,47,48,49,50,52,55,56,76,77,78,82,84,86,91,92,93,94,95,96,97,105,107,108,111,114,118,126,130,131,132,137,138,],[16,17,21,-10,60,-54,-11,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,109,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,127,-19,-21,-42,-12,-20,-30,]),'COLON':([13,25,33,119,],[18,32,58,128,]),'LPAREN':([13,31,37,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,106,109,110,113,129,136,],[19,51,62,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,62,51,51,51,51,51,]),'RPAREN':([19,26,27,28,29,34,37,43,47,48,49,50,52,55,56,57,59,62,76,77,78,81,82,86,87,88,89,90,91,92,93,94,95,96,97,105,107,108,111,112,114,125,126,130,131,137,],[-2,33,-13,-14,-2,-15,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,-16,-2,-38,-39,-40,107,-55,-22,111,-47,-48,-2,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-49,-18,-50,-19,-21,-42,-20,]),'ASSIGN':([24,37,57,72,],[31,61,-17,100,]),'COMMA':([29,37,43,47,48,49,50,52,55,56,57,71,72,76,77,78,82,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,126,130,131,137,],[35,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,99,-27,-38,-39,-40,-55,-22,113,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-26,-19,-21,-42,-20,]),'LET':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'CASE':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'IF':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'WHILE':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'BITNOT':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'ISVOID':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'NOT':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'INTEGER':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,]),'NEW':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'BOOL':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,]),'STRING':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'ARROBA':([37,48,49,50,52,55,56,82,105,107,108,111,],[-54,79,-45,-51,-53,-59,-60,-55,-44,-52,-56,-46,]),'DOT':([37,48,49,50,52,55,56,82,104,105,107,108,111,],[-54,80,-45,-51,-53,-59,-60,-55,122,-44,-52,-56,-46,]),'PLUS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,63,-23,-41,-43,-45,-51,-53,-59,-60,63,63,63,63,63,-40,63,-55,63,63,63,-31,-32,63,63,-35,-36,-37,-44,-52,-56,-46,63,63,63,63,63,-19,-21,-42,63,-20,63,]),'MINUS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,64,-23,-41,-43,-45,-51,-53,-59,-60,64,64,64,64,64,-40,64,-55,64,64,64,-31,-32,64,64,-35,-36,-37,-44,-52,-56,-46,64,64,64,64,64,-19,-21,-42,64,-20,64,]),'STAR':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,65,-23,-41,-43,-45,-51,-53,-59,-60,65,65,65,65,65,-40,65,-55,65,65,65,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,65,65,65,65,65,-19,-21,-42,65,-20,65,]),'DIVIDE':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,66,-23,-41,-43,-45,-51,-53,-59,-60,66,66,66,66,66,-40,66,-55,66,66,66,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,66,66,66,66,66,-19,-21,-42,66,-20,66,]),'LESS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,67,-23,-41,-43,-45,-51,-53,-59,-60,67,67,67,67,67,-40,67,-55,67,67,67,67,67,67,67,None,None,None,-44,-52,-56,-46,67,67,67,67,67,-19,-21,-42,67,-20,67,]),'LESSQ':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,68,-23,-41,-43,-45,-51,-53,-59,-60,68,68,68,68,68,-40,68,-55,68,68,68,68,68,68,68,None,None,None,-44,-52,-56,-46,68,68,68,68,68,-19,-21,-42,68,-20,68,]),'EQUALS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,69,-23,-41,-43,-45,-51,-53,-59,-60,69,69,69,69,69,-40,69,-55,69,69,69,69,69,69,69,None,None,None,-44,-52,-56,-46,69,69,69,69,69,-19,-21,-42,69,-20,69,]),'OF':([37,43,47,48,49,50,52,55,56,73,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,101,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'THEN':([37,43,47,48,49,50,52,55,56,74,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,102,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'LOOP':([37,43,47,48,49,50,52,55,56,75,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,103,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'IN':([37,43,47,48,49,50,52,55,56,57,70,71,72,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,115,116,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,98,-24,-27,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-25,-26,-19,-21,-42,-20,]),'ELSE':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,120,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,129,-19,-21,-42,-20,]),'POOL':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,121,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,130,-19,-21,-42,-20,]),'FI':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,135,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,137,-20,]),'ESAC':([117,127,133,],[126,-28,-29,]),'WITH':([134,],[136,]),} @@ -27,64 +27,64 @@ del _lr_goto_items _lr_productions = [ ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','config.py',12), - ('empty -> ','empty',0,'p_empty','config.py',17), - ('class_list -> def_class','class_list',1,'p_class_list','config.py',22), - ('class_list -> def_class class_list','class_list',2,'p_class_list','config.py',23), - ('def_class -> CLASS TYPEID LBRACE feature_list RBRACE SEMI','def_class',6,'p_def_class','config.py',31), - ('def_class -> CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI','def_class',8,'p_def_class','config.py',32), - ('feature_list -> empty','feature_list',1,'p_feature_list','config.py',40), - ('feature_list -> def_attr SEMI feature_list','feature_list',3,'p_feature_list','config.py',41), - ('feature_list -> def_func SEMI feature_list','feature_list',3,'p_feature_list','config.py',42), - ('def_attr -> ID COLON TYPEID','def_attr',3,'p_def_attr','config.py',50), - ('def_attr -> ID COLON TYPEID ASSIGN expr','def_attr',5,'p_def_attr','config.py',51), - ('def_func -> ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE','def_func',9,'p_def_func','config.py',59), - ('param_list -> empty','param_list',1,'p_param_list_ept','config.py',64), - ('param_list -> param_build','param_list',1,'p_param_list_prm','config.py',68), - ('param_build -> param empty','param_build',2,'p_param_build','config.py',72), - ('param_build -> param COMMA param_build','param_build',3,'p_param_build','config.py',73), - ('param -> ID COLON TYPEID','param',3,'p_param','config.py',81), - ('expr -> LET let_list IN expr','expr',4,'p_expr','config.py',88), - ('expr -> CASE expr OF cases_list ESAC','expr',5,'p_expr','config.py',89), - ('expr -> IF expr THEN expr ELSE expr FI','expr',7,'p_expr','config.py',90), - ('expr -> WHILE expr LOOP expr POOL','expr',5,'p_expr','config.py',91), - ('expr -> ID ASSIGN expr','expr',3,'p_expr_assign','config.py',104), - ('expr -> arith','expr',1,'p_expr_arith','config.py',109), - ('let_list -> let_assign','let_list',1,'p_let_list','config.py',115), - ('let_list -> let_assign COMMA let_list','let_list',3,'p_let_list','config.py',116), - ('let_assign -> param ASSIGN expr','let_assign',3,'p_let_assign','config.py',123), - ('let_assign -> param','let_assign',1,'p_let_assign','config.py',124), - ('cases_list -> case SEMI','cases_list',2,'p_cases_list','config.py',133), - ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','config.py',134), - ('case -> ID COLON TYPEID WITH expr','case',5,'p_case','config.py',141), - ('expr -> expr PLUS expr','expr',3,'p_expr_binary','config.py',160), - ('expr -> expr MINUS expr','expr',3,'p_expr_binary','config.py',161), - ('expr -> expr STAR expr','expr',3,'p_expr_binary','config.py',162), - ('expr -> expr DIVIDE expr','expr',3,'p_expr_binary','config.py',163), - ('expr -> expr LESS expr','expr',3,'p_expr_binary','config.py',164), - ('expr -> expr LESSQ expr','expr',3,'p_expr_binary','config.py',165), - ('expr -> expr EQUALS expr','expr',3,'p_expr_binary','config.py',166), - ('expr -> BITNOT expr','expr',2,'p_expr_unary','config.py',185), - ('expr -> ISVOID expr','expr',2,'p_expr_unary','config.py',186), - ('expr -> NOT expr','expr',2,'p_expr_unary','config.py',187), - ('arith -> base_call','arith',1,'p_arith_basecall','config.py',196), - ('base_call -> fact ARROBA TYPEID DOT func_call','base_call',5,'p_basecall','config.py',202), - ('base_call -> fact','base_call',1,'p_basecall','config.py',203), - ('fact -> fact DOT func_call','fact',3,'p_factcall','config.py',210), - ('fact -> func_call','fact',1,'p_factcall','config.py',211), - ('func_call -> ID LPAREN arg_list RPAREN','func_call',4,'p_func_call','config.py',218), - ('arg_list -> empty','arg_list',1,'p_arglist_ept','config.py',222), - ('arg_list -> arg_build','arg_list',1,'p_arglist_prm','config.py',226), - ('arg_build -> expr empty','arg_build',2,'p_arg_build','config.py',230), - ('arg_build -> expr COMMA arg_build','arg_build',3,'p_arg_build','config.py',231), - ('fact -> atom','fact',1,'p_factatom','config.py',240), - ('fact -> LPAREN expr RPAREN','fact',3,'p_fact_group','config.py',244), - ('atom -> INTEGER','atom',1,'p_atom_int','config.py',248), - ('atom -> ID','atom',1,'p_atom_id','config.py',252), - ('atom -> NEW TYPEID','atom',2,'p_atom_new','config.py',256), - ('atom -> LBRACE block RBRACE','atom',3,'p_atom_block','config.py',260), - ('block -> expr SEMI','block',2,'p_block','config.py',264), - ('block -> expr SEMI block','block',3,'p_block','config.py',265), - ('atom -> BOOL','atom',1,'p_atom_bool','config.py',272), - ('atom -> STRING','atom',1,'p_atom_string','config.py',276), + ('program -> class_list','program',1,'p_program','coolparser.py',25), + ('empty -> ','empty',0,'p_empty','coolparser.py',30), + ('class_list -> def_class','class_list',1,'p_class_list','coolparser.py',35), + ('class_list -> def_class class_list','class_list',2,'p_class_list','coolparser.py',36), + ('def_class -> CLASS TYPEID LBRACE feature_list RBRACE SEMI','def_class',6,'p_def_class','coolparser.py',44), + ('def_class -> CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI','def_class',8,'p_def_class','coolparser.py',45), + ('feature_list -> empty','feature_list',1,'p_feature_list','coolparser.py',53), + ('feature_list -> def_attr SEMI feature_list','feature_list',3,'p_feature_list','coolparser.py',54), + ('feature_list -> def_func SEMI feature_list','feature_list',3,'p_feature_list','coolparser.py',55), + ('def_attr -> ID COLON TYPEID','def_attr',3,'p_def_attr','coolparser.py',63), + ('def_attr -> ID COLON TYPEID ASSIGN expr','def_attr',5,'p_def_attr','coolparser.py',64), + ('def_func -> ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE','def_func',9,'p_def_func','coolparser.py',72), + ('param_list -> empty','param_list',1,'p_param_list_ept','coolparser.py',77), + ('param_list -> param_build','param_list',1,'p_param_list_prm','coolparser.py',81), + ('param_build -> param empty','param_build',2,'p_param_build','coolparser.py',85), + ('param_build -> param COMMA param_build','param_build',3,'p_param_build','coolparser.py',86), + ('param -> ID COLON TYPEID','param',3,'p_param','coolparser.py',94), + ('expr -> LET let_list IN expr','expr',4,'p_expr','coolparser.py',101), + ('expr -> CASE expr OF cases_list ESAC','expr',5,'p_expr','coolparser.py',102), + ('expr -> IF expr THEN expr ELSE expr FI','expr',7,'p_expr','coolparser.py',103), + ('expr -> WHILE expr LOOP expr POOL','expr',5,'p_expr','coolparser.py',104), + ('expr -> ID ASSIGN expr','expr',3,'p_expr_assign','coolparser.py',117), + ('expr -> arith','expr',1,'p_expr_arith','coolparser.py',122), + ('let_list -> let_assign','let_list',1,'p_let_list','coolparser.py',128), + ('let_list -> let_assign COMMA let_list','let_list',3,'p_let_list','coolparser.py',129), + ('let_assign -> param ASSIGN expr','let_assign',3,'p_let_assign','coolparser.py',136), + ('let_assign -> param','let_assign',1,'p_let_assign','coolparser.py',137), + ('cases_list -> case SEMI','cases_list',2,'p_cases_list','coolparser.py',146), + ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','coolparser.py',147), + ('case -> ID COLON TYPEID WITH expr','case',5,'p_case','coolparser.py',154), + ('expr -> expr PLUS expr','expr',3,'p_expr_binary','coolparser.py',173), + ('expr -> expr MINUS expr','expr',3,'p_expr_binary','coolparser.py',174), + ('expr -> expr STAR expr','expr',3,'p_expr_binary','coolparser.py',175), + ('expr -> expr DIVIDE expr','expr',3,'p_expr_binary','coolparser.py',176), + ('expr -> expr LESS expr','expr',3,'p_expr_binary','coolparser.py',177), + ('expr -> expr LESSQ expr','expr',3,'p_expr_binary','coolparser.py',178), + ('expr -> expr EQUALS expr','expr',3,'p_expr_binary','coolparser.py',179), + ('expr -> BITNOT expr','expr',2,'p_expr_unary','coolparser.py',198), + ('expr -> ISVOID expr','expr',2,'p_expr_unary','coolparser.py',199), + ('expr -> NOT expr','expr',2,'p_expr_unary','coolparser.py',200), + ('arith -> base_call','arith',1,'p_arith_basecall','coolparser.py',209), + ('base_call -> fact ARROBA TYPEID DOT func_call','base_call',5,'p_basecall','coolparser.py',215), + ('base_call -> fact','base_call',1,'p_basecall','coolparser.py',216), + ('fact -> fact DOT func_call','fact',3,'p_factcall','coolparser.py',223), + ('fact -> func_call','fact',1,'p_factcall','coolparser.py',224), + ('func_call -> ID LPAREN arg_list RPAREN','func_call',4,'p_func_call','coolparser.py',231), + ('arg_list -> empty','arg_list',1,'p_arglist_ept','coolparser.py',235), + ('arg_list -> arg_build','arg_list',1,'p_arglist_prm','coolparser.py',239), + ('arg_build -> expr empty','arg_build',2,'p_arg_build','coolparser.py',243), + ('arg_build -> expr COMMA arg_build','arg_build',3,'p_arg_build','coolparser.py',244), + ('fact -> atom','fact',1,'p_factatom','coolparser.py',253), + ('fact -> LPAREN expr RPAREN','fact',3,'p_fact_group','coolparser.py',257), + ('atom -> INTEGER','atom',1,'p_atom_int','coolparser.py',261), + ('atom -> ID','atom',1,'p_atom_id','coolparser.py',265), + ('atom -> NEW TYPEID','atom',2,'p_atom_new','coolparser.py',269), + ('atom -> LBRACE block RBRACE','atom',3,'p_atom_block','coolparser.py',273), + ('block -> expr SEMI','block',2,'p_block','coolparser.py',277), + ('block -> expr SEMI block','block',3,'p_block','coolparser.py',278), + ('atom -> BOOL','atom',1,'p_atom_bool','coolparser.py',285), + ('atom -> STRING','atom',1,'p_atom_string','coolparser.py',289), ] diff --git a/src/main.py b/src/main.py index a75a99ef..1c2521d2 100644 --- a/src/main.py +++ b/src/main.py @@ -1,33 +1,24 @@ from cl_lexer import CoolLexer from cl_parser import CoolParser +from pipeline import Pipeline import sys -from utils import LEX_ERRORS, PARSER_ERRORS def main(): program = open(sys.argv[1]).read() - lex = CoolLexer() - parser = CoolParser() - ast = parser.parse(program, lexer=lex.lexer) + + pipeline = Pipeline() - # lex.input(program) - # while True: - # tok = lex.token() - # if not tok: - # break - # print(tok) + # pipeline.submit_state(CoolLexer('Lex')) + # pipeline.run_pipeline(program) - #print first Lex Errors - for e in LEX_ERRORS: - print(e) + pipeline.submit_state(CoolParser('Parser')) + pipeline.run_pipeline(program) - for e in PARSER_ERRORS: - print(e) + pipeline.report_errors() - if LEX_ERRORS or PARSER_ERRORS: + if pipeline.pipeline_errors: exit(1) - else: - exit(0) if __name__ == "__main__": main() # temporal \ No newline at end of file diff --git a/src/pipeline/__init__.py b/src/pipeline/__init__.py new file mode 100644 index 00000000..797f496a --- /dev/null +++ b/src/pipeline/__init__.py @@ -0,0 +1,2 @@ +from .state import State +from .pipeline import Pipeline \ No newline at end of file diff --git a/src/pipeline/pipeline.py b/src/pipeline/pipeline.py new file mode 100644 index 00000000..b3fc3096 --- /dev/null +++ b/src/pipeline/pipeline.py @@ -0,0 +1,23 @@ +class Pipeline(object): + def __init__(self, *args, **kwargs): + self.states = [] + self.pipeline_errors = [] + + def submit_state(self, state): + self.states.append(state) + + def run_pipeline(self, raw): + self.pipeline_errors.clear() # clean old errors + + res = raw + for state in self.states: + res = state.run(res) + + # collect errors from current state + self.pipeline_errors += state.errors + + return res + + def report_errors(self): + for err in self.pipeline_errors: + print(err) \ No newline at end of file diff --git a/src/pipeline/state.py b/src/pipeline/state.py new file mode 100644 index 00000000..57d822dd --- /dev/null +++ b/src/pipeline/state.py @@ -0,0 +1,8 @@ +class State(object): + def __init__(self, name): + self.name = name + self.errors = [] + + def run(self, inputx): + # Put errors in self.errors and use pipeline report function to print errors + pass \ No newline at end of file diff --git a/src/utils.py b/src/utils.py index 930c8bc6..53158429 100644 --- a/src/utils.py +++ b/src/utils.py @@ -1,10 +1,6 @@ #(Row, Col) - ErrorType: Message ERROR_FORMAT = "(%d, %d) - %s: %s" -#This is bad -LEX_ERRORS = [] -PARSER_ERRORS = [] - # Compute column. # input is the input text string # lexpos is a lex position in token instance From 4d0caadc11e4b26a8781d35fbb002d6ba1025ffc Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 22 Feb 2020 21:03:16 -0500 Subject: [PATCH 013/140] updating pipeline and adding reader for missing input files --- src/cl_lexer/coollexer.py | 7 +------ src/cl_parser/coolparser.py | 6 +++--- src/main.py | 11 +++++------ src/pipeline/pipeline.py | 6 ++++-- src/pipeline/state.py | 1 + src/tools/__init__.py | 0 src/tools/reader.py | 14 ++++++++++++++ src/{ => tools}/utils.py | 0 8 files changed, 28 insertions(+), 17 deletions(-) create mode 100644 src/tools/__init__.py create mode 100644 src/tools/reader.py rename src/{ => tools}/utils.py (100%) diff --git a/src/cl_lexer/coollexer.py b/src/cl_lexer/coollexer.py index 7e15d5d2..efc51c02 100755 --- a/src/cl_lexer/coollexer.py +++ b/src/cl_lexer/coollexer.py @@ -2,7 +2,7 @@ import ply.lex as lex from pipeline import State -from utils import ERROR_FORMAT, find_column +from tools.utils import ERROR_FORMAT, find_column class CoolLexer(State): def __init__(self, name, **kwargs): @@ -10,17 +10,12 @@ def __init__(self, name, **kwargs): self.lexer = lex.lex(module=self, **kwargs) self.balance = 0 - # TODO: Change to Dispatch - # ------------------------------- - def input(self, raw): return self.lexer.input(raw) def token(self): return self.lexer.token() - # ------------------------------- - def run(self, inputx): self.lexer.input(inputx) toks = [] diff --git a/src/cl_parser/coolparser.py b/src/cl_parser/coolparser.py index e153786b..ab6a43c4 100644 --- a/src/cl_parser/coolparser.py +++ b/src/cl_parser/coolparser.py @@ -2,7 +2,7 @@ from cl_ast import * from cl_lexer.coollexer import CoolLexer from pipeline import State -from utils import ERROR_FORMAT, find_column +from tools.utils import ERROR_FORMAT, find_column import ply.yacc as yacc class CoolParser(State): @@ -12,8 +12,8 @@ def __init__(self, name, **kwargs): self.tokens = self.lexer.tokens self.parser = yacc.yacc(module=self) - def run(self, inputx): - ast = self.parser.parse(inputx, lexer=self.lexer) + def run(self, raw): + ast = self.parser.parse(raw, lexer=self.lexer) self.errors = self.lexer.errors + self.errors return ast diff --git a/src/main.py b/src/main.py index 1c2521d2..e9d6fefd 100644 --- a/src/main.py +++ b/src/main.py @@ -1,3 +1,4 @@ +from tools.reader import Reader from cl_lexer import CoolLexer from cl_parser import CoolParser from pipeline import Pipeline @@ -5,20 +6,18 @@ import sys def main(): - program = open(sys.argv[1]).read() + program = sys.argv[1] pipeline = Pipeline() - # pipeline.submit_state(CoolLexer('Lex')) - # pipeline.run_pipeline(program) - + pipeline.submit_state(Reader('Reader')) pipeline.submit_state(CoolParser('Parser')) - pipeline.run_pipeline(program) + pipeline.run_pipeline(program) pipeline.report_errors() if pipeline.pipeline_errors: exit(1) if __name__ == "__main__": - main() # temporal \ No newline at end of file + main() \ No newline at end of file diff --git a/src/pipeline/pipeline.py b/src/pipeline/pipeline.py index b3fc3096..032e68d8 100644 --- a/src/pipeline/pipeline.py +++ b/src/pipeline/pipeline.py @@ -6,12 +6,14 @@ def __init__(self, *args, **kwargs): def submit_state(self, state): self.states.append(state) - def run_pipeline(self, raw): + def run_pipeline(self, inputx): self.pipeline_errors.clear() # clean old errors - res = raw + res = inputx for state in self.states: res = state.run(res) + if state.stop: + break # collect errors from current state self.pipeline_errors += state.errors diff --git a/src/pipeline/state.py b/src/pipeline/state.py index 57d822dd..4d47cb1d 100644 --- a/src/pipeline/state.py +++ b/src/pipeline/state.py @@ -1,6 +1,7 @@ class State(object): def __init__(self, name): self.name = name + self.stop = False self.errors = [] def run(self, inputx): diff --git a/src/tools/__init__.py b/src/tools/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/tools/reader.py b/src/tools/reader.py new file mode 100644 index 00000000..64f273ce --- /dev/null +++ b/src/tools/reader.py @@ -0,0 +1,14 @@ +from .utils import ERROR_FORMAT +from pipeline import State + +class Reader(State): + def __init__(self, name): + super().__init__(name) + + def run(self, path): + try: + raw = open(path).read() + return raw + except: + self.errors.append(ERROR_FORMAT % (0, 0, 'CompilerError', 'Missing input file')) + self.stop = True # stop pipeline \ No newline at end of file diff --git a/src/utils.py b/src/tools/utils.py similarity index 100% rename from src/utils.py rename to src/tools/utils.py From 259044d1f888d07350c20f1fe79d939c123c4d78 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 22 Feb 2020 21:31:02 -0500 Subject: [PATCH 014/140] include visitor.py --- src/visitors/visitor.py | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 src/visitors/visitor.py diff --git a/src/visitors/visitor.py b/src/visitors/visitor.py new file mode 100755 index 00000000..96484283 --- /dev/null +++ b/src/visitors/visitor.py @@ -0,0 +1,80 @@ +# The MIT License (MIT) +# +# Copyright (c) 2013 Curtis Schlak +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +import inspect + +__all__ = ['on', 'when'] + +def on(param_name): + def f(fn): + dispatcher = Dispatcher(param_name, fn) + return dispatcher + return f + + +def when(param_type): + def f(fn): + frame = inspect.currentframe().f_back + func_name = fn.func_name if 'func_name' in dir(fn) else fn.__name__ + dispatcher = frame.f_locals[func_name] + if not isinstance(dispatcher, Dispatcher): + dispatcher = dispatcher.dispatcher + dispatcher.add_target(param_type, fn) + def ff(*args, **kw): + return dispatcher(*args, **kw) + ff.dispatcher = dispatcher + return ff + return f + + +class Dispatcher(object): + def __init__(self, param_name, fn): + frame = inspect.currentframe().f_back.f_back + top_level = frame.f_locals == frame.f_globals + self.param_index = self.__argspec(fn).args.index(param_name) + self.param_name = param_name + self.targets = {} + + def __call__(self, *args, **kw): + typ = args[self.param_index].__class__ + d = self.targets.get(typ) + if d is not None: + return d(*args, **kw) + else: + issub = issubclass + t = self.targets + ks = t.keys() + ans = [t[k](*args, **kw) for k in ks if issub(typ, k)] + if len(ans) == 1: + return ans.pop() + return ans + + def add_target(self, typ, target): + self.targets[typ] = target + + @staticmethod + def __argspec(fn): + # Support for Python 3 type hints requires inspect.getfullargspec + if hasattr(inspect, 'getfullargspec'): + return inspect.getfullargspec(fn) + else: + return inspect.getargspec(fn) From 58ad062e58b3a5b2aba532431b04e34f2f62f73c Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 25 Feb 2020 17:32:16 -0500 Subject: [PATCH 015/140] adding compiler error classes and semantic module --- src/cl_lexer/coollexer.py | 15 +- src/cl_parser/coolparser.py | 7 +- src/tools/cmp_errors.py | 60 ++++++++ src/tools/reader.py | 4 +- src/tools/semantic.py | 294 ++++++++++++++++++++++++++++++++++++ src/tools/utils.py | 3 - 6 files changed, 368 insertions(+), 15 deletions(-) create mode 100644 src/tools/cmp_errors.py create mode 100644 src/tools/semantic.py diff --git a/src/cl_lexer/coollexer.py b/src/cl_lexer/coollexer.py index efc51c02..a5f8e3ef 100755 --- a/src/cl_lexer/coollexer.py +++ b/src/cl_lexer/coollexer.py @@ -1,8 +1,9 @@ """ Lexer module for COOL Language """ -import ply.lex as lex from pipeline import State -from tools.utils import ERROR_FORMAT, find_column +from tools.utils import find_column +from tools.cmp_errors import LexicographicError +import ply.lex as lex class CoolLexer(State): def __init__(self, name, **kwargs): @@ -62,7 +63,7 @@ def t_comments_error(self, t): def t_comments_eof(self, t): if self.balance > 0: - self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "EOF in comment")) + self.errors.append(LexicographicError(t.lineno, find_column(t.lexer.lexdata, t.lexpos), "EOF in comment")) # String Matching State # --------------------------------------- @@ -89,11 +90,11 @@ def t_str_consume(self, t): r'([^\n\"\\]|\\.)+' fnil = t.value.rfind('\0') if fnil != -1: - self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos) + fnil, "LexicographicError", "String contains null character")) + self.errors.append(LexicographicError(t.lineno, find_column(t.lexer.lexdata, t.lexpos) + fnil, "String contains null character")) def t_str_error(self, t): if t.value[0] == '\n': - self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "Unterminated string constant")) + self.errors.append(LexicographicError(t.lineno, find_column(t.lexer.lexdata, t.lexpos), "Unterminated string constant")) t.lexer.lineno += 1 t.lexer.skip(1) t.lexer.begin('INITIAL') @@ -101,7 +102,7 @@ def t_str_error(self, t): pass def t_str_eof(self, t): - self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", "EOF in string constant")) + self.errors.append(LexicographicError(t.lineno, find_column(t.lexer.lexdata, t.lexpos), "EOF in string constant")) # Initial State # --------------------------------------- @@ -220,7 +221,7 @@ def t_newline(self, t): #Error handling rule def t_error(self, t): - self.errors.append(ERROR_FORMAT % (t.lineno, find_column(t.lexer.lexdata, t.lexpos), "LexicographicError", f"ERROR {t.value[0]}")) + self.errors.append(LexicographicError(t.lineno, find_column(t.lexer.lexdata, t.lexpos), f"ERROR {t.value[0]}")) # Generate Error Token t.value = t.value[0] t.type = 'ERROR' diff --git a/src/cl_parser/coolparser.py b/src/cl_parser/coolparser.py index ab6a43c4..fd0986d7 100644 --- a/src/cl_parser/coolparser.py +++ b/src/cl_parser/coolparser.py @@ -2,7 +2,8 @@ from cl_ast import * from cl_lexer.coollexer import CoolLexer from pipeline import State -from tools.utils import ERROR_FORMAT, find_column +from tools.utils import find_column +from tools.cmp_errors import SyntacticError import ply.yacc as yacc class CoolParser(State): @@ -293,6 +294,6 @@ def p_error(self, p): if p: line = self.lexer.lexer.lineno col = find_column(self.lexer.lexer.lexdata, p.lexpos) - self.errors.append(ERROR_FORMAT % (line, col, "SyntacticError", f"ERROR at or near {p.value}")) + self.errors.append(SyntacticError(line, col, f"ERROR at or near {p.value}")) else: - self.errors.append(ERROR_FORMAT % (0, 0, "SyntacticError", "ERROR at or near EOF")) \ No newline at end of file + self.errors.append(SyntacticError(0, 0, "ERROR at or near EOF")) \ No newline at end of file diff --git a/src/tools/cmp_errors.py b/src/tools/cmp_errors.py new file mode 100644 index 00000000..0ebdd092 --- /dev/null +++ b/src/tools/cmp_errors.py @@ -0,0 +1,60 @@ +#(Row, Col) - ErrorType: Message +ERROR_FORMAT = "(%d, %d) - %s: %s" + +# Error Types +COMPILER_ERR = 'CompilerError' +LEXICOGRAPHIC_ERR = 'LexicographicError' +SYNTACTIC_ERR = 'SyntacticError' +NAME_ERR = 'NameError' +TYPE_ERR = 'TypeError' +ATTRIBUTE_ERR = 'AttributeError' +SEMANTIC_ERR = 'SemanticError' + +# Semantic Messages +WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' +SELF_IS_READONLY = 'Variable "self" is read-only.' +LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' +INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' +VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' +INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' +INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' +USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' +CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' +BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' +UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' +MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' +TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' + +class Error(object): + def __init__(self, row, col, typex, message): + self.row = row + self.col = col + self.type = typex + self.message = message + + def __str__(self): + return ERROR_FORMAT % (self.row, self.col, self.type, self.message) + +class CompilerError(Error): + def __init__(self, row, col, message): + super().__init__(row, col, COMPILER_ERR, message) + +class LexicographicError(Error): + def __init__(self, row, col, message): + super().__init__(row, col, LEXICOGRAPHIC_ERR, message) + +class SyntacticError(Error): + def __init__(self, row, col, message): + super().__init__(row, col, SYNTACTIC_ERR, message) + +class NameError(Error): + def __init__(self, row, col, message): + super().__init__(row, col, NAME_ERR, message) + +class TypeError(Error): + def __init__(self, row, col, message): + super().__init__(row, col, TYPE_ERR, message) + +class SemanticError(Error): + def __init__(self, row, col, message): + super().__init__(row, col, SEMANTIC_ERR, message) \ No newline at end of file diff --git a/src/tools/reader.py b/src/tools/reader.py index 64f273ce..b966e5c5 100644 --- a/src/tools/reader.py +++ b/src/tools/reader.py @@ -1,4 +1,4 @@ -from .utils import ERROR_FORMAT +from tools.cmp_errors import CompilerError from pipeline import State class Reader(State): @@ -10,5 +10,5 @@ def run(self, path): raw = open(path).read() return raw except: - self.errors.append(ERROR_FORMAT % (0, 0, 'CompilerError', 'Missing input file')) + self.errors.append(CompilerError(0, 0, 'Missing input file')) self.stop = True # stop pipeline \ No newline at end of file diff --git a/src/tools/semantic.py b/src/tools/semantic.py new file mode 100644 index 00000000..68057896 --- /dev/null +++ b/src/tools/semantic.py @@ -0,0 +1,294 @@ +from tools.cmp_errors import * +import itertools as itt + +class SemanticError(Exception): + @property + def text(self): + return self.args[0] + +class Attribute: + def __init__(self, name, typex): + self.name = name + self.type = typex + + def __str__(self): + return f'[attrib] {self.name} : {self.type.name};' + + def __repr__(self): + return str(self) + +class Method: + def __init__(self, name, param_names, params_types, return_type): + self.name = name + self.param_names = param_names + self.param_types = params_types + self.return_type = return_type + + def __str__(self): + params = ', '.join(f'{n}:{t.name}' for n,t in zip(self.param_names, self.param_types)) + return f'[method] {self.name}({params}): {self.return_type.name};' + + def __eq__(self, other): + return other.name == self.name and \ + other.return_type == self.return_type and \ + other.param_types == self.param_types + +class MethodError(Method): + def __init__(self, name, param_names, param_types, return_types): + super().__init__(name, param_names, param_types, return_types) + + def __str__(self): + return f'[method] {self.name} ERROR' + +class Type: + def __init__(self, name:str): + if name == 'ObjectType': + return ObjectType() + self.name = name + self.attributes = [] + self.methods = {} + self.parent = ObjectType() + + def set_parent(self, parent): + if self.parent != ObjectType() and self.parent is not None: + raise SemanticError(f'Parent type is already set for {self.name}.') + self.parent = parent + + def get_attribute(self, name:str): + try: + return next(attr for attr in self.attributes if attr.name == name) + except StopIteration: + if self.parent is None: + raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') + try: + return self.parent.get_attribute(name) + except SemanticError: + raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') + + def define_attribute(self, name:str, typex): + try: + self.get_attribute(name) + except SemanticError: + attribute = Attribute(name, typex) + self.attributes.append(attribute) + return attribute + else: + raise SemanticError(f'Attribute "{name}" is already defined in {self.name}.') + + def get_method(self, name:str): + try: + return self.methods[name] + except KeyError: + if self.parent is None: + raise SemanticError(f'Method "{name}" is not defined in {self.name}.') + try: + return self.parent.get_method(name) + except SemanticError: + raise SemanticError(f'Method "{name}" is not defined in {self.name}.') + + def define_method(self, name:str, param_names:list, param_types:list, return_type): + if name in self.methods: + raise SemanticError(f'Method "{name}" already defined in {self.name}') + # raise SemanticError(f'Method "{name}" already defined in {self.name} with a different signature.') + + method = self.methods[name] = Method(name, param_names, param_types, return_type) + return method + + def change_type(self, method, nparm, newtype): + idx = method.param_names.index(nparm) + method.param_types[idx] = newtype + + + def conforms_to(self, other): + return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) + + def bypass(self): + return False + + def __str__(self): + output = f'type {self.name}' + parent = '' if self.parent is None else f' : {self.parent.name}' + output += parent + output += ' {' + output += '\n\t' if self.attributes or self.methods else '' + output += '\n\t'.join(str(x) for x in self.attributes) + output += '\n\t' if self.attributes else '' + output += '\n\t'.join(str(x) for x in self.methods.values()) + output += '\n' if self.methods else '' + output += '}\n' + return output + + def __repr__(self): + return str(self) + +class ErrorType(Type): + def __init__(self): + Type.__init__(self, '') + + def conforms_to(self, other): + return True + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, ErrorType) + + def __ne__(self, other): + return not isinstance(other, ErrorType) + +class VoidType(Type): + def __init__(self): + Type.__init__(self, '') + + def conforms_to(self, other): + raise Exception('Invalid type: void type.') + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, VoidType) + +class BoolType(Type): + def __init__(self): + Type.__init__(self, 'Bool') + + def __eq__(self, other): + return other.name == self.name or isinstance(other, BoolType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, BoolType) + + +class IntType(Type): + def __init__(self): + Type.__init__(self, 'Int') + + def __eq__(self, other): + return other.name == self.name or isinstance(other, IntType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, IntType) + +class StringType(Type): + def __init__(self): + Type.__init__(self, 'String') + + def __eq__(self, other): + return other.name == self.name or isinstance(other, StringType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, StringType) + +class ObjectType(Type): + def __init__(self): + self.name = 'Object' + self.attributes = [] + self.methods = {} + self.parent = None + + + def __eq__(self, other): + return other.name == self.name or isinstance(other, ObjectType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, ObjectType) + +class Context: + def __init__(self): + self.types = {} + + def create_type(self, name:str): + if name in self.types: + raise SemanticError(f'Type with the same name ({name}) already in context.') + typex = self.types[name] = Type(name) + return typex + + def get_type(self, name:str): + try: + return self.types[name] + except KeyError: + raise SemanticError(f'Type "{name}" is not defined.') + + def __str__(self): + return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' + + def __repr__(self): + return str(self) + +class VariableInfo: + def __init__(self, name, vtype): + self.name = name + self.type = vtype + + def __str__(self): + return f'{self.name} : {self.type.name}' + + def __repr__(self): + return str(self) + +class Scope: + def __init__(self, parent=None): + self.locals = [] + self.parent = parent + self.children = [] + self.expr_dict = { } + self.functions = { } + self.index = 0 if parent is None else len(parent) + + def __len__(self): + return len(self.locals) + + def __str__(self): + res = '' + for scope in self.children: + try: + classx = scope.locals[0] + name = classx.type.name + except: + name = '1' + res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' + return res + + def tab_level(self, tabs, name, num): + res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) + if self.functions: + children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) + else: + children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) + return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' + + def __repr__(self): + return str(self) + + def create_child(self): + child = Scope(self) + self.children.append(child) + return child + + def define_variable(self, vname, vtype): + info = VariableInfo(vname, vtype) + self.locals.append(info) + return info + + def define_attribute(self, attr): + self.locals.append(attr) + + def find_variable(self, vname, index=None): + locals = self.locals if index is None else itt.islice(self.locals, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_variable(vname, self.index) if self.parent else None + + def get_class_scope(self): + if self.parent == None or self.parent.parent == None: + return self + return self.parent.get_class_scope() + + def is_defined(self, vname): + return self.find_variable(vname) is not None + + def is_local(self, vname): + return any(True for x in self.locals if x.name == vname) \ No newline at end of file diff --git a/src/tools/utils.py b/src/tools/utils.py index 53158429..51363042 100644 --- a/src/tools/utils.py +++ b/src/tools/utils.py @@ -1,6 +1,3 @@ -#(Row, Col) - ErrorType: Message -ERROR_FORMAT = "(%d, %d) - %s: %s" - # Compute column. # input is the input text string # lexpos is a lex position in token instance From bc6fb3e5f9894021659eabcce73e3d46227393a6 Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 26 Feb 2020 14:53:08 -0500 Subject: [PATCH 016/140] adding error node --- src/cl_ast/__init__.py | 1 + src/cl_ast/errorNode.py | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 src/cl_ast/errorNode.py diff --git a/src/cl_ast/__init__.py b/src/cl_ast/__init__.py index bc5a3271..3b6f17dd 100644 --- a/src/cl_ast/__init__.py +++ b/src/cl_ast/__init__.py @@ -1,6 +1,7 @@ from .astNode import ASTNode from .program import ProgramNode from .expressions.exprNode import ExpressionNode +from .errorNode import ErrorNode from .expressions.complex_exprs import * from .expressions.constant import * from .expressions.operations import * diff --git a/src/cl_ast/errorNode.py b/src/cl_ast/errorNode.py new file mode 100644 index 00000000..c6a097ca --- /dev/null +++ b/src/cl_ast/errorNode.py @@ -0,0 +1,4 @@ +from .astNode import ASTNode + +class ErrorNode(ASTNode): + pass \ No newline at end of file From 5c3fe55be631ad4a93133a06325cdbb58a147382 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Tue, 3 Mar 2020 12:34:07 -0500 Subject: [PATCH 017/140] update copyright --- src/coolc.sh | 4 ++-- src/tools/cmp_errors.py | 5 +++-- src/tools/semantic.py | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/coolc.sh b/src/coolc.sh index 30cee95d..a3f28c09 100755 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -4,8 +4,8 @@ INPUT_FILE=$1 #OUTPUT_FILE=${INPUT_FILE:0: -2}mips # Si su compilador no lo hace ya, aquí puede imprimir la información de contacto -echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas -echo "Copyright (c) 2019: Nombre1, Nombre2, Nombre3" # TODO: líneas a los valores correctos +echo "COOL Compiler v1.0" # TODO: Recuerde cambiar estas +echo "Copyright (c) 2020: Carlos, Oscar, Harold" # línea con info del compilador # Llamar al compilador #echo "Compiling $INPUT_FILE into $OUTPUT_FILE" diff --git a/src/tools/cmp_errors.py b/src/tools/cmp_errors.py index 0ebdd092..3401f4e5 100644 --- a/src/tools/cmp_errors.py +++ b/src/tools/cmp_errors.py @@ -54,7 +54,8 @@ def __init__(self, row, col, message): class TypeError(Error): def __init__(self, row, col, message): super().__init__(row, col, TYPE_ERR, message) - -class SemanticError(Error): + +# Base Semantic for others Errors, redefine constructor +class BaseSemanticError(Error): def __init__(self, row, col, message): super().__init__(row, col, SEMANTIC_ERR, message) \ No newline at end of file diff --git a/src/tools/semantic.py b/src/tools/semantic.py index 68057896..01447b6e 100644 --- a/src/tools/semantic.py +++ b/src/tools/semantic.py @@ -1,3 +1,5 @@ +""" Contains Context Structures and Definitons for Attr, Method and Types, """ + from tools.cmp_errors import * import itertools as itt From b428265a0c39975aade511378709ef00dd0e06ce Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sun, 29 Mar 2020 12:28:31 -0400 Subject: [PATCH 018/140] semantic structure and visitor templates --- src/main.py | 5 +- src/semantic/__init__.py | 7 + src/semantic/context.py | 102 +++++++++++++ src/semantic/error.py | 6 + src/semantic/features.py | 35 +++++ src/{tools/semantic.py => semantic/types.py} | 144 +------------------ src/visitors/__init__.py | 5 + src/visitors/format_visitor.py | 12 ++ src/visitors/type_builder.py | 14 ++ src/visitors/type_checker.py | 15 ++ src/visitors/type_collector.py | 14 ++ src/visitors/var_collector.py | 15 ++ 12 files changed, 231 insertions(+), 143 deletions(-) create mode 100644 src/semantic/__init__.py create mode 100644 src/semantic/context.py create mode 100644 src/semantic/error.py create mode 100644 src/semantic/features.py rename src/{tools/semantic.py => semantic/types.py} (52%) create mode 100644 src/visitors/__init__.py create mode 100644 src/visitors/format_visitor.py create mode 100644 src/visitors/type_builder.py create mode 100644 src/visitors/type_checker.py create mode 100644 src/visitors/type_collector.py create mode 100644 src/visitors/var_collector.py diff --git a/src/main.py b/src/main.py index e9d6fefd..90b601ac 100644 --- a/src/main.py +++ b/src/main.py @@ -1,7 +1,8 @@ +from pipeline import Pipeline from tools.reader import Reader from cl_lexer import CoolLexer from cl_parser import CoolParser -from pipeline import Pipeline +from semantic import * import sys @@ -18,6 +19,6 @@ def main(): if pipeline.pipeline_errors: exit(1) - + if __name__ == "__main__": main() \ No newline at end of file diff --git a/src/semantic/__init__.py b/src/semantic/__init__.py new file mode 100644 index 00000000..0904a791 --- /dev/null +++ b/src/semantic/__init__.py @@ -0,0 +1,7 @@ +from tools.cmp_errors import * +from .error import * +import itertools as itt + +from .context import * +from .features import * +from .types import * \ No newline at end of file diff --git a/src/semantic/context.py b/src/semantic/context.py new file mode 100644 index 00000000..0f2a8a4e --- /dev/null +++ b/src/semantic/context.py @@ -0,0 +1,102 @@ +"""Contains Context Structures""" + +from .types import * +from .error import SemanticError + +class Context: + def __init__(self): + self.types = {} + + def create_type(self, name:str): + if name in self.types: + raise SemanticError(f'Type with the same name ({name}) already in context.') + typex = self.types[name] = Type(name) + return typex + + def get_type(self, name:str): + try: + return self.types[name] + except KeyError: + raise SemanticError(f'Type "{name}" is not defined.') + + def __str__(self): + return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' + + def __repr__(self): + return str(self) + +class VariableInfo: + def __init__(self, name, vtype): + self.name = name + self.type = vtype + + def __str__(self): + return f'{self.name} : {self.type.name}' + + def __repr__(self): + return str(self) + +class Scope: + def __init__(self, parent=None): + self.locals = [] + self.parent = parent + self.children = [] + self.expr_dict = { } + self.functions = { } + self.index = 0 if parent is None else len(parent) + + def __len__(self): + return len(self.locals) + + def __str__(self): + res = '' + for scope in self.children: + try: + classx = scope.locals[0] + name = classx.type.name + except: + name = '1' + res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' + return res + + def tab_level(self, tabs, name, num): + res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) + if self.functions: + children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) + else: + children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) + return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' + + def __repr__(self): + return str(self) + + def create_child(self): + child = Scope(self) + self.children.append(child) + return child + + def define_variable(self, vname, vtype): + info = VariableInfo(vname, vtype) + self.locals.append(info) + return info + + def define_attribute(self, attr): + self.locals.append(attr) + + def find_variable(self, vname, index=None): + locals = self.locals if index is None else itt.islice(self.locals, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_variable(vname, self.index) if self.parent else None + + def get_class_scope(self): + if self.parent == None or self.parent.parent == None: + return self + return self.parent.get_class_scope() + + def is_defined(self, vname): + return self.find_variable(vname) is not None + + def is_local(self, vname): + return any(True for x in self.locals if x.name == vname) \ No newline at end of file diff --git a/src/semantic/error.py b/src/semantic/error.py new file mode 100644 index 00000000..bbc6188b --- /dev/null +++ b/src/semantic/error.py @@ -0,0 +1,6 @@ +""" Defines the base Semantic Error reported in Visitors """ + +class SemanticError(Exception): + @property + def text(self): + return self.args[0] \ No newline at end of file diff --git a/src/semantic/features.py b/src/semantic/features.py new file mode 100644 index 00000000..24f1f50d --- /dev/null +++ b/src/semantic/features.py @@ -0,0 +1,35 @@ +""" Contains Definitions for Features in COOL (Attr and Method) """ + +class Attribute: + def __init__(self, name, typex): + self.name = name + self.type = typex + + def __str__(self): + return f'[attrib] {self.name} : {self.type.name};' + + def __repr__(self): + return str(self) + +class Method: + def __init__(self, name, param_names, params_types, return_type): + self.name = name + self.param_names = param_names + self.param_types = params_types + self.return_type = return_type + + def __str__(self): + params = ', '.join(f'{n}:{t.name}' for n,t in zip(self.param_names, self.param_types)) + return f'[method] {self.name}({params}): {self.return_type.name};' + + def __eq__(self, other): + return other.name == self.name and \ + other.return_type == self.return_type and \ + other.param_types == self.param_types + +class MethodError(Method): + def __init__(self, name, param_names, param_types, return_types): + super().__init__(name, param_names, param_types, return_types) + + def __str__(self): + return f'[method] {self.name} ERROR' \ No newline at end of file diff --git a/src/tools/semantic.py b/src/semantic/types.py similarity index 52% rename from src/tools/semantic.py rename to src/semantic/types.py index 01447b6e..1e0a09f2 100644 --- a/src/tools/semantic.py +++ b/src/semantic/types.py @@ -1,46 +1,6 @@ -""" Contains Context Structures and Definitons for Attr, Method and Types, """ +"""Contains Definitions for Semantic Types""" -from tools.cmp_errors import * -import itertools as itt - -class SemanticError(Exception): - @property - def text(self): - return self.args[0] - -class Attribute: - def __init__(self, name, typex): - self.name = name - self.type = typex - - def __str__(self): - return f'[attrib] {self.name} : {self.type.name};' - - def __repr__(self): - return str(self) - -class Method: - def __init__(self, name, param_names, params_types, return_type): - self.name = name - self.param_names = param_names - self.param_types = params_types - self.return_type = return_type - - def __str__(self): - params = ', '.join(f'{n}:{t.name}' for n,t in zip(self.param_names, self.param_types)) - return f'[method] {self.name}({params}): {self.return_type.name};' - - def __eq__(self, other): - return other.name == self.name and \ - other.return_type == self.return_type and \ - other.param_types == self.param_types - -class MethodError(Method): - def __init__(self, name, param_names, param_types, return_types): - super().__init__(name, param_names, param_types, return_types) - - def __str__(self): - return f'[method] {self.name} ERROR' +from .error import SemanticError class Type: def __init__(self, name:str): @@ -195,102 +155,4 @@ def __eq__(self, other): return other.name == self.name or isinstance(other, ObjectType) def __ne__(self, other): - return other.name != self.name and not isinstance(other, ObjectType) - -class Context: - def __init__(self): - self.types = {} - - def create_type(self, name:str): - if name in self.types: - raise SemanticError(f'Type with the same name ({name}) already in context.') - typex = self.types[name] = Type(name) - return typex - - def get_type(self, name:str): - try: - return self.types[name] - except KeyError: - raise SemanticError(f'Type "{name}" is not defined.') - - def __str__(self): - return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' - - def __repr__(self): - return str(self) - -class VariableInfo: - def __init__(self, name, vtype): - self.name = name - self.type = vtype - - def __str__(self): - return f'{self.name} : {self.type.name}' - - def __repr__(self): - return str(self) - -class Scope: - def __init__(self, parent=None): - self.locals = [] - self.parent = parent - self.children = [] - self.expr_dict = { } - self.functions = { } - self.index = 0 if parent is None else len(parent) - - def __len__(self): - return len(self.locals) - - def __str__(self): - res = '' - for scope in self.children: - try: - classx = scope.locals[0] - name = classx.type.name - except: - name = '1' - res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' - return res - - def tab_level(self, tabs, name, num): - res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) - if self.functions: - children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) - else: - children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) - return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' - - def __repr__(self): - return str(self) - - def create_child(self): - child = Scope(self) - self.children.append(child) - return child - - def define_variable(self, vname, vtype): - info = VariableInfo(vname, vtype) - self.locals.append(info) - return info - - def define_attribute(self, attr): - self.locals.append(attr) - - def find_variable(self, vname, index=None): - locals = self.locals if index is None else itt.islice(self.locals, index) - try: - return next(x for x in locals if x.name == vname) - except StopIteration: - return self.parent.find_variable(vname, self.index) if self.parent else None - - def get_class_scope(self): - if self.parent == None or self.parent.parent == None: - return self - return self.parent.get_class_scope() - - def is_defined(self, vname): - return self.find_variable(vname) is not None - - def is_local(self, vname): - return any(True for x in self.locals if x.name == vname) \ No newline at end of file + return other.name != self.name and not isinstance(other, ObjectType) \ No newline at end of file diff --git a/src/visitors/__init__.py b/src/visitors/__init__.py new file mode 100644 index 00000000..cebd2dd9 --- /dev/null +++ b/src/visitors/__init__.py @@ -0,0 +1,5 @@ +from .format_visitor import FormatVisitor +from .type_builder import TypeBuilder +from .type_checker import TypeChecker +from .type_collector import TypeCollector +from .var_collector import VarCollector \ No newline at end of file diff --git a/src/visitors/format_visitor.py b/src/visitors/format_visitor.py new file mode 100644 index 00000000..342fc730 --- /dev/null +++ b/src/visitors/format_visitor.py @@ -0,0 +1,12 @@ +import visitor +from pipeline import State +from src.cl_ast import * + +class FormatVisitor(State): + def __init__(self): + pass + + def run(self, inputx): + pass + + # Visit Node Functions \ No newline at end of file diff --git a/src/visitors/type_builder.py b/src/visitors/type_builder.py new file mode 100644 index 00000000..e40ec81b --- /dev/null +++ b/src/visitors/type_builder.py @@ -0,0 +1,14 @@ +from semantic import * + +import visitor +from pipeline import State +from src.cl_ast import * + +class TypeBuilder(State): + def __init__(self): + self.context = None + self.current_type = None + + def run(self, inputx): + # ast, context = inputx + pass \ No newline at end of file diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py new file mode 100644 index 00000000..7c2fa90e --- /dev/null +++ b/src/visitors/type_checker.py @@ -0,0 +1,15 @@ +from semantic import * + +import visitor +from pipeline import State +from src.cl_ast import * + +class TypeChecker(State): + def __init__(self): + self.context = None + self.current_type = None + self.current_method = None + + def run(self, inputx): + # ast, context = inputx + pass \ No newline at end of file diff --git a/src/visitors/type_collector.py b/src/visitors/type_collector.py new file mode 100644 index 00000000..79c89ac5 --- /dev/null +++ b/src/visitors/type_collector.py @@ -0,0 +1,14 @@ +from semantic import * + +import visitor +from pipeline import State +from src.cl_ast import * + +class TypeCollector(State): + def __init__(self): + self.context = None + + def run(self, inputx): + pass + + # Visit Node Functions \ No newline at end of file diff --git a/src/visitors/var_collector.py b/src/visitors/var_collector.py new file mode 100644 index 00000000..1bbfe7c7 --- /dev/null +++ b/src/visitors/var_collector.py @@ -0,0 +1,15 @@ +from semantic import * + +import visitor +from pipeline import State +from src.cl_ast import * + +class VarCollector(State): + def __init__(self): + self.context = None + self.current_type = None + self.current_method = None + + def run(self, inputx): + # ast, context = inputx + pass \ No newline at end of file From c8006025630f1ce88555c6223ab0faed771f5eb0 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Wed, 6 May 2020 01:26:03 -0400 Subject: [PATCH 019/140] solving import errors and including first format visitor version --- src/ast.txt | 451 ++++++++++++++++++++++++ src/cl_ast/expressions/complex_exprs.py | 1 + src/cl_ast/expressions/constant.py | 1 - src/main.py | 3 +- src/pipeline/pipeline.py | 4 +- src/semantic/types.py | 4 +- src/visitors/format_visitor.py | 148 +++++++- src/visitors/type_builder.py | 4 +- src/visitors/type_checker.py | 4 +- src/visitors/type_collector.py | 4 +- src/visitors/var_collector.py | 4 +- 11 files changed, 607 insertions(+), 21 deletions(-) create mode 100644 src/ast.txt diff --git a/src/ast.txt b/src/ast.txt new file mode 100644 index 00000000..0137b8f1 --- /dev/null +++ b/src/ast.txt @@ -0,0 +1,451 @@ +\__ProgramNode [ ... ] + \__ClassDeclarationNode: class Graph { ... } + \__AttrDeclarationNode: vertices : VList + \__AttrDeclarationNode: edges : EList + \__FuncDeclarationNode: add_vertice(v:Vertice) : Object -> + \__ BlockNode { } + \__AssignNode: edges <- + \__ExprCallNode: .append(, ..., ) + \__ExprCallNode: .outgoing(, ..., ) + \__ VarAccessNode: v + + \__ VarAccessNode: edges + \__AssignNode: vertices <- + \__ExprCallNode: .cons(, ..., ) + \__ VarAccessNode: vertices + \__ VarAccessNode: v + \__FuncDeclarationNode: print_E() : Object -> + \__ExprCallNode: .print(, ..., ) + \__ VarAccessNode: edges + + \__FuncDeclarationNode: print_V() : Object -> + \__ExprCallNode: .print(, ..., ) + \__ VarAccessNode: vertices + + \__ClassDeclarationNode: class Vertice : IO { ... } + \__AttrDeclarationNode: num : Int + \__AttrDeclarationNode: out : EList + \__FuncDeclarationNode: outgoing() : EList -> + \__ VarAccessNode: out + \__FuncDeclarationNode: number() : Int -> + \__ VarAccessNode: num + \__FuncDeclarationNode: init(n:Int) : Vertice -> + \__ BlockNode { } + \__AssignNode: num <- + \__ VarAccessNode: n + \__ VarAccessNode: self + \__FuncDeclarationNode: add_out(s:Edge) : Vertice -> + \__ BlockNode { } + \__AssignNode: out <- + \__ExprCallNode: .cons(, ..., ) + \__ VarAccessNode: out + \__ VarAccessNode: s + \__ VarAccessNode: self + \__FuncDeclarationNode: print() : Object -> + \__ BlockNode { } + \__SelfCallNode: out_int(, ..., ) + \__ VarAccessNode: num + \__ExprCallNode: .print(, ..., ) + \__ VarAccessNode: out + + \__ClassDeclarationNode: class Edge : IO { ... } + \__AttrDeclarationNode: from : Int + \__AttrDeclarationNode: to : Int + \__AttrDeclarationNode: weight : Int + \__FuncDeclarationNode: init(f:Int, t:Int, w:Int) : Edge -> + \__ BlockNode { } + \__AssignNode: from <- + \__ VarAccessNode: f + \__AssignNode: to <- + \__ VarAccessNode: t + \__AssignNode: weight <- + \__ VarAccessNode: w + \__ VarAccessNode: self + \__FuncDeclarationNode: print() : Object -> + \__ BlockNode { } + \__SelfCallNode: out_string(, ..., ) + \__ StringNode: ( + \__SelfCallNode: out_int(, ..., ) + \__ VarAccessNode: from + \__SelfCallNode: out_string(, ..., ) + \__ StringNode: , + \__SelfCallNode: out_int(, ..., ) + \__ VarAccessNode: to + \__SelfCallNode: out_string(, ..., ) + \__ StringNode: ) + \__SelfCallNode: out_int(, ..., ) + \__ VarAccessNode: weight + \__ClassDeclarationNode: class EList : IO { ... } + \__AttrDeclarationNode: car : Edge + \__FuncDeclarationNode: isNil() : Bool -> + \__ BoolNode: True + \__FuncDeclarationNode: head() : Edge -> + \__ BlockNode { } + \__SelfCallNode: abort(, ..., ) + + \__ VarAccessNode: car + \__FuncDeclarationNode: tail() : EList -> + \__ BlockNode { } + \__SelfCallNode: abort(, ..., ) + + \__ VarAccessNode: self + \__FuncDeclarationNode: cons(e:Edge) : EList -> + \__ExprCallNode: .init(, ..., ) + \__ InstantiateNode: new ECons() + \__ VarAccessNode: e + \__ VarAccessNode: self + \__FuncDeclarationNode: append(l:EList) : EList -> + \__ ConditionalNode: if then else fi + \__ExprCallNode: .isNil(, ..., ) + \__ VarAccessNode: self + + \__ VarAccessNode: l + \__ExprCallNode: .cons(, ..., ) + \__ExprCallNode: .append(, ..., ) + \__SelfCallNode: tail(, ..., ) + + \__ VarAccessNode: l + \__SelfCallNode: head(, ..., ) + + \__FuncDeclarationNode: print() : Object -> + \__SelfCallNode: out_string(, ..., ) + \__ StringNode: \n + \__ClassDeclarationNode: class ECons : EList { ... } + \__AttrDeclarationNode: cdr : EList + \__FuncDeclarationNode: isNil() : Bool -> + \__ BoolNode: False + \__FuncDeclarationNode: head() : Edge -> + \__ VarAccessNode: car + \__FuncDeclarationNode: tail() : EList -> + \__ VarAccessNode: cdr + \__FuncDeclarationNode: init(e:Edge, rest:EList) : EList -> + \__ BlockNode { } + \__AssignNode: car <- + \__ VarAccessNode: e + \__AssignNode: cdr <- + \__ VarAccessNode: rest + \__ VarAccessNode: self + \__FuncDeclarationNode: print() : Object -> + \__ BlockNode { } + \__ExprCallNode: .print(, ..., ) + \__ VarAccessNode: car + + \__ExprCallNode: .print(, ..., ) + \__ VarAccessNode: cdr + + \__ClassDeclarationNode: class VList : IO { ... } + \__AttrDeclarationNode: car : Vertice + \__FuncDeclarationNode: isNil() : Bool -> + \__ BoolNode: True + \__FuncDeclarationNode: head() : Vertice -> + \__ BlockNode { } + \__SelfCallNode: abort(, ..., ) + + \__ VarAccessNode: car + \__FuncDeclarationNode: tail() : VList -> + \__ BlockNode { } + \__SelfCallNode: abort(, ..., ) + + \__ VarAccessNode: self + \__FuncDeclarationNode: cons(v:Vertice) : VList -> + \__ExprCallNode: .init(, ..., ) + \__ InstantiateNode: new VCons() + \__ VarAccessNode: v + \__ VarAccessNode: self + \__FuncDeclarationNode: print() : Object -> + \__SelfCallNode: out_string(, ..., ) + \__ StringNode: \n + \__ClassDeclarationNode: class VCons : VList { ... } + \__AttrDeclarationNode: cdr : VList + \__FuncDeclarationNode: isNil() : Bool -> + \__ BoolNode: False + \__FuncDeclarationNode: head() : Vertice -> + \__ VarAccessNode: car + \__FuncDeclarationNode: tail() : VList -> + \__ VarAccessNode: cdr + \__FuncDeclarationNode: init(v:Vertice, rest:VList) : VList -> + \__ BlockNode { } + \__AssignNode: car <- + \__ VarAccessNode: v + \__AssignNode: cdr <- + \__ VarAccessNode: rest + \__ VarAccessNode: self + \__FuncDeclarationNode: print() : Object -> + \__ BlockNode { } + \__ExprCallNode: .print(, ..., ) + \__ VarAccessNode: car + + \__ExprCallNode: .print(, ..., ) + \__ VarAccessNode: cdr + + \__ClassDeclarationNode: class Parse : IO { ... } + \__AttrDeclarationNode: boolop : BoolOp + \__FuncDeclarationNode: read_input() : Graph -> + \__ LetNode let in + \__VarDeclarationNode: g : Graph = + \__ InstantiateNode: new Graph() + \__ BlockNode { } + \__ LetNode let in + \__VarDeclarationNode: line : String = + \__SelfCallNode: in_string(, ..., ) + + \__WhileNode: while loop pool + \__ExprCallNode: .and(, ..., ) + \__ VarAccessNode: boolop + \__ EqualNode + \__NotNode + \__ VarAccessNode: line + \__ StringNode: \n + \__ EqualNode + \__NotNode + \__ VarAccessNode: line + \__ StringNode: + \__ BlockNode { } + \__ExprCallNode: .add_vertice(, ..., ) + \__ VarAccessNode: g + \__SelfCallNode: parse_line(, ..., ) + \__ VarAccessNode: line + \__AssignNode: line <- + \__SelfCallNode: in_string(, ..., ) + + \__ VarAccessNode: g + \__FuncDeclarationNode: parse_line(s:String) : Vertice -> + \__ LetNode let in + \__VarDeclarationNode: v : Vertice = + \__ExprCallNode: .init(, ..., ) + \__ InstantiateNode: new Vertice() + \__SelfCallNode: a2i(, ..., ) + \__ VarAccessNode: s + \__ BlockNode { } + \__WhileNode: while loop pool + \__ EqualNode + \__NotNode + \__ExprCallNode: .length(, ..., ) + \__ VarAccessNode: rest + + \__ IntegerNode: 0 + \__ BlockNode { } + \__ LetNode let in + \__VarDeclarationNode: succ : Int = + \__SelfCallNode: a2i(, ..., ) + \__ VarAccessNode: rest + \__ LetNode let in + \__VarDeclarationNode: weight : Int = + \__SelfCallNode: a2i(, ..., ) + \__ VarAccessNode: rest + \__ExprCallNode: .add_out(, ..., ) + \__ VarAccessNode: v + \__ExprCallNode: .init(, ..., ) + \__ InstantiateNode: new Edge() + \__ExprCallNode: .number(, ..., ) + \__ VarAccessNode: v + + \__ VarAccessNode: succ + \__ VarAccessNode: weight + \__ VarAccessNode: v + \__FuncDeclarationNode: c2i(char:String) : Int -> + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 0 + \__ IntegerNode: 0 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 1 + \__ IntegerNode: 1 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 2 + \__ IntegerNode: 2 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 3 + \__ IntegerNode: 3 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 4 + \__ IntegerNode: 4 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 5 + \__ IntegerNode: 5 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 6 + \__ IntegerNode: 6 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 7 + \__ IntegerNode: 7 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 8 + \__ IntegerNode: 8 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: char + \__ StringNode: 9 + \__ IntegerNode: 9 + \__ BlockNode { } + \__SelfCallNode: abort(, ..., ) + + \__ IntegerNode: 0 + \__AttrDeclarationNode: rest : String + \__FuncDeclarationNode: a2i(s:String) : Int -> + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ExprCallNode: .length(, ..., ) + \__ VarAccessNode: s + + \__ IntegerNode: 0 + \__ IntegerNode: 0 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ExprCallNode: .substr(, ..., ) + \__ VarAccessNode: s + \__ IntegerNode: 0 + \__ IntegerNode: 1 + \__ StringNode: - + \__BitNotNode + \__SelfCallNode: a2i_aux(, ..., ) + \__ExprCallNode: .substr(, ..., ) + \__ VarAccessNode: s + \__ IntegerNode: 1 + \__ DiffNode + \__ExprCallNode: .length(, ..., ) + \__ VarAccessNode: s + + \__ IntegerNode: 1 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ExprCallNode: .substr(, ..., ) + \__ VarAccessNode: s + \__ IntegerNode: 0 + \__ IntegerNode: 1 + \__ StringNode: + \__SelfCallNode: a2i(, ..., ) + \__ExprCallNode: .substr(, ..., ) + \__ VarAccessNode: s + \__ IntegerNode: 1 + \__ DiffNode + \__ExprCallNode: .length(, ..., ) + \__ VarAccessNode: s + + \__ IntegerNode: 1 + \__SelfCallNode: a2i_aux(, ..., ) + \__ VarAccessNode: s + \__FuncDeclarationNode: a2i_aux(s:String) : Int -> + \__ LetNode let in + \__VarDeclarationNode: int : Int = + \__ IntegerNode: 0 + \__ BlockNode { } + \__ LetNode let in + \__VarDeclarationNode: j : Int = + \__ExprCallNode: .length(, ..., ) + \__ VarAccessNode: s + + \__ LetNode let in + \__VarDeclarationNode: i : Int = + \__ IntegerNode: 0 + \__WhileNode: while loop pool + \__ LessNode + \__ VarAccessNode: i + \__ VarAccessNode: j + \__ LetNode let in + \__VarDeclarationNode: c : String = + \__ExprCallNode: .substr(, ..., ) + \__ VarAccessNode: s + \__ VarAccessNode: i + \__ IntegerNode: 1 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: c + \__ StringNode: + \__ BlockNode { } + \__AssignNode: rest <- + \__ExprCallNode: .substr(, ..., ) + \__ VarAccessNode: s + \__ SumNode + \__ VarAccessNode: i + \__ IntegerNode: 1 + \__ DiffNode + \__ DiffNode + \__ExprCallNode: .length(, ..., ) + \__ VarAccessNode: s + + \__ VarAccessNode: i + \__ IntegerNode: 1 + \__AssignNode: i <- + \__ VarAccessNode: j + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: c + \__ StringNode: , + \__ BlockNode { } + \__AssignNode: rest <- + \__ExprCallNode: .substr(, ..., ) + \__ VarAccessNode: s + \__ SumNode + \__ VarAccessNode: i + \__ IntegerNode: 1 + \__ DiffNode + \__ DiffNode + \__ExprCallNode: .length(, ..., ) + \__ VarAccessNode: s + + \__ VarAccessNode: i + \__ IntegerNode: 1 + \__AssignNode: i <- + \__ VarAccessNode: j + \__ BlockNode { } + \__AssignNode: int <- + \__ StarNode + \__ VarAccessNode: int + \__ SumNode + \__ IntegerNode: 10 + \__SelfCallNode: c2i(, ..., ) + \__ExprCallNode: .substr(, ..., ) + \__ VarAccessNode: s + \__ VarAccessNode: i + \__ IntegerNode: 1 + \__AssignNode: i <- + \__ SumNode + \__ VarAccessNode: i + \__ IntegerNode: 1 + \__ ConditionalNode: if then else fi + \__ EqualNode + \__ VarAccessNode: i + \__ VarAccessNode: j + \__AssignNode: rest <- + \__ StringNode: + \__ StringNode: + \__ VarAccessNode: int + \__ClassDeclarationNode: class Main : Parse { ... } + \__AttrDeclarationNode: g : Graph + \__FuncDeclarationNode: main() : Object -> + \__ BlockNode { } + \__ExprCallNode: .print_V(, ..., ) + \__ VarAccessNode: g + + \__ExprCallNode: .print_E(, ..., ) + \__ VarAccessNode: g + + \__ClassDeclarationNode: class BoolOp { ... } + \__FuncDeclarationNode: and(b1:Bool, b2:Bool) : Bool -> + \__ ConditionalNode: if then else fi + \__ VarAccessNode: b1 + \__ VarAccessNode: b2 + \__ BoolNode: False + \__FuncDeclarationNode: or(b1:Bool, b2:Bool) : Bool -> + \__ ConditionalNode: if then else fi + \__ VarAccessNode: b1 + \__ BoolNode: True + \__ VarAccessNode: b2 \ No newline at end of file diff --git a/src/cl_ast/expressions/complex_exprs.py b/src/cl_ast/expressions/complex_exprs.py index 3f342226..2a52b055 100644 --- a/src/cl_ast/expressions/complex_exprs.py +++ b/src/cl_ast/expressions/complex_exprs.py @@ -50,6 +50,7 @@ def __hash__(self): return id(self) class OptionNode(ExpressionNode): + def __init__(self, idx, typex, expr): self.id = idx self.typex = typex diff --git a/src/cl_ast/expressions/constant.py b/src/cl_ast/expressions/constant.py index 3f47a630..8943b241 100644 --- a/src/cl_ast/expressions/constant.py +++ b/src/cl_ast/expressions/constant.py @@ -1,7 +1,6 @@ from .exprNode import ExpressionNode class ConstantNode(ExpressionNode): - def __init__(self, lex): self.lex = lex diff --git a/src/main.py b/src/main.py index 90b601ac..82a31422 100644 --- a/src/main.py +++ b/src/main.py @@ -2,7 +2,7 @@ from tools.reader import Reader from cl_lexer import CoolLexer from cl_parser import CoolParser -from semantic import * +from visitors import * import sys @@ -13,6 +13,7 @@ def main(): pipeline.submit_state(Reader('Reader')) pipeline.submit_state(CoolParser('Parser')) + pipeline.submit_state(FormatVisitor('Formatter', './ast.txt')) pipeline.run_pipeline(program) pipeline.report_errors() diff --git a/src/pipeline/pipeline.py b/src/pipeline/pipeline.py index 032e68d8..317a52ef 100644 --- a/src/pipeline/pipeline.py +++ b/src/pipeline/pipeline.py @@ -15,8 +15,8 @@ def run_pipeline(self, inputx): if state.stop: break - # collect errors from current state - self.pipeline_errors += state.errors + # collect errors from current state + self.pipeline_errors += state.errors return res diff --git a/src/semantic/types.py b/src/semantic/types.py index 1e0a09f2..db17199d 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -85,7 +85,7 @@ def __repr__(self): class ErrorType(Type): def __init__(self): - Type.__init__(self, '') + Type.__init__(self, '') def conforms_to(self, other): return True @@ -101,7 +101,7 @@ def __ne__(self, other): class VoidType(Type): def __init__(self): - Type.__init__(self, '') + Type.__init__(self, 'Void') def conforms_to(self, other): raise Exception('Invalid type: void type.') diff --git a/src/visitors/format_visitor.py b/src/visitors/format_visitor.py index 342fc730..8f2900cc 100644 --- a/src/visitors/format_visitor.py +++ b/src/visitors/format_visitor.py @@ -1,12 +1,146 @@ -import visitor +import visitors.visitor as visitor from pipeline import State -from src.cl_ast import * +from cl_ast import * class FormatVisitor(State): - def __init__(self): - pass + def __init__(self, sname, fname): + super().__init__(sname) + self.fname = fname - def run(self, inputx): - pass + def run(self, ast): + printed_ast = self.visit(ast) + f = open(self.fname, 'w') + f.write(printed_ast) + f.close() + return ast - # Visit Node Functions \ No newline at end of file + # Visitor for each node + + @visitor.on('node') + def visit(self, node, tabs): + ans = '\t' * tabs + f'\\__{node.__class__.__name__}' + return ans + + @visitor.when(ProgramNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ProgramNode [ ... ]' + statements = '\n'.join(self.visit(child, tabs + 1) for child in node.declarations) + return f'{ans}\n{statements}' + + @visitor.when(ClassDeclarationNode) + def visit(self, node, tabs=0): + parent = '' if node.parent is None else f": {node.parent}" + ans = '\t' * tabs + f'\\__ClassDeclarationNode: class {node.id} {parent} {{ ... }}' + features = '\n'.join(self.visit(child, tabs + 1) for child in node.features) + return f'{ans}\n{features}' + + @visitor.when(AttrDeclarationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__AttrDeclarationNode: {node.id} : {node.type}' + return f'{ans}' + + @visitor.when(VarDeclarationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__VarDeclarationNode: {node.id} : {node.type} = ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(FuncDeclarationNode) + def visit(self, node, tabs=0): + params = ', '.join(':'.join(param) for param in node.params) + ans = '\t' * tabs + f'\\__FuncDeclarationNode: {node.id}({params}) : {node.type} -> ' + body = f'{self.visit(node.body, tabs + 1)}' + # body = f'\n{self.visit(node.body, tabs + 1)}'.join(self.visit(child, tabs + 1) for child in node.body) + return f'{ans}\n{body}' + + @visitor.when(ConstantNode) + def visit(self, node, tabs=0): + return '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.lex}' + + @visitor.when(BinaryOperationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + left = self.visit(node.left, tabs + 1) + right = self.visit(node.right, tabs + 1) + return f'{ans}\n{left}\n{right}' + + @visitor.when(UnaryOperationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__{node.__class__.__name__} ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(AssignNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__AssignNode: {node.id} <- ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(WhileNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__{node.__class__.__name__}: while loop pool' + cond = self.visit(node.cond, tabs + 1) + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{cond}\n{expr}' + + @visitor.when(ConditionalNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: if then else fi' + cond = self.visit(node.cond, tabs + 1) + stm = self.visit(node.stm, tabs + 1) + else_stm = self.visit(node.else_stm, tabs + 1) + return f'{ans}\n{cond}\n{stm}\n{else_stm}' + + @visitor.when(CaseNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: case of esac' + expr = self.visit(node.expr, tabs + 1) + case_list = '\n'.join(self.visit(child, tabs + 1) for child in node.case_list) + return f'{ans}\n{expr}\n{case_list}' + + @visitor.when(OptionNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.id} : {node.typex} -> ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(BlockNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + '{ }' + expr = '\n'.join(self.visit(child, tabs + 1) for child in node.expr_list) + return f'{ans}\n{expr}' + + @visitor.when(NewNode) + def visit(self, node, tabs=0): + return '\t' * tabs + f'\\__ InstantiateNode: new {node.type}()' + + @visitor.when(VariableNode) + def visit(self, node, tabs=0): + return '\t' * tabs + f'\\__ VarAccessNode: {node.id}' + + @visitor.when(LetNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} let in ' + init_list = '\n'.join(self.visit(arg, tabs + 1) for arg in node.init_list) + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{init_list}\n{expr}' + + @visitor.when(ParentCallNode) + def visit(self, node, tabs=0): + obj = self.visit(node.obj, tabs + 1) + ans = '\t' * tabs + f'\\__ParentCallNode: @{node.type}.{node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{obj}\n{args}' + + @visitor.when(ExprCallNode) + def visit(self, node, tabs=0): + obj = self.visit(node.obj, tabs + 1) + ans = '\t' * tabs + f'\\__ExprCallNode: .{node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{obj}\n{args}' + + @visitor.when(SelfCallNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__SelfCallNode: {node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{args}' \ No newline at end of file diff --git a/src/visitors/type_builder.py b/src/visitors/type_builder.py index e40ec81b..41db10e5 100644 --- a/src/visitors/type_builder.py +++ b/src/visitors/type_builder.py @@ -1,8 +1,8 @@ from semantic import * -import visitor +import visitors.visitor as visitor from pipeline import State -from src.cl_ast import * +from cl_ast import * class TypeBuilder(State): def __init__(self): diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py index 7c2fa90e..16126682 100644 --- a/src/visitors/type_checker.py +++ b/src/visitors/type_checker.py @@ -1,8 +1,8 @@ from semantic import * -import visitor +import visitors.visitor as visitor from pipeline import State -from src.cl_ast import * +from cl_ast import * class TypeChecker(State): def __init__(self): diff --git a/src/visitors/type_collector.py b/src/visitors/type_collector.py index 79c89ac5..d6c54ed0 100644 --- a/src/visitors/type_collector.py +++ b/src/visitors/type_collector.py @@ -1,8 +1,8 @@ from semantic import * -import visitor +import visitors.visitor as visitor from pipeline import State -from src.cl_ast import * +from cl_ast import * class TypeCollector(State): def __init__(self): diff --git a/src/visitors/var_collector.py b/src/visitors/var_collector.py index 1bbfe7c7..fc82cfa8 100644 --- a/src/visitors/var_collector.py +++ b/src/visitors/var_collector.py @@ -1,8 +1,8 @@ from semantic import * -import visitor +import visitors.visitor as visitor from pipeline import State -from src.cl_ast import * +from cl_ast import * class VarCollector(State): def __init__(self): From ab0f10ac25b6db9aca1a5429638a133794b8c24b Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Wed, 3 Jun 2020 17:51:01 -0400 Subject: [PATCH 020/140] update gitignore with code config folder --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 4acafde1..6f52d264 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ # Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python # Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python +# VCode Settings +.vscode + ### LaTeX ### ## Core latex/pdflatex auxiliary files: *.aux From 4d4bcbece1e04e5742ee51a2d9a6cf5f4f3fadb1 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Wed, 3 Jun 2020 17:51:56 -0400 Subject: [PATCH 021/140] fixing ast abstract nodes and include first visitors code --- src/ast.txt | 467 ++---------------------- src/cl_ast/declarations.py | 13 +- src/cl_ast/expressions/complex_exprs.py | 4 + src/cl_ast/expressions/operations.py | 57 +-- src/main.py | 10 +- src/semantic/context.py | 4 +- src/semantic/types.py | 11 + src/visitors/format_visitor.py | 2 +- src/visitors/type_builder.py | 79 +++- src/visitors/type_checker.py | 308 +++++++++++++++- src/visitors/type_collector.py | 30 +- src/visitors/var_collector.py | 160 +++++++- 12 files changed, 651 insertions(+), 494 deletions(-) diff --git a/src/ast.txt b/src/ast.txt index 0137b8f1..d7fb85ec 100644 --- a/src/ast.txt +++ b/src/ast.txt @@ -1,451 +1,40 @@ \__ProgramNode [ ... ] - \__ClassDeclarationNode: class Graph { ... } - \__AttrDeclarationNode: vertices : VList - \__AttrDeclarationNode: edges : EList - \__FuncDeclarationNode: add_vertice(v:Vertice) : Object -> - \__ BlockNode { } - \__AssignNode: edges <- - \__ExprCallNode: .append(, ..., ) - \__ExprCallNode: .outgoing(, ..., ) - \__ VarAccessNode: v - - \__ VarAccessNode: edges - \__AssignNode: vertices <- - \__ExprCallNode: .cons(, ..., ) - \__ VarAccessNode: vertices - \__ VarAccessNode: v - \__FuncDeclarationNode: print_E() : Object -> - \__ExprCallNode: .print(, ..., ) - \__ VarAccessNode: edges - - \__FuncDeclarationNode: print_V() : Object -> - \__ExprCallNode: .print(, ..., ) - \__ VarAccessNode: vertices - - \__ClassDeclarationNode: class Vertice : IO { ... } - \__AttrDeclarationNode: num : Int - \__AttrDeclarationNode: out : EList - \__FuncDeclarationNode: outgoing() : EList -> - \__ VarAccessNode: out - \__FuncDeclarationNode: number() : Int -> - \__ VarAccessNode: num - \__FuncDeclarationNode: init(n:Int) : Vertice -> - \__ BlockNode { } - \__AssignNode: num <- - \__ VarAccessNode: n - \__ VarAccessNode: self - \__FuncDeclarationNode: add_out(s:Edge) : Vertice -> - \__ BlockNode { } - \__AssignNode: out <- - \__ExprCallNode: .cons(, ..., ) - \__ VarAccessNode: out - \__ VarAccessNode: s - \__ VarAccessNode: self - \__FuncDeclarationNode: print() : Object -> - \__ BlockNode { } - \__SelfCallNode: out_int(, ..., ) - \__ VarAccessNode: num - \__ExprCallNode: .print(, ..., ) - \__ VarAccessNode: out - - \__ClassDeclarationNode: class Edge : IO { ... } - \__AttrDeclarationNode: from : Int - \__AttrDeclarationNode: to : Int - \__AttrDeclarationNode: weight : Int - \__FuncDeclarationNode: init(f:Int, t:Int, w:Int) : Edge -> - \__ BlockNode { } - \__AssignNode: from <- - \__ VarAccessNode: f - \__AssignNode: to <- - \__ VarAccessNode: t - \__AssignNode: weight <- - \__ VarAccessNode: w - \__ VarAccessNode: self - \__FuncDeclarationNode: print() : Object -> + \__ClassDeclarationNode: class Main : IO { ... } + \__FuncDeclarationNode: main() : Object -> \__ BlockNode { } \__SelfCallNode: out_string(, ..., ) - \__ StringNode: ( - \__SelfCallNode: out_int(, ..., ) - \__ VarAccessNode: from - \__SelfCallNode: out_string(, ..., ) - \__ StringNode: , + \__ StringNode: Enter n to find nth fibonacci number!\n \__SelfCallNode: out_int(, ..., ) - \__ VarAccessNode: to - \__SelfCallNode: out_string(, ..., ) - \__ StringNode: ) - \__SelfCallNode: out_int(, ..., ) - \__ VarAccessNode: weight - \__ClassDeclarationNode: class EList : IO { ... } - \__AttrDeclarationNode: car : Edge - \__FuncDeclarationNode: isNil() : Bool -> - \__ BoolNode: True - \__FuncDeclarationNode: head() : Edge -> - \__ BlockNode { } - \__SelfCallNode: abort(, ..., ) - - \__ VarAccessNode: car - \__FuncDeclarationNode: tail() : EList -> - \__ BlockNode { } - \__SelfCallNode: abort(, ..., ) - - \__ VarAccessNode: self - \__FuncDeclarationNode: cons(e:Edge) : EList -> - \__ExprCallNode: .init(, ..., ) - \__ InstantiateNode: new ECons() - \__ VarAccessNode: e - \__ VarAccessNode: self - \__FuncDeclarationNode: append(l:EList) : EList -> - \__ ConditionalNode: if then else fi - \__ExprCallNode: .isNil(, ..., ) - \__ VarAccessNode: self - - \__ VarAccessNode: l - \__ExprCallNode: .cons(, ..., ) - \__ExprCallNode: .append(, ..., ) - \__SelfCallNode: tail(, ..., ) - - \__ VarAccessNode: l - \__SelfCallNode: head(, ..., ) - - \__FuncDeclarationNode: print() : Object -> - \__SelfCallNode: out_string(, ..., ) - \__ StringNode: \n - \__ClassDeclarationNode: class ECons : EList { ... } - \__AttrDeclarationNode: cdr : EList - \__FuncDeclarationNode: isNil() : Bool -> - \__ BoolNode: False - \__FuncDeclarationNode: head() : Edge -> - \__ VarAccessNode: car - \__FuncDeclarationNode: tail() : EList -> - \__ VarAccessNode: cdr - \__FuncDeclarationNode: init(e:Edge, rest:EList) : EList -> - \__ BlockNode { } - \__AssignNode: car <- - \__ VarAccessNode: e - \__AssignNode: cdr <- - \__ VarAccessNode: rest - \__ VarAccessNode: self - \__FuncDeclarationNode: print() : Object -> - \__ BlockNode { } - \__ExprCallNode: .print(, ..., ) - \__ VarAccessNode: car - - \__ExprCallNode: .print(, ..., ) - \__ VarAccessNode: cdr - - \__ClassDeclarationNode: class VList : IO { ... } - \__AttrDeclarationNode: car : Vertice - \__FuncDeclarationNode: isNil() : Bool -> - \__ BoolNode: True - \__FuncDeclarationNode: head() : Vertice -> - \__ BlockNode { } - \__SelfCallNode: abort(, ..., ) - - \__ VarAccessNode: car - \__FuncDeclarationNode: tail() : VList -> - \__ BlockNode { } - \__SelfCallNode: abort(, ..., ) - - \__ VarAccessNode: self - \__FuncDeclarationNode: cons(v:Vertice) : VList -> - \__ExprCallNode: .init(, ..., ) - \__ InstantiateNode: new VCons() - \__ VarAccessNode: v - \__ VarAccessNode: self - \__FuncDeclarationNode: print() : Object -> - \__SelfCallNode: out_string(, ..., ) - \__ StringNode: \n - \__ClassDeclarationNode: class VCons : VList { ... } - \__AttrDeclarationNode: cdr : VList - \__FuncDeclarationNode: isNil() : Bool -> - \__ BoolNode: False - \__FuncDeclarationNode: head() : Vertice -> - \__ VarAccessNode: car - \__FuncDeclarationNode: tail() : VList -> - \__ VarAccessNode: cdr - \__FuncDeclarationNode: init(v:Vertice, rest:VList) : VList -> - \__ BlockNode { } - \__AssignNode: car <- - \__ VarAccessNode: v - \__AssignNode: cdr <- - \__ VarAccessNode: rest - \__ VarAccessNode: self - \__FuncDeclarationNode: print() : Object -> - \__ BlockNode { } - \__ExprCallNode: .print(, ..., ) - \__ VarAccessNode: car - - \__ExprCallNode: .print(, ..., ) - \__ VarAccessNode: cdr + \__SelfCallNode: fib(, ..., ) + \__SelfCallNode: in_int(, ..., ) - \__ClassDeclarationNode: class Parse : IO { ... } - \__AttrDeclarationNode: boolop : BoolOp - \__FuncDeclarationNode: read_input() : Graph -> - \__ LetNode let in - \__VarDeclarationNode: g : Graph = - \__ InstantiateNode: new Graph() - \__ BlockNode { } - \__ LetNode let in - \__VarDeclarationNode: line : String = - \__SelfCallNode: in_string(, ..., ) - - \__WhileNode: while loop pool - \__ExprCallNode: .and(, ..., ) - \__ VarAccessNode: boolop - \__ EqualNode - \__NotNode - \__ VarAccessNode: line - \__ StringNode: \n - \__ EqualNode - \__NotNode - \__ VarAccessNode: line - \__ StringNode: - \__ BlockNode { } - \__ExprCallNode: .add_vertice(, ..., ) - \__ VarAccessNode: g - \__SelfCallNode: parse_line(, ..., ) - \__ VarAccessNode: line - \__AssignNode: line <- - \__SelfCallNode: in_string(, ..., ) - - \__ VarAccessNode: g - \__FuncDeclarationNode: parse_line(s:String) : Vertice -> + \__SelfCallNode: out_string(, ..., ) + \__ StringNode: \n + \__FuncDeclarationNode: fib(i:Int) : Int -> \__ LetNode let in - \__VarDeclarationNode: v : Vertice = - \__ExprCallNode: .init(, ..., ) - \__ InstantiateNode: new Vertice() - \__SelfCallNode: a2i(, ..., ) - \__ VarAccessNode: s - \__ BlockNode { } - \__WhileNode: while loop pool - \__ EqualNode - \__NotNode - \__ExprCallNode: .length(, ..., ) - \__ VarAccessNode: rest - - \__ IntegerNode: 0 - \__ BlockNode { } - \__ LetNode let in - \__VarDeclarationNode: succ : Int = - \__SelfCallNode: a2i(, ..., ) - \__ VarAccessNode: rest - \__ LetNode let in - \__VarDeclarationNode: weight : Int = - \__SelfCallNode: a2i(, ..., ) - \__ VarAccessNode: rest - \__ExprCallNode: .add_out(, ..., ) - \__ VarAccessNode: v - \__ExprCallNode: .init(, ..., ) - \__ InstantiateNode: new Edge() - \__ExprCallNode: .number(, ..., ) - \__ VarAccessNode: v - - \__ VarAccessNode: succ - \__ VarAccessNode: weight - \__ VarAccessNode: v - \__FuncDeclarationNode: c2i(char:String) : Int -> - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 0 - \__ IntegerNode: 0 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 1 + \__VarDeclarationNode: a : Int = \__ IntegerNode: 1 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 2 - \__ IntegerNode: 2 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 3 - \__ IntegerNode: 3 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 4 - \__ IntegerNode: 4 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 5 - \__ IntegerNode: 5 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 6 - \__ IntegerNode: 6 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 7 - \__ IntegerNode: 7 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 8 - \__ IntegerNode: 8 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: char - \__ StringNode: 9 - \__ IntegerNode: 9 - \__ BlockNode { } - \__SelfCallNode: abort(, ..., ) - - \__ IntegerNode: 0 - \__AttrDeclarationNode: rest : String - \__FuncDeclarationNode: a2i(s:String) : Int -> - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ExprCallNode: .length(, ..., ) - \__ VarAccessNode: s - + \__VarDeclarationNode: b : Int = \__ IntegerNode: 0 - \__ IntegerNode: 0 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ExprCallNode: .substr(, ..., ) - \__ VarAccessNode: s - \__ IntegerNode: 0 - \__ IntegerNode: 1 - \__ StringNode: - - \__BitNotNode - \__SelfCallNode: a2i_aux(, ..., ) - \__ExprCallNode: .substr(, ..., ) - \__ VarAccessNode: s - \__ IntegerNode: 1 - \__ DiffNode - \__ExprCallNode: .length(, ..., ) - \__ VarAccessNode: s - - \__ IntegerNode: 1 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ExprCallNode: .substr(, ..., ) - \__ VarAccessNode: s - \__ IntegerNode: 0 - \__ IntegerNode: 1 - \__ StringNode: - \__SelfCallNode: a2i(, ..., ) - \__ExprCallNode: .substr(, ..., ) - \__ VarAccessNode: s - \__ IntegerNode: 1 - \__ DiffNode - \__ExprCallNode: .length(, ..., ) - \__ VarAccessNode: s - - \__ IntegerNode: 1 - \__SelfCallNode: a2i_aux(, ..., ) - \__ VarAccessNode: s - \__FuncDeclarationNode: a2i_aux(s:String) : Int -> - \__ LetNode let in - \__VarDeclarationNode: int : Int = + \__VarDeclarationNode: c : Int = \__ IntegerNode: 0 \__ BlockNode { } - \__ LetNode let in - \__VarDeclarationNode: j : Int = - \__ExprCallNode: .length(, ..., ) - \__ VarAccessNode: s - - \__ LetNode let in - \__VarDeclarationNode: i : Int = + \__WhileNode: while loop pool + \__NotNode + \__ EqualNode + \__ VarAccessNode: i \__ IntegerNode: 0 - \__WhileNode: while loop pool - \__ LessNode + \__ BlockNode { } + \__AssignNode: c <- + \__ SumNode + \__ VarAccessNode: a + \__ VarAccessNode: b + \__AssignNode: i <- + \__ DiffNode \__ VarAccessNode: i - \__ VarAccessNode: j - \__ LetNode let in - \__VarDeclarationNode: c : String = - \__ExprCallNode: .substr(, ..., ) - \__ VarAccessNode: s - \__ VarAccessNode: i - \__ IntegerNode: 1 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: c - \__ StringNode: - \__ BlockNode { } - \__AssignNode: rest <- - \__ExprCallNode: .substr(, ..., ) - \__ VarAccessNode: s - \__ SumNode - \__ VarAccessNode: i - \__ IntegerNode: 1 - \__ DiffNode - \__ DiffNode - \__ExprCallNode: .length(, ..., ) - \__ VarAccessNode: s - - \__ VarAccessNode: i - \__ IntegerNode: 1 - \__AssignNode: i <- - \__ VarAccessNode: j - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: c - \__ StringNode: , - \__ BlockNode { } - \__AssignNode: rest <- - \__ExprCallNode: .substr(, ..., ) - \__ VarAccessNode: s - \__ SumNode - \__ VarAccessNode: i - \__ IntegerNode: 1 - \__ DiffNode - \__ DiffNode - \__ExprCallNode: .length(, ..., ) - \__ VarAccessNode: s - - \__ VarAccessNode: i - \__ IntegerNode: 1 - \__AssignNode: i <- - \__ VarAccessNode: j - \__ BlockNode { } - \__AssignNode: int <- - \__ StarNode - \__ VarAccessNode: int - \__ SumNode - \__ IntegerNode: 10 - \__SelfCallNode: c2i(, ..., ) - \__ExprCallNode: .substr(, ..., ) - \__ VarAccessNode: s - \__ VarAccessNode: i - \__ IntegerNode: 1 - \__AssignNode: i <- - \__ SumNode - \__ VarAccessNode: i - \__ IntegerNode: 1 - \__ ConditionalNode: if then else fi - \__ EqualNode - \__ VarAccessNode: i - \__ VarAccessNode: j - \__AssignNode: rest <- - \__ StringNode: - \__ StringNode: - \__ VarAccessNode: int - \__ClassDeclarationNode: class Main : Parse { ... } - \__AttrDeclarationNode: g : Graph - \__FuncDeclarationNode: main() : Object -> - \__ BlockNode { } - \__ExprCallNode: .print_V(, ..., ) - \__ VarAccessNode: g - - \__ExprCallNode: .print_E(, ..., ) - \__ VarAccessNode: g - - \__ClassDeclarationNode: class BoolOp { ... } - \__FuncDeclarationNode: and(b1:Bool, b2:Bool) : Bool -> - \__ ConditionalNode: if then else fi - \__ VarAccessNode: b1 - \__ VarAccessNode: b2 - \__ BoolNode: False - \__FuncDeclarationNode: or(b1:Bool, b2:Bool) : Bool -> - \__ ConditionalNode: if then else fi - \__ VarAccessNode: b1 - \__ BoolNode: True - \__ VarAccessNode: b2 \ No newline at end of file + \__ IntegerNode: 1 + \__AssignNode: b <- + \__ VarAccessNode: a + \__AssignNode: a <- + \__ VarAccessNode: c + \__ VarAccessNode: c \ No newline at end of file diff --git a/src/cl_ast/declarations.py b/src/cl_ast/declarations.py index fa9594e7..7d0afcf3 100644 --- a/src/cl_ast/declarations.py +++ b/src/cl_ast/declarations.py @@ -1,10 +1,19 @@ from .astNode import ASTNode class ClassDeclarationNode(ASTNode): - def __init__(self,idx,features,parent = None): + def __init__(self, idx, features, parent = None): self.id = idx self.parent = parent - self.features = features + self.features = self._sort_features(features) + + def _sort_features(self, features): + sort_f = [] + for f in features: + if isinstance(f, AttrDeclarationNode): + sort_f.insert(0, f) + else: + sort_f.append(f) + return sort_f class AttrDeclarationNode(ASTNode): def __init__(self, idx, typex, expr=None): diff --git a/src/cl_ast/expressions/complex_exprs.py b/src/cl_ast/expressions/complex_exprs.py index 2a52b055..afcad09f 100644 --- a/src/cl_ast/expressions/complex_exprs.py +++ b/src/cl_ast/expressions/complex_exprs.py @@ -62,6 +62,10 @@ def __init__(self, idx, expr): self.id = idx self.expr = expr +class IsVoidNode(ExpressionNode): + def __init__(self, expr): + self.expr = expr + #Dispatch class ExprCallNode(ExpressionNode): #CallNode diff --git a/src/cl_ast/expressions/operations.py b/src/cl_ast/expressions/operations.py index 4f3ac400..fe1d2f03 100644 --- a/src/cl_ast/expressions/operations.py +++ b/src/cl_ast/expressions/operations.py @@ -16,54 +16,37 @@ def __init__(self, expr): #Binaries -class SumNode(BinaryOperationNode): - - def __init__(self, left, right): - super().__init__(left, right) +class BinaryArithOperationNode(BinaryOperationNode): + pass -class DiffNode(BinaryOperationNode): - - def __init__(self, left, right): - super().__init__(left, right) +class SumNode(BinaryArithOperationNode): + pass -class StarNode(BinaryOperationNode): - - def __init__(self, left, right): - super().__init__(left, right) +class DiffNode(BinaryArithOperationNode): + pass -class DivNode(BinaryOperationNode): - - def __init__(self, left, right): - super().__init__(left, right) +class StarNode(BinaryArithOperationNode): + pass -class LessNode(BinaryOperationNode): - - def __init__(self, left, right): - super().__init__(left, right) +class DivNode(BinaryArithOperationNode): + pass -class LessEqualNode(BinaryOperationNode): +class BinaryLogicalOperationNode(BinaryOperationNode): + pass - def __init__(self, left, right): - super().__init__(left, right) +class LessNode(BinaryLogicalOperationNode): + pass -class EqualNode(BinaryOperationNode): +class LessEqualNode(BinaryLogicalOperationNode): + pass - def __init__(self, left, right): - super().__init__(left, right) +class EqualNode(BinaryLogicalOperationNode): + pass #Unaries class BitNotNode(UnaryOperationNode): - - def __init__(self, expr): - super().__init__(expr) - -class IsVoidNode(UnaryOperationNode): - - def __init__(self, expr): - super().__init__(expr) + pass class NotNode(UnaryOperationNode): - - def __init__(self, expr): - super().__init__(expr) \ No newline at end of file + pass \ No newline at end of file diff --git a/src/main.py b/src/main.py index 82a31422..823601d9 100644 --- a/src/main.py +++ b/src/main.py @@ -14,8 +14,16 @@ def main(): pipeline.submit_state(Reader('Reader')) pipeline.submit_state(CoolParser('Parser')) pipeline.submit_state(FormatVisitor('Formatter', './ast.txt')) + pipeline.submit_state(TypeCollector('TCollector')) + pipeline.submit_state(TypeBuilder('TBuilder')) + pipeline.submit_state(VarCollector('VCollector')) + pipeline.submit_state(TypeChecker('TChecker')) - pipeline.run_pipeline(program) + ast, context, scope = pipeline.run_pipeline(program) + print(context) + print('-'*25) + print(scope) + pipeline.report_errors() if pipeline.pipeline_errors: diff --git a/src/semantic/context.py b/src/semantic/context.py index 0f2a8a4e..e5b18d10 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -1,5 +1,6 @@ """Contains Context Structures""" +import itertools as itt from .types import * from .error import SemanticError @@ -38,6 +39,7 @@ def __repr__(self): class Scope: def __init__(self, parent=None): + #self.context = context self.locals = [] self.parent = parent self.children = [] @@ -55,7 +57,7 @@ def __str__(self): classx = scope.locals[0] name = classx.type.name except: - name = '1' + name = 'miss' res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' return res diff --git a/src/semantic/types.py b/src/semantic/types.py index db17199d..2fe7d346 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -1,6 +1,7 @@ """Contains Definitions for Semantic Types""" from .error import SemanticError +from .features import * class Type: def __init__(self, name:str): @@ -143,6 +144,16 @@ def __eq__(self, other): def __ne__(self, other): return other.name != self.name and not isinstance(other, StringType) +class IOType(Type): + def __init__(self): + Type.__init__(self, 'IO') + + def __eq__(self, other): + return other.name == self.name or isinstance(other, IOType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, IOType) + class ObjectType(Type): def __init__(self): self.name = 'Object' diff --git a/src/visitors/format_visitor.py b/src/visitors/format_visitor.py index 8f2900cc..c247af67 100644 --- a/src/visitors/format_visitor.py +++ b/src/visitors/format_visitor.py @@ -112,7 +112,7 @@ def visit(self, node, tabs=0): @visitor.when(NewNode) def visit(self, node, tabs=0): - return '\t' * tabs + f'\\__ InstantiateNode: new {node.type}()' + return '\t' * tabs + f'\\__ NewNode: new {node.type}()' @visitor.when(VariableNode) def visit(self, node, tabs=0): diff --git a/src/visitors/type_builder.py b/src/visitors/type_builder.py index 41db10e5..c1067ce0 100644 --- a/src/visitors/type_builder.py +++ b/src/visitors/type_builder.py @@ -3,12 +3,85 @@ import visitors.visitor as visitor from pipeline import State from cl_ast import * +from tools.cmp_errors import * class TypeBuilder(State): - def __init__(self): + def __init__(self, name): + super().__init__(name) self.context = None self.current_type = None def run(self, inputx): - # ast, context = inputx - pass \ No newline at end of file + ast, context = inputx + self.context = context + self.visit(ast) + return ast, self.context + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + # set current type for this class declaration + self.current_type = self.context.get_type(node.id) + + # compute parent + if node.parent is not None: + try: + parent = self.context.get_type(node.parent) + current = parent + while current is not None: + if current.name == self.current_type.name: + raise SemanticError('') + current = current.parent + except SemanticError as e: + parent = ErrorType() + self.errors.append(e.text) # parent type missing + self.current_type.set_parent(parent) + + # visit func declarations and attr declarations for this class + for feature in node.features: + self.visit(feature) + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + args_ids = [] + args_types = [] + + for n, t in node.params: + try: + args_ids.append(n) + args_types.append(self.context.get_type(t)) + except SemanticError as e: + args_types.append(ErrorType()) + self.errors.append(e.text) + + try: + ret_type = self.context.get_type(node.type) + except SemanticError as e: + ret_type = ErrorType() + self.errors.append(e.text) + + try: + self.current_type.define_method(node.id, args_ids, args_types, ret_type) + except: + self.errors.append(e.text) + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + try: + attr_type = self.context.get_type(node.type) + except SemanticError as e: + attr_type = ErrorType() + self.errors.append(e.text) + + try: + self.current_type.define_attribute(node.id, attr_type) + except SemanticError as e: + self.errors.append(e.text) \ No newline at end of file diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py index 16126682..b1f598e5 100644 --- a/src/visitors/type_checker.py +++ b/src/visitors/type_checker.py @@ -5,11 +5,313 @@ from cl_ast import * class TypeChecker(State): - def __init__(self): + def __init__(self, name): + super().__init__(name) self.context = None self.current_type = None self.current_method = None def run(self, inputx): - # ast, context = inputx - pass \ No newline at end of file + ast, context, scope = inputx + self.context = context + self.visit(ast, scope) + return ast, context, scope + + # Checker Auxiliar Functions (TODO: Combine in the Context) + + def _get_type(self, typex): + try: + return self.context.get_type(typex) + except SemanticError as e: + self.errors.append(e.text) + return ErrorType() + + def _get_method(self, typex, name): + if typex is ErrorType(): + return + + try: + return typex.get_method(name) + except SemanticError as e: + self.errors.append(e.text) + return MethodError(name, [], [], ErrorType()) + + def _check_args(self, meth, scope, args): + arg_types = [ self.visit(arg, scope) for arg in args ] + + if len(arg_types) > len(meth.param_types): + self.errors.append(TOO_MANY_ARGUMENTS % meth.name) + + elif len(arg_types) < len(meth.param_types): + for arg in meth.param_names[len(arg_types):]: + self.errors.append(MISSING_PARAMETER % (arg, meth.name)) + + for atype, ptype in zip(arg_types, meth.param_types): + if not atype.conforms_to(ptype): + self.errors.append(INCOMPATIBLE_TYPES % (ptype.name, atype.name)) + + def _join_types(self, ltypes): + + def path_to_objet(typex): + path = [] + c_type = typex + + while c_type: + path.append(c_type) + c_type = c_type.parent + + return path + + paths = [path_to_objet(typex) for typex in ltypes] + tuples = zip(*paths) + + for i, t in enumerate(tuples): + gr = itt.groupby(t) + if len(list(gr)) > 1: + return paths[0][i-1] + + return paths[0][-1] + + # Visitor Functions + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope): + for dec, scp in zip(node.declarations, scope.children): + self.visit(dec, scp) + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + self.current_type = self.context.get_type(node.id) + for feature in node.features: + try: + n_scope = scope.functions[feature.id] + self.visit(feature, n_scope) + except: + self.visit(feature, scope) + + @visitor.when(AttrDeclarationNode) #check attribute redefine (TODO: HIdden Attribute in methods scope using vars) + def visit(self, node, scope): + vinfo = scope.find_variable(node.id) + if node.expr: + etype = self.visit(node.expr, scope) + if not etype.conforms_to(vinfo.type): + self.errors.append(INCOMPATIBLE_TYPES %(etype.name, vinfo.type.name)) + return ErrorType() + return etype + try: + return self.context.get_type(node.type) + except: + return ErrorType() + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + parent = self.current_type.parent + ptypes = [param[1] for param in node.params] + + self.current_method = meth = self.current_type.get_method(node.id) + + while parent: + try: + old_meth = parent.get_method(node.id) + if old_meth.return_type.name != meth.return_type.name and node.type != 'SELF_TYPE': + self.errors.append(WRONG_SIGNATURE % (node.id, parent.name)) + elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, meth.param_types, old_meth.param_types)): + self.errors.append(WRONG_SIGNATURE % (node.id, parent.name)) + break + except SemanticError: + parent = parent.parent + + res = self.visit(node.body, scope) + + if not res.conforms_to(meth.return_type): + self.errors.append(INCOMPATIBLE_TYPES %(meth.return_type.name, res.name)) + + @visitor.when(VarDeclarationNode) + def visit(self, node, scope): + vinfo = scope.find_variable(node.id) + vtype = vinfo.type + + if node.expr: + etype = self.visit(node.expr, scope) + if not etype.conforms_to(vtype): + self.errors.append(INCOMPATIBLE_TYPES %(vtype.name, etype.name)) + return etype + + return vtype + + @visitor.when(AssignNode) + def visit(self, node, scope): + vinfo = scope.find_variable(node.id) + vtype = vinfo.type + + rtype = self.visit(node.expr, scope) + + if not vtype.conforms_to(rtype): + self.errors.append(INCOMPATIBLE_TYPES %(vtype.name, rtype.name)) + + return rtype + + @visitor.when(ExprCallNode) + def visit(self, node, scope): + otype = self.visit(node.obj, scope) + + meth = self._get_method(otype, node.id) + self._check_args(meth, scope, node.args) + return meth.return_type + + @visitor.when(ParentCallNode) + def visit(self, node, scope): + otype = self.visit(node.obj, scope) + ptype = self._get_type(node.type) + + if not otype.conforms_to(ptype): + self.errors.append(INCOMPATIBLE_TYPES % (otype.name, ptype.name)) + return ErrorType() + + meth = self._get_method(ptype, node.id) + self._check_args(meth, scope, node.args) + return meth.return_type + + @visitor.when(SelfCallNode) + def visit(self, node, scope): + stype = self.current_type + + meth = self._get_method(stype, node.id) + self._check_args(meth, scope, node.args) + return meth.return_type + + @visitor.when(WhileNode) + def visit(self, node, scope): + ctype = self.visit(node.cond, scope) + + if ctype.name != 'Bool': + self.errors.append(INCORRECT_TYPE %(ctype.name, 'Bool')) + + return self.visit(node.expr, scope) + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + ctype = self.visit(node.cond, scope) + + if ctype.name != 'Bool': + self.errors.append(INCORRECT_TYPE %(ctype.name, 'Bool')) + + ttype = self.visit(node.stm, scope) + ftype = self.visit(node.else_stm, scope) + + return self._join_types([ttype, ftype]) + + @visitor.when(BlockNode) + def visit(self, node, scope): + vtype = None + + for expr in node.expr_list: + vtype = self.visit(expr, scope) + + return vtype + + @visitor.when(CaseNode) + def visit(self, node, scope): + etype = self.visit(node.expr, scope) + new_scope = scope.expr_dict[node] + + types = [t for opt, c_scp in zip(node.case_list, new_scope.children)] + + return self._join_types([t[0] for t in types]) + + @visitor.when(OptionNode) + def visit(self, node, scope): + var_info = scope.find_variable(node.id) + typex = self.visit(node.expr, scope) + return typex, var_info.type + + @visitor.when(LetNode) + def visit(self, node, scope): + child_scope = scope.expr_dict[node] + for init in node.init_list: + self.visit(init, child_scope) + return self.visit(node.expr, child_scope) + + @visitor.when(BinaryArithOperationNode) + def visit(self, node, scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + if ltype != rtype != IntType(): + self.errors.append(BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name)) + return ErrorType() + + return IntType() + + @visitor.when(LessEqualNode) + def visit(self, node, scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + if ltype != rtype != IntType(): + self.errors.append(BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name)) + return ErrorType() + + return BoolType() + + @visitor.when(LessNode) + def visit(self, node, scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + if ltype != rtype != IntType(): + self.errors.append(BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name)) + return ErrorType() + + return BoolType() + + @visitor.when(EqualNode) + def visit(self, node, scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + + return BoolType() + + @visitor.when(NotNode) + def visit(self, node, scope): + ltype = self.visit(node.expr, scope) + if ltype != BoolType(): + self.errors.append(UOPERATION_NOT_DEFINED %('Logical', ltype.name)) + return ErrorType() + + return BoolType() + + @visitor.when(BitNotNode) + def visit(self, node, scope): + ltype = self.visit(node.expr, scope) + if ltype != IntType(): + self.errors.append(UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name)) + return ErrorType() + + return IntType() + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + self.visit(node.expr, scope) + return BoolType() + + @visitor.when(VariableNode) + def visit(self, node, scope): + return scope.find_variable(node.id).type + + @visitor.when(NewNode) + def visit(self, node, scope): + return self._get_type(node.type) + + @visitor.when(IntegerNode) + def visit(self, node, scope): + return IntType() + + @visitor.when(BoolNode) + def visit(self, node, scope): + return BoolType() + + @visitor.when(StringNode) + def visit(self, node, scope): + return StringType() \ No newline at end of file diff --git a/src/visitors/type_collector.py b/src/visitors/type_collector.py index d6c54ed0..94e730cf 100644 --- a/src/visitors/type_collector.py +++ b/src/visitors/type_collector.py @@ -5,10 +5,32 @@ from cl_ast import * class TypeCollector(State): - def __init__(self): - self.context = None + def __init__(self, name): + super().__init__(name) + self.context = Context() + # register default types ( #TODO Move to Context class and add functions and attributes for each default types ) + self.context.types['String'] = StringType() + self.context.types['Int'] = IntType() + self.context.types['Object'] = ObjectType() + self.context.types['Bool'] = BoolType() + self.context.types['IO'] = IOType() - def run(self, inputx): + def run(self, ast): + self.visit(ast) + return ast, self.context + + @visitor.on('node') + def visit(self, node): pass - # Visit Node Functions \ No newline at end of file + @visitor.when(ProgramNode) + def visit(self, node): + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + try: + self.context.create_type(node.id) + except SemanticError as e: + self.errors.append(e.text) # report error in valid format \ No newline at end of file diff --git a/src/visitors/var_collector.py b/src/visitors/var_collector.py index fc82cfa8..55f4ec14 100644 --- a/src/visitors/var_collector.py +++ b/src/visitors/var_collector.py @@ -5,11 +5,165 @@ from cl_ast import * class VarCollector(State): - def __init__(self): + def __init__(self, name): + super().__init__(name) self.context = None self.current_type = None self.current_method = None def run(self, inputx): - # ast, context = inputx - pass \ No newline at end of file + ast, context = inputx + self.context = context + scope = self.visit(ast) + return ast, context, scope + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope=None): + scope = Scope() + for dec in node.declarations: + self.visit(dec, scope.create_child()) + return scope + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + self.current_type = self.context.get_type(node.id) + scope.define_variable('self', self.current_type) + + # visit features (# Inherits methods and attribures here?) + for feature in node.features: + self.visit(feature, scope) + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + scope.define_attribute(self.current_type.get_attribute(node.id)) + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + self.current_method = self.current_type.get_method(node.id) + new_scope = scope.create_child() + + for pname, ptype in node.params: + try: + new_scope.define_variable(pname, self.context.get_type(ptype)) + except SemanticError as e: + self.errors.append(e.text) + new_scope.define_variable(pname, ErrorType()) + + scope.functions[node.id] = new_scope + + self.visit(node.body, new_scope) + + @visitor.when(VarDeclarationNode) + def visit(self, node, scope): + if node.id == 'self': + self.errors.append(SELF_IS_READONLY) + + elif scope.is_defined(node.id) and scope.find_variable(node.id).type is not ErrorType(): + self.errors.append(LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name)) + + else: + try: + vtype = self.context.get_type(node.type) + scope.define_variable(node.id, vtype) + except SemanticError as e: + scope.define_variable(node.id, ErrorType()) + self.errors.append(e.texts) + + if node.expr is not None: + self.visit(node.expr, scope) + + @visitor.when(AssignNode) + def visit(self, node, scope): + if node.id == 'self': + self.errors.append(SELF_IS_READONLY) + + else: + vinfo = scope.find_variable(node.id) + if vinfo is None: + self.errors.append(VARIABLE_NOT_DEFINED %(node.id, self.current_method.name)) + scope.define_variable(node.id, ErrorType()) + + self.visit(node.expr, scope) + + @visitor.when(LetNode) + def visit(self, node, scope): + new_scope = scope.create_child() + scope.expr_dict[node] = new_scope + + for init in node.init_list: + self.visit(init, new_scope) + self.visit(node.expr, new_scope) + + @visitor.when(VariableNode) + def visit(self, node, scope): + if not (scope.is_defined(node.id) or self.asc_defined(node.id, self.current_type)): + self.errors.append(VARIABLE_NOT_DEFINED %(node.id, self.current_method.name)) + scope.define_variable(node.id, ErrorType()) + + # CHANGE + def asc_defined(self, name, ptype): + while ptype: + attr = ptype.get_attribute(name) + if attr != None: + return True + ptype = ptype.parent + + @visitor.when(CaseNode) + def visit(self, node, scope): + self.visit(node.expr, scope) + + new_scope = scope.create_child() + scope.expr_dict[node] = new_scope + + for case in node.case_list: + self.visit(case, new_scope.create_child()) + + @visitor.when(OptionNode) + def visit(self, node, scope): + typex = self.context.get_type(node.typex) + + self.visit(node.expr, scope) + scope.define_variable(node.id, typex) + + @visitor.when(BinaryOperationNode) + def visit(self, node, scope): + self.visit(node.left, scope) + self.visit(node.right, scope) + + @visitor.when(UnaryOperationNode) + def visit(self, node, scope): + self.visit(node.expr, scope) + + @visitor.when(WhileNode) + def visit(self, node, scope): + self.visit(node.cond, scope) + self.visit(node.expr, scope) + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + self.visit(node.cond, scope) + self.visit(node.stm, scope) + self.visit(node.else_stm, scope) + + @visitor.when(ExprCallNode) + def visit(self, node, scope): + self.visit(node.obj, scope) + + for arg in node.args: + self.visit(arg, scope) + + @visitor.when(ParentCallNode) + def visit(self, node, scope): + self.visit(node.obj, scope) + + for arg in node.args: + self.visit(arg, scope) + + @visitor.when(SelfCallNode) + def visit(self, node, scope): + for arg in node.args: + self.visit(arg, scope) \ No newline at end of file From 99dc8255077c95f42860d0d37d1cfece393240f7 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Mon, 15 Jun 2020 10:07:46 -0400 Subject: [PATCH 022/140] working on type builder --- src/ast.txt | 44 ++-------- src/semantic/context.py | 14 +++- src/semantic/error.py | 7 +- src/semantic/types.py | 8 +- src/visitors/type_builder.py | 149 ++++++++++++++++++++++----------- src/visitors/type_collector.py | 8 +- src/visitors/var_collector.py | 2 +- 7 files changed, 124 insertions(+), 108 deletions(-) diff --git a/src/ast.txt b/src/ast.txt index d7fb85ec..893a1602 100644 --- a/src/ast.txt +++ b/src/ast.txt @@ -1,40 +1,6 @@ \__ProgramNode [ ... ] - \__ClassDeclarationNode: class Main : IO { ... } - \__FuncDeclarationNode: main() : Object -> - \__ BlockNode { } - \__SelfCallNode: out_string(, ..., ) - \__ StringNode: Enter n to find nth fibonacci number!\n - \__SelfCallNode: out_int(, ..., ) - \__SelfCallNode: fib(, ..., ) - \__SelfCallNode: in_int(, ..., ) - - \__SelfCallNode: out_string(, ..., ) - \__ StringNode: \n - \__FuncDeclarationNode: fib(i:Int) : Int -> - \__ LetNode let in - \__VarDeclarationNode: a : Int = - \__ IntegerNode: 1 - \__VarDeclarationNode: b : Int = - \__ IntegerNode: 0 - \__VarDeclarationNode: c : Int = - \__ IntegerNode: 0 - \__ BlockNode { } - \__WhileNode: while loop pool - \__NotNode - \__ EqualNode - \__ VarAccessNode: i - \__ IntegerNode: 0 - \__ BlockNode { } - \__AssignNode: c <- - \__ SumNode - \__ VarAccessNode: a - \__ VarAccessNode: b - \__AssignNode: i <- - \__ DiffNode - \__ VarAccessNode: i - \__ IntegerNode: 1 - \__AssignNode: b <- - \__ VarAccessNode: a - \__AssignNode: a <- - \__ VarAccessNode: c - \__ VarAccessNode: c \ No newline at end of file + \__ClassDeclarationNode: class B { ... } + \__AttrDeclarationNode: x : Int + \__ClassDeclarationNode: class A : B { ... } + \__AttrDeclarationNode: y : String + \__AttrDeclarationNode: x : Int \ No newline at end of file diff --git a/src/semantic/context.py b/src/semantic/context.py index e5b18d10..20f8d103 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -2,15 +2,21 @@ import itertools as itt from .types import * -from .error import SemanticError +from .error import * class Context: def __init__(self): - self.types = {} + self.types = { + 'String': StringType(), + 'Int' : IntType(), + 'Object' : ObjectType(), + 'Bool' : BoolType(), + 'IO' : IOType(), + } def create_type(self, name:str): if name in self.types: - raise SemanticError(f'Type with the same name ({name}) already in context.') + raise ContextError(f'Type with the same name ({name}) already in context.') typex = self.types[name] = Type(name) return typex @@ -18,7 +24,7 @@ def get_type(self, name:str): try: return self.types[name] except KeyError: - raise SemanticError(f'Type "{name}" is not defined.') + raise ContextError(f'Type "{name}" is not defined.') def __str__(self): return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' diff --git a/src/semantic/error.py b/src/semantic/error.py index bbc6188b..9f4071d6 100644 --- a/src/semantic/error.py +++ b/src/semantic/error.py @@ -1,6 +1,11 @@ -""" Defines the base Semantic Error reported in Visitors """ +""" Defines the ContextError and SemanticError reported in Visitors """ class SemanticError(Exception): + @property + def text(self): + return self.args[0] + +class ContextError(Exception): @property def text(self): return self.args[0] \ No newline at end of file diff --git a/src/semantic/types.py b/src/semantic/types.py index 2fe7d346..ad0aacc5 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -21,7 +21,7 @@ def get_attribute(self, name:str): try: return next(attr for attr in self.attributes if attr.name == name) except StopIteration: - if self.parent is None: + if not self.parent: raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') try: return self.parent.get_attribute(name) @@ -42,7 +42,7 @@ def get_method(self, name:str): try: return self.methods[name] except KeyError: - if self.parent is None: + if not self.parent: raise SemanticError(f'Method "{name}" is not defined in {self.name}.') try: return self.parent.get_method(name) @@ -52,8 +52,7 @@ def get_method(self, name:str): def define_method(self, name:str, param_names:list, param_types:list, return_type): if name in self.methods: raise SemanticError(f'Method "{name}" already defined in {self.name}') - # raise SemanticError(f'Method "{name}" already defined in {self.name} with a different signature.') - + method = self.methods[name] = Method(name, param_names, param_types, return_type) return method @@ -61,7 +60,6 @@ def change_type(self, method, nparm, newtype): idx = method.param_names.index(nparm) method.param_types[idx] = newtype - def conforms_to(self, other): return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) diff --git a/src/visitors/type_builder.py b/src/visitors/type_builder.py index c1067ce0..1550dc95 100644 --- a/src/visitors/type_builder.py +++ b/src/visitors/type_builder.py @@ -8,8 +8,6 @@ class TypeBuilder(State): def __init__(self, name): super().__init__(name) - self.context = None - self.current_type = None def run(self, inputx): ast, context = inputx @@ -23,65 +21,114 @@ def visit(self, node): @visitor.when(ProgramNode) def visit(self, node): - for dec in node.declarations: - self.visit(dec) + pass - @visitor.when(ClassDeclarationNode) - def visit(self, node): - # set current type for this class declaration - self.current_type = self.context.get_type(node.id) + class Builder: + def __init__(self): + self.context = None + self.current_type = None + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + # set current type for this class declaration + self.current_type = self.context.get_type(node.id) + + # visit func declarations and attr declarations for this class + for feature in node.features: + self.visit(feature) + + # compute parent + if node.parent: + try: + parent = self.context.get_type(node.parent) + current = parent + while current: + if current.name == self.current_type.name: + raise SemanticError('') + current = current.parent + except SemanticError as e: + parent = ErrorType() + self.errors.append(e.text) # parent type missing + + self.current_type.set_parent(parent) + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + args_ids = [] + args_types = [] + + for n, t in node.params: + args_ids.append(n) + try: + args_types.append(self.context.get_type(t)) + except SemanticError as e: + args_types.append(ErrorType()) + self.errors.append(e.text) - # compute parent - if node.parent is not None: try: - parent = self.context.get_type(node.parent) - current = parent - while current is not None: - if current.name == self.current_type.name: - raise SemanticError('') - current = current.parent + ret_type = self.context.get_type(node.type) except SemanticError as e: - parent = ErrorType() - self.errors.append(e.text) # parent type missing - self.current_type.set_parent(parent) + ret_type = ErrorType() + self.errors.append(e.text) - # visit func declarations and attr declarations for this class - for feature in node.features: - self.visit(feature) + try: + self.current_type.define_method(node.id, args_ids, args_types, ret_type) + except: + self.errors.append(e.text) - @visitor.when(FuncDeclarationNode) - def visit(self, node): - args_ids = [] - args_types = [] + @visitor.when(AttrDeclarationNode) + def visit(self, node): + try: + attr_type = self.context.get_type(node.type) + except SemanticError as e: + attr_type = ErrorType() + self.errors.append(e.text) - for n, t in node.params: try: - args_ids.append(n) - args_types.append(self.context.get_type(t)) + self.current_type.define_attribute(node.id, attr_type) except SemanticError as e: - args_types.append(ErrorType()) self.errors.append(e.text) - try: - ret_type = self.context.get_type(node.type) - except SemanticError as e: - ret_type = ErrorType() - self.errors.append(e.text) + class InheritBuilder: + def __init__(self): + self.context = None + self.current_type = None - try: - self.current_type.define_method(node.id, args_ids, args_types, ret_type) - except: - self.errors.append(e.text) + @visitor.when('node') + def visit(self, node): + pass - @visitor.when(AttrDeclarationNode) - def visit(self, node): - try: - attr_type = self.context.get_type(node.type) - except SemanticError as e: - attr_type = ErrorType() - self.errors.append(e.text) - - try: - self.current_type.define_attribute(node.id, attr_type) - except SemanticError as e: - self.errors.append(e.text) \ No newline at end of file + @visitor.when(ProgramNode) + def visit(self, node): + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + # set current type for this class declaration + self.current_type = self.context.get_type(node.id) + parent = self.current_type.parent + + # visit func declarations and attr declarations for this class + if node.parent and parent is not ErrorType(): + for feature in node.features: + self.visit(feature) + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + # check correct override + parent = self.current_type.parent + + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + pass \ No newline at end of file diff --git a/src/visitors/type_collector.py b/src/visitors/type_collector.py index 94e730cf..02bcc284 100644 --- a/src/visitors/type_collector.py +++ b/src/visitors/type_collector.py @@ -8,12 +8,6 @@ class TypeCollector(State): def __init__(self, name): super().__init__(name) self.context = Context() - # register default types ( #TODO Move to Context class and add functions and attributes for each default types ) - self.context.types['String'] = StringType() - self.context.types['Int'] = IntType() - self.context.types['Object'] = ObjectType() - self.context.types['Bool'] = BoolType() - self.context.types['IO'] = IOType() def run(self, ast): self.visit(ast) @@ -32,5 +26,5 @@ def visit(self, node): def visit(self, node): try: self.context.create_type(node.id) - except SemanticError as e: + except ContextError as e: self.errors.append(e.text) # report error in valid format \ No newline at end of file diff --git a/src/visitors/var_collector.py b/src/visitors/var_collector.py index 55f4ec14..25123c68 100644 --- a/src/visitors/var_collector.py +++ b/src/visitors/var_collector.py @@ -80,7 +80,7 @@ def visit(self, node, scope): def visit(self, node, scope): if node.id == 'self': self.errors.append(SELF_IS_READONLY) - + else: vinfo = scope.find_variable(node.id) if vinfo is None: From 3e07193f0b3a0b4c8cd977f72a3e6abacdd22a01 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sat, 20 Jun 2020 16:06:47 -0400 Subject: [PATCH 023/140] testing type-builder visitor --- src/ast.txt | 27 ++++- src/main.py | 8 +- src/semantic/types.py | 5 +- src/visitors/type_builder.py | 219 +++++++++++++++++++---------------- 4 files changed, 145 insertions(+), 114 deletions(-) diff --git a/src/ast.txt b/src/ast.txt index 893a1602..0eaf03e4 100644 --- a/src/ast.txt +++ b/src/ast.txt @@ -1,6 +1,27 @@ \__ProgramNode [ ... ] - \__ClassDeclarationNode: class B { ... } - \__AttrDeclarationNode: x : Int \__ClassDeclarationNode: class A : B { ... } \__AttrDeclarationNode: y : String - \__AttrDeclarationNode: x : Int \ No newline at end of file + \__AttrDeclarationNode: z : Int + \__ClassDeclarationNode: class C : B { ... } + \__AttrDeclarationNode: y : Int + \__AttrDeclarationNode: z : Bool + \__FuncDeclarationNode: test1() : Bool -> + \__ BoolNode: False + \__FuncDeclarationNode: test(a:String, b:Bool) : Int -> + \__ SumNode + \__ IntegerNode: 2 + \__ IntegerNode: 2 + \__FuncDeclarationNode: test() : Int -> + \__ SumNode + \__ IntegerNode: 1 + \__ IntegerNode: 1 + \__ClassDeclarationNode: class B { ... } + \__AttrDeclarationNode: x : Int + \__FuncDeclarationNode: test() : Int -> + \__ SumNode + \__ IntegerNode: 2 + \__ IntegerNode: 2 + \__FuncDeclarationNode: test_self(a:String, b:Bool) : Int -> + \__ DiffNode + \__ IntegerNode: 2 + \__ IntegerNode: 2 \ No newline at end of file diff --git a/src/main.py b/src/main.py index 823601d9..096f4b72 100644 --- a/src/main.py +++ b/src/main.py @@ -16,13 +16,13 @@ def main(): pipeline.submit_state(FormatVisitor('Formatter', './ast.txt')) pipeline.submit_state(TypeCollector('TCollector')) pipeline.submit_state(TypeBuilder('TBuilder')) - pipeline.submit_state(VarCollector('VCollector')) - pipeline.submit_state(TypeChecker('TChecker')) + #pipeline.submit_state(VarCollector('VCollector')) + #pipeline.submit_state(TypeChecker('TChecker')) - ast, context, scope = pipeline.run_pipeline(program) + ast, context = pipeline.run_pipeline(program) print(context) print('-'*25) - print(scope) + #print(scope) pipeline.report_errors() diff --git a/src/semantic/types.py b/src/semantic/types.py index ad0aacc5..0495ce73 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -61,10 +61,7 @@ def change_type(self, method, nparm, newtype): method.param_types[idx] = newtype def conforms_to(self, other): - return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) - - def bypass(self): - return False + return self == other or self.parent is not None and self.parent.conforms_to(other) def __str__(self): output = f'type {self.name}' diff --git a/src/visitors/type_builder.py b/src/visitors/type_builder.py index 1550dc95..319e663d 100644 --- a/src/visitors/type_builder.py +++ b/src/visitors/type_builder.py @@ -20,115 +20,128 @@ def visit(self, node): pass @visitor.when(ProgramNode) + def visit(self, node): + builder = Builder(self.context) + inherit = InheritBuilder(self.context) + builder.visit(node) + inherit.visit(node) + self.errors = builder.errors + inherit.errors + +class Builder: + def __init__(self, context): + self.errors = [ ] + self.context = context + self.current_type = None + + @visitor.on('node') def visit(self, node): pass - - class Builder: - def __init__(self): - self.context = None - self.current_type = None - - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node): - for dec in node.declarations: - self.visit(dec) - - @visitor.when(ClassDeclarationNode) - def visit(self, node): - # set current type for this class declaration - self.current_type = self.context.get_type(node.id) - - # visit func declarations and attr declarations for this class - for feature in node.features: - self.visit(feature) - - # compute parent - if node.parent: - try: - parent = self.context.get_type(node.parent) - current = parent - while current: - if current.name == self.current_type.name: - raise SemanticError('') - current = current.parent - except SemanticError as e: - parent = ErrorType() - self.errors.append(e.text) # parent type missing - - self.current_type.set_parent(parent) - - @visitor.when(FuncDeclarationNode) - def visit(self, node): - args_ids = [] - args_types = [] - - for n, t in node.params: - args_ids.append(n) - try: - args_types.append(self.context.get_type(t)) - except SemanticError as e: - args_types.append(ErrorType()) - self.errors.append(e.text) - - try: - ret_type = self.context.get_type(node.type) - except SemanticError as e: - ret_type = ErrorType() - self.errors.append(e.text) - - try: - self.current_type.define_method(node.id, args_ids, args_types, ret_type) - except: - self.errors.append(e.text) - - @visitor.when(AttrDeclarationNode) - def visit(self, node): + + @visitor.when(ProgramNode) + def visit(self, node): + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + # set current type for this class declaration + self.current_type = self.context.get_type(node.id) + # visit func declarations and attr declarations for this class + for feature in node.features: + self.visit(feature) + # compute parent + if node.parent: try: - attr_type = self.context.get_type(node.type) + parent = self.context.get_type(node.parent) + current = parent + while current: + if current.name == self.current_type.name: + raise SemanticError('') + current = current.parent except SemanticError as e: - attr_type = ErrorType() - self.errors.append(e.text) - + parent = ErrorType() + self.errors.append(e.text) # parent type missing + + self.current_type.set_parent(parent) + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + args_ids = [] + args_types = [] + for n, t in node.params: + args_ids.append(n) try: - self.current_type.define_attribute(node.id, attr_type) + args_types.append(self.context.get_type(t)) except SemanticError as e: + args_types.append(ErrorType()) self.errors.append(e.text) - - class InheritBuilder: - def __init__(self): - self.context = None - self.current_type = None - - @visitor.when('node') - def visit(self, node): + try: + ret_type = self.context.get_type(node.type) + except SemanticError as e: + ret_type = ErrorType() + self.errors.append(e.text) + try: + self.current_type.define_method(node.id, args_ids, args_types, ret_type) + except SemanticError as e: + self.errors.append(e.text) + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + try: + attr_type = self.context.get_type(node.type) + except SemanticError as e: + attr_type = ErrorType() + self.errors.append(e.text) + try: + self.current_type.define_attribute(node.id, attr_type) + except SemanticError as e: + self.errors.append(e.text) + +class InheritBuilder: + def __init__(self, context): + self.errors = [] + self.context = context + self.current_type = None + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + # set current type for this class declaration + self.current_type = self.context.get_type(node.id) + parent = self.current_type.parent + # visit func declarations and attr declarations for this class + if node.parent and parent is not ErrorType(): + for feature in node.features: + self.visit(feature) + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + # check correct override + parent = self.current_type.parent + cmeth = self.current_type.get_method(node.id) + + try: + pmeth = parent.get_method(node.id) + if not pmeth == cmeth: + self.errors.append(WRONG_SIGNATURE % (node.id, parent.name)) + except SemanticError: pass - - @visitor.when(ProgramNode) - def visit(self, node): - for dec in node.declarations: - self.visit(dec) - - @visitor.when(ClassDeclarationNode) - def visit(self, node): - # set current type for this class declaration - self.current_type = self.context.get_type(node.id) - parent = self.current_type.parent - - # visit func declarations and attr declarations for this class - if node.parent and parent is not ErrorType(): - for feature in node.features: - self.visit(feature) - - @visitor.when(FuncDeclarationNode) - def visit(self, node): - # check correct override - parent = self.current_type.parent - - - @visitor.when(AttrDeclarationNode) - def visit(self, node): + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + parent = self.current_type.parent + + try: + pattr = parent.get_attribute(node.id) + if pattr: + self.errors.append(f"Cannot override attribute {node.id} in {self.current_type.name} from {parent.name}") + except SemanticError: pass \ No newline at end of file From 2e1db00c382f9b369e796390b800647a34de58e2 Mon Sep 17 00:00:00 2001 From: Carlos Rafael Ortega <37123061+CRafa97@users.noreply.github.com> Date: Thu, 16 Jul 2020 01:40:04 -0400 Subject: [PATCH 024/140] removing ast.txt file from git --- src/ast.txt | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 src/ast.txt diff --git a/src/ast.txt b/src/ast.txt deleted file mode 100644 index 0eaf03e4..00000000 --- a/src/ast.txt +++ /dev/null @@ -1,27 +0,0 @@ -\__ProgramNode [ ... ] - \__ClassDeclarationNode: class A : B { ... } - \__AttrDeclarationNode: y : String - \__AttrDeclarationNode: z : Int - \__ClassDeclarationNode: class C : B { ... } - \__AttrDeclarationNode: y : Int - \__AttrDeclarationNode: z : Bool - \__FuncDeclarationNode: test1() : Bool -> - \__ BoolNode: False - \__FuncDeclarationNode: test(a:String, b:Bool) : Int -> - \__ SumNode - \__ IntegerNode: 2 - \__ IntegerNode: 2 - \__FuncDeclarationNode: test() : Int -> - \__ SumNode - \__ IntegerNode: 1 - \__ IntegerNode: 1 - \__ClassDeclarationNode: class B { ... } - \__AttrDeclarationNode: x : Int - \__FuncDeclarationNode: test() : Int -> - \__ SumNode - \__ IntegerNode: 2 - \__ IntegerNode: 2 - \__FuncDeclarationNode: test_self(a:String, b:Bool) : Int -> - \__ DiffNode - \__ IntegerNode: 2 - \__ IntegerNode: 2 \ No newline at end of file From 55a5bb542fe81e1369beec2a7b07e604fc30d4f8 Mon Sep 17 00:00:00 2001 From: Carlos Rafael Ortega <37123061+CRafa97@users.noreply.github.com> Date: Thu, 16 Jul 2020 01:41:43 -0400 Subject: [PATCH 025/140] ignoring ast.txt from repo --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6f52d264..a9bee090 100644 --- a/.gitignore +++ b/.gitignore @@ -411,3 +411,4 @@ dmypy.json # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) +src/ast.txt \ No newline at end of file From b5017b0925cc1e4a3bee9b7e6ddd9a96b6b172e0 Mon Sep 17 00:00:00 2001 From: Carlos Rafael Ortega <37123061+CRafa97@users.noreply.github.com> Date: Fri, 17 Jul 2020 06:41:36 -0400 Subject: [PATCH 026/140] new scope implementation and fixing errors in VCollector and TChecker --- src/main.py | 6 +- src/semantic/context.py | 124 ++++++++++++++++++++++----------- src/semantic/error.py | 5 ++ src/tools/cmp_errors.py | 1 + src/visitors/format_visitor.py | 1 - src/visitors/type_checker.py | 17 ++--- src/visitors/var_collector.py | 56 ++++++--------- 7 files changed, 122 insertions(+), 88 deletions(-) diff --git a/src/main.py b/src/main.py index 096f4b72..ef6086d6 100644 --- a/src/main.py +++ b/src/main.py @@ -16,13 +16,13 @@ def main(): pipeline.submit_state(FormatVisitor('Formatter', './ast.txt')) pipeline.submit_state(TypeCollector('TCollector')) pipeline.submit_state(TypeBuilder('TBuilder')) - #pipeline.submit_state(VarCollector('VCollector')) + pipeline.submit_state(VarCollector('VCollector')) #pipeline.submit_state(TypeChecker('TChecker')) - ast, context = pipeline.run_pipeline(program) + ast, context, scope = pipeline.run_pipeline(program) print(context) print('-'*25) - #print(scope) + print(scope) pipeline.report_errors() diff --git a/src/semantic/context.py b/src/semantic/context.py index 20f8d103..8e974920 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -3,6 +3,7 @@ import itertools as itt from .types import * from .error import * +from tools.cmp_errors import * class Context: def __init__(self): @@ -44,67 +45,108 @@ def __repr__(self): return str(self) class Scope: - def __init__(self, parent=None): - #self.context = context - self.locals = [] - self.parent = parent - self.children = [] - self.expr_dict = { } - self.functions = { } - self.index = 0 if parent is None else len(parent) + """ Defines the global scope using a given context """ - def __len__(self): - return len(self.locals) + def __init__(self, context=None): + self.context = context + self.cls_scopes = { } - def __str__(self): - res = '' - for scope in self.children: - try: - classx = scope.locals[0] - name = classx.type.name - except: - name = 'miss' - res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' - return res - - def tab_level(self, tabs, name, num): - res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) - if self.functions: - children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) - else: - children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) - return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' + if context: + for cls_name, cls in context.types.items(): + self.cls_scopes[cls_name] = ClassScope(cls_type=cls) - def __repr__(self): - return str(self) +class ClassScope: + """ Defines the class scope using a given cool class """ + + def __init__(self, cls_type=None): + self.self_type = cls_type + self.self_var = VariableInfo('self', self.self_type) + self.parent = None # using in backtrack search + self.func_scopes = { fname: InnerScope(parent=self) for fname in cls_type.methods.keys() } + + def get_attribute(self, name): + return self.self_var if name == 'self' else self.self_type.get_attribute(name) + + def is_innerScope(self): + return False + + def is_class_scope(self): + return True + +class InnerScope: + def __init__(self, parent=None): + self.parent = parent # the scope parent + self.locals = [ ] # local variables for the current scope + self.children = [ ] + self.expr_dict = { } def create_child(self): - child = Scope(self) + child = InnerScope(self) self.children.append(child) return child def define_variable(self, vname, vtype): + if vname == 'self': + raise ScopeError(SELF_IS_READONLY) + info = VariableInfo(vname, vtype) self.locals.append(info) return info - def define_attribute(self, attr): - self.locals.append(attr) - - def find_variable(self, vname, index=None): - locals = self.locals if index is None else itt.islice(self.locals, index) + def find_variable(self, vname): try: - return next(x for x in locals if x.name == vname) + return next(x for x in self.locals if x.name == vname) except StopIteration: - return self.parent.find_variable(vname, self.index) if self.parent else None + if self.parent.is_innerScope(): + return self.parent.find_variable(vname) + else: + try: + return self.parent.get_attribute(vname) + except SemanticError: + return None def get_class_scope(self): - if self.parent == None or self.parent.parent == None: - return self + if self.parent.parent == None: + return self.parent return self.parent.get_class_scope() def is_defined(self, vname): return self.find_variable(vname) is not None + def is_attribute(self, aname): + cl_scope = self.get_class_scope() + return cl_scope.get_attribute(aname) is not None + def is_local(self, vname): - return any(True for x in self.locals if x.name == vname) \ No newline at end of file + return any(True for x in self.locals if x.name == vname) + + def is_innerScope(self): + return True + + def is_class_scope(self): + return False + + # def __len__(self): + # return len(self.locals) + + # def __str__(self): + # res = '' + # for scope in self.children: + # try: + # classx = scope.locals[0] + # name = classx.type.name + # except: + # name = 'miss' + # res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' + # return res + + # def tab_level(self, tabs, name, num): + # res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) + # if self.functions: + # children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) + # else: + # children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) + # return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' + + # def __repr__(self): + # return str(self) \ No newline at end of file diff --git a/src/semantic/error.py b/src/semantic/error.py index 9f4071d6..7859d78a 100644 --- a/src/semantic/error.py +++ b/src/semantic/error.py @@ -6,6 +6,11 @@ def text(self): return self.args[0] class ContextError(Exception): + @property + def text(self): + return self.args[0] + +class ScopeError(Exception): @property def text(self): return self.args[0] \ No newline at end of file diff --git a/src/tools/cmp_errors.py b/src/tools/cmp_errors.py index 3401f4e5..084ded48 100644 --- a/src/tools/cmp_errors.py +++ b/src/tools/cmp_errors.py @@ -13,6 +13,7 @@ # Semantic Messages WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' SELF_IS_READONLY = 'Variable "self" is read-only.' +FORMAL_ERROR_SELF = '"self" identifier cannot be used as formal parameter' LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' diff --git a/src/visitors/format_visitor.py b/src/visitors/format_visitor.py index c247af67..4b57c097 100644 --- a/src/visitors/format_visitor.py +++ b/src/visitors/format_visitor.py @@ -10,7 +10,6 @@ def __init__(self, sname, fname): def run(self, ast): printed_ast = self.visit(ast) f = open(self.fname, 'w') - f.write(printed_ast) f.close() return ast diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py index b1f598e5..7fb16083 100644 --- a/src/visitors/type_checker.py +++ b/src/visitors/type_checker.py @@ -80,22 +80,18 @@ def visit(self, node, scope): @visitor.when(ProgramNode) def visit(self, node, scope): - for dec, scp in zip(node.declarations, scope.children): - self.visit(dec, scp) + for dec in node.declarations: + self.visit(dec, scope.cls_scopes[dec.id]) @visitor.when(ClassDeclarationNode) def visit(self, node, scope): self.current_type = self.context.get_type(node.id) for feature in node.features: - try: - n_scope = scope.functions[feature.id] - self.visit(feature, n_scope) - except: - self.visit(feature, scope) + self.visit(feature, scope) - @visitor.when(AttrDeclarationNode) #check attribute redefine (TODO: HIdden Attribute in methods scope using vars) + @visitor.when(AttrDeclarationNode) def visit(self, node, scope): - vinfo = scope.find_variable(node.id) + vinfo = scope.get_attribute(node.id) if node.expr: etype = self.visit(node.expr, scope) if not etype.conforms_to(vinfo.type): @@ -109,6 +105,7 @@ def visit(self, node, scope): @visitor.when(FuncDeclarationNode) def visit(self, node, scope): + fscope = scope.func_scopes[node.id] parent = self.current_type.parent ptypes = [param[1] for param in node.params] @@ -125,7 +122,7 @@ def visit(self, node, scope): except SemanticError: parent = parent.parent - res = self.visit(node.body, scope) + res = self.visit(node.body, fscope) if not res.conforms_to(meth.return_type): self.errors.append(INCOMPATIBLE_TYPES %(meth.return_type.name, res.name)) diff --git a/src/visitors/var_collector.py b/src/visitors/var_collector.py index 25123c68..efe34798 100644 --- a/src/visitors/var_collector.py +++ b/src/visitors/var_collector.py @@ -1,4 +1,5 @@ from semantic import * +from tools.cmp_errors import * import visitors.visitor as visitor from pipeline import State @@ -23,46 +24,42 @@ def visit(self, node, scope): @visitor.when(ProgramNode) def visit(self, node, scope=None): - scope = Scope() + scope = Scope(context=self.context) for dec in node.declarations: - self.visit(dec, scope.create_child()) + self.visit(dec, scope.cls_scopes[dec.id]) return scope @visitor.when(ClassDeclarationNode) def visit(self, node, scope): self.current_type = self.context.get_type(node.id) - scope.define_variable('self', self.current_type) - - # visit features (# Inherits methods and attribures here?) + + # visit features for feature in node.features: self.visit(feature, scope) @visitor.when(AttrDeclarationNode) def visit(self, node, scope): - scope.define_attribute(self.current_type.get_attribute(node.id)) + pass @visitor.when(FuncDeclarationNode) def visit(self, node, scope): self.current_method = self.current_type.get_method(node.id) - new_scope = scope.create_child() + func_scope = scope.func_scopes[node.id] for pname, ptype in node.params: try: - new_scope.define_variable(pname, self.context.get_type(ptype)) + if pname == 'self': + raise SemanticError(FORMAL_ERROR_SELF) + func_scope.define_variable(pname, self.context.get_type(ptype)) except SemanticError as e: self.errors.append(e.text) - new_scope.define_variable(pname, ErrorType()) + func_scope.define_variable(pname, ErrorType()) - scope.functions[node.id] = new_scope - - self.visit(node.body, new_scope) + self.visit(node.body, func_scope) @visitor.when(VarDeclarationNode) def visit(self, node, scope): - if node.id == 'self': - self.errors.append(SELF_IS_READONLY) - - elif scope.is_defined(node.id) and scope.find_variable(node.id).type is not ErrorType(): + if scope.is_defined(node.id) and scope.find_variable(node.id).type is not ErrorType(): self.errors.append(LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name)) else: @@ -78,17 +75,18 @@ def visit(self, node, scope): @visitor.when(AssignNode) def visit(self, node, scope): - if node.id == 'self': - self.errors.append(SELF_IS_READONLY) - - else: - vinfo = scope.find_variable(node.id) - if vinfo is None: - self.errors.append(VARIABLE_NOT_DEFINED %(node.id, self.current_method.name)) - scope.define_variable(node.id, ErrorType()) + vinfo = scope.find_variable(node.id) + if vinfo is None: + self.errors.append(VARIABLE_NOT_DEFINED %(node.id, self.current_method.name)) + scope.define_variable(node.id, ErrorType()) self.visit(node.expr, scope) + @visitor.when(BlockNode) + def visit(self, node, scope): + for expr in node.expr_list: + self.visit(expr, scope) + @visitor.when(LetNode) def visit(self, node, scope): new_scope = scope.create_child() @@ -100,18 +98,10 @@ def visit(self, node, scope): @visitor.when(VariableNode) def visit(self, node, scope): - if not (scope.is_defined(node.id) or self.asc_defined(node.id, self.current_type)): + if not scope.is_defined(node.id): self.errors.append(VARIABLE_NOT_DEFINED %(node.id, self.current_method.name)) scope.define_variable(node.id, ErrorType()) - # CHANGE - def asc_defined(self, name, ptype): - while ptype: - attr = ptype.get_attribute(name) - if attr != None: - return True - ptype = ptype.parent - @visitor.when(CaseNode) def visit(self, node, scope): self.visit(node.expr, scope) From 17acf4023912d136324fcfb6ba915aabd0b86d04 Mon Sep 17 00:00:00 2001 From: Carlos Rafael Ortega <37123061+CRafa97@users.noreply.github.com> Date: Sat, 18 Jul 2020 00:20:13 -0400 Subject: [PATCH 027/140] pretty print for scopes --- src/semantic/context.py | 51 ++++++++++++++++++++++------------------- src/semantic/types.py | 10 +++++++- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/semantic/context.py b/src/semantic/context.py index 8e974920..70c93f96 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -1,6 +1,7 @@ """Contains Context Structures""" import itertools as itt +import pprint from .types import * from .error import * from tools.cmp_errors import * @@ -55,6 +56,15 @@ def __init__(self, context=None): for cls_name, cls in context.types.items(): self.cls_scopes[cls_name] = ClassScope(cls_type=cls) + def __str__(self): + res = ' Program Scope \n' + '-'*18 + '\nClasses in Program\n' + '-'*18 + '\n\n' + for name, cls in self.cls_scopes.items(): + res += f'{name}, {str(cls)}\n' + return res + + def __repr__(self): + return str(self) + class ClassScope: """ Defines the class scope using a given cool class """ @@ -73,6 +83,15 @@ def is_innerScope(self): def is_class_scope(self): return True + def __str__(self): + res = 'Class Methods\n' + '-'*25 + '\n' + for mname, s in self.func_scopes.items(): + res += f'{mname}: {str(s)}\n' + return res + + def __repr__(self): + return str(self) + class InnerScope: def __init__(self, parent=None): self.parent = parent # the scope parent @@ -126,27 +145,11 @@ def is_innerScope(self): def is_class_scope(self): return False - # def __len__(self): - # return len(self.locals) - - # def __str__(self): - # res = '' - # for scope in self.children: - # try: - # classx = scope.locals[0] - # name = classx.type.name - # except: - # name = 'miss' - # res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' - # return res - - # def tab_level(self, tabs, name, num): - # res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) - # if self.functions: - # children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) - # else: - # children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) - # return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' - - # def __repr__(self): - # return str(self) \ No newline at end of file + def __str__(self, tabs=0): + res = ('\t' * tabs) + '[ ' + (', '.join( str(local) for local in self.locals )) + ' ]\n' + if self.children: + res += '\n'.join(c.__str__(tabs + 1) for c in self.children) + return res + + def __repr__(self): + return str(self) \ No newline at end of file diff --git a/src/semantic/types.py b/src/semantic/types.py index 0495ce73..115c1997 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -79,6 +79,10 @@ def __str__(self): def __repr__(self): return str(self) +class SELF_TYPE(Type): + def __init__(self): + Type.__init__(self, 'SELF_TYPE') + class ErrorType(Type): def __init__(self): Type.__init__(self, '') @@ -133,6 +137,8 @@ class StringType(Type): def __init__(self): Type.__init__(self, 'String') + self.methods = { } + def __eq__(self, other): return other.name == self.name or isinstance(other, StringType) @@ -143,6 +149,8 @@ class IOType(Type): def __init__(self): Type.__init__(self, 'IO') + self.methods = { } + def __eq__(self, other): return other.name == self.name or isinstance(other, IOType) @@ -153,7 +161,7 @@ class ObjectType(Type): def __init__(self): self.name = 'Object' self.attributes = [] - self.methods = {} + self.methods = { } self.parent = None From 6228293f570dfd89db243a6dfc99342b360c6981 Mon Sep 17 00:00:00 2001 From: Carlos Rafael Ortega <37123061+CRafa97@users.noreply.github.com> Date: Sat, 10 Oct 2020 21:26:47 -0400 Subject: [PATCH 028/140] minor changes in semantic phase --- src/main.py | 2 +- src/semantic/context.py | 16 ++++++++++++++++ src/semantic/types.py | 9 ++++----- src/tools/utils.py | 17 ++++++++++++++++- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/main.py b/src/main.py index ef6086d6..823601d9 100644 --- a/src/main.py +++ b/src/main.py @@ -17,7 +17,7 @@ def main(): pipeline.submit_state(TypeCollector('TCollector')) pipeline.submit_state(TypeBuilder('TBuilder')) pipeline.submit_state(VarCollector('VCollector')) - #pipeline.submit_state(TypeChecker('TChecker')) + pipeline.submit_state(TypeChecker('TChecker')) ast, context, scope = pipeline.run_pipeline(program) print(context) diff --git a/src/semantic/context.py b/src/semantic/context.py index 70c93f96..d44791ed 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -4,6 +4,7 @@ import pprint from .types import * from .error import * +from .features import * from tools.cmp_errors import * class Context: @@ -14,8 +15,23 @@ def __init__(self): 'Object' : ObjectType(), 'Bool' : BoolType(), 'IO' : IOType(), + 'SELF_TYPE' : SELF_TYPE() } + # build-in methods + self.types['Object'].methods['abort'] = Method('abort', [], [], self.types['Object']) + self.types['Object'].methods['type_name'] = Method('type_name', [], [], self.types['String']) + self.types['Object'].methods['copy'] = Method('copy', [], [], self.types['SELF_TYPE']) + + self.types['IO'].methods['out_string'] = Method('out_string', ['x'], [self.types['String']], self.types['SELF_TYPE']) + self.types['IO'].methods['out_int'] = Method('out_int', ['x'], [self.types['Int']], self.types['SELF_TYPE']) + self.types['IO'].methods['in_string'] = Method('in_string', [], [], self.types['String']) + self.types['IO'].methods['in_int'] = Method('in_int', [], [], self.types['Int']) + + self.types['String'].methods['length'] = Method('length', [], [], self.types['Int']) + self.types['String'].methods['concat'] = Method('concat', ['s'], [self.types['String']], self.types['String']) + self.types['String'].methods['substr'] = Method('substr', ['i', 'l'], [self.types['Int'], self.types['Int']], self.types['String']) + def create_type(self, name:str): if name in self.types: raise ContextError(f'Type with the same name ({name}) already in context.') diff --git a/src/semantic/types.py b/src/semantic/types.py index 115c1997..b561c834 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -2,6 +2,7 @@ from .error import SemanticError from .features import * +from tools.utils import Singleton class Type: def __init__(self, name:str): @@ -78,7 +79,6 @@ def __str__(self): def __repr__(self): return str(self) - class SELF_TYPE(Type): def __init__(self): Type.__init__(self, 'SELF_TYPE') @@ -133,7 +133,7 @@ def __eq__(self, other): def __ne__(self, other): return other.name != self.name and not isinstance(other, IntType) -class StringType(Type): +class StringType(Type, metaclass=Singleton): def __init__(self): Type.__init__(self, 'String') @@ -145,7 +145,7 @@ def __eq__(self, other): def __ne__(self, other): return other.name != self.name and not isinstance(other, StringType) -class IOType(Type): +class IOType(Type, metaclass=Singleton): def __init__(self): Type.__init__(self, 'IO') @@ -157,14 +157,13 @@ def __eq__(self, other): def __ne__(self, other): return other.name != self.name and not isinstance(other, IOType) -class ObjectType(Type): +class ObjectType(Type, metaclass=Singleton): def __init__(self): self.name = 'Object' self.attributes = [] self.methods = { } self.parent = None - def __eq__(self, other): return other.name == self.name or isinstance(other, ObjectType) diff --git a/src/tools/utils.py b/src/tools/utils.py index 51363042..ef79067a 100644 --- a/src/tools/utils.py +++ b/src/tools/utils.py @@ -3,4 +3,19 @@ # lexpos is a lex position in token instance def find_column(input, lexpos): line_start = input.rfind('\n', 0, lexpos) + 1 - return (lexpos - line_start) + 1 \ No newline at end of file + return (lexpos - line_start) + 1 + +class Singleton(type): + """ Singleton Pattern using metaclasses """ + + def __init__(cls, *args): + cls._instance = None + type.__init__(cls, *args) + + def __call__(cls, *args): + if cls._instance is None: + cls._instance = type.__call__(cls, *args) + return cls._instance + + def __new__(cls, *args, **kwargs): + return type.__new__(cls, *args, **kwargs) \ No newline at end of file From 9e44bce2cce666336c40fc942c94fa8a306e21c2 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sat, 31 Oct 2020 13:00:52 -0400 Subject: [PATCH 029/140] adding line and col to ast nodes --- src/cl_ast/astNode.py | 3 + src/cl_ast/declarations.py | 12 ++-- src/cl_ast/expressions/complex_exprs.py | 51 ++++++------- src/cl_ast/expressions/constant.py | 3 +- src/cl_ast/expressions/operations.py | 8 +-- src/cl_ast/program.py | 3 +- src/cl_parser/coolparser.py | 95 ++++++++++++++++--------- src/main.py | 20 +++--- src/tools/cmp_errors.py | 13 ++-- 9 files changed, 124 insertions(+), 84 deletions(-) diff --git a/src/cl_ast/astNode.py b/src/cl_ast/astNode.py index 3045ab1e..8f134430 100644 --- a/src/cl_ast/astNode.py +++ b/src/cl_ast/astNode.py @@ -1,2 +1,5 @@ class ASTNode(object): + def __init__(self, row, col): + self.row = row + self.col = col pass \ No newline at end of file diff --git a/src/cl_ast/declarations.py b/src/cl_ast/declarations.py index 7d0afcf3..ba29f233 100644 --- a/src/cl_ast/declarations.py +++ b/src/cl_ast/declarations.py @@ -1,7 +1,8 @@ from .astNode import ASTNode class ClassDeclarationNode(ASTNode): - def __init__(self, idx, features, parent = None): + def __init__(self, row, col, idx, features, parent = None): + super().__init__(row, col) self.id = idx self.parent = parent self.features = self._sort_features(features) @@ -16,20 +17,23 @@ def _sort_features(self, features): return sort_f class AttrDeclarationNode(ASTNode): - def __init__(self, idx, typex, expr=None): + def __init__(self, row, col, idx, typex, expr=None): + super().__init__(row, col) self.id = idx self.type = typex self.expr = expr class FuncDeclarationNode(ASTNode): - def __init__(self, idx, params, return_type, body): + def __init__(self, row, col, idx, params, return_type, body): + super().__init__(row, col) self.id = idx self.params = params self.type = return_type self.body = body class VarDeclarationNode(ASTNode): - def __init__(self, idx, typex, expr=None): + def __init__(self, row, col, idx, typex, expr=None): + super().__init__(row, col) self.id = idx self.type = typex self.expr = expr \ No newline at end of file diff --git a/src/cl_ast/expressions/complex_exprs.py b/src/cl_ast/expressions/complex_exprs.py index afcad09f..b135f7d7 100644 --- a/src/cl_ast/expressions/complex_exprs.py +++ b/src/cl_ast/expressions/complex_exprs.py @@ -2,33 +2,33 @@ #Atomic class VariableNode(ExpressionNode): - - def __init__(self, idx): + def __init__(self, row, col, idx): + super().__init__(row, col) self.id = idx class NewNode(ExpressionNode): - - def __init__(self, typex): + def __init__(self, row, col, typex): + super().__init__(row, col) self.type = typex #Exprs class ConditionalNode(ExpressionNode): - - def __init__(self, cond, stm, else_stm): + def __init__(self, row, col, cond, stm, else_stm): + super().__init__(row, col) self.cond = cond self.stm = stm self.else_stm = else_stm class WhileNode(ExpressionNode): - - def __init__(self, cond, expr): + def __init__(self, row, col, cond, expr): + super().__init__(row, col) self.cond = cond self.expr = expr class LetNode(ExpressionNode): - - def __init__(self, init_list, expr): + def __init__(self, row, col, init_list, expr): + super().__init__(row, col) self.init_list = init_list self.expr = expr @@ -36,13 +36,13 @@ def __hash__(self): return id(self) class BlockNode(ExpressionNode): - - def __init__(self, expr_list): + def __init__(self, row, col, expr_list): + super().__init__(row, col) self.expr_list = expr_list class CaseNode(ExpressionNode): - - def __init__(self, expr, case_list): + def __init__(self, row, col, expr, case_list): + super().__init__(row, col) self.expr = expr self.case_list = case_list @@ -50,41 +50,42 @@ def __hash__(self): return id(self) class OptionNode(ExpressionNode): - - def __init__(self, idx, typex, expr): + def __init__(self, row, col, idx, typex, expr): + super().__init__(row, col) self.id = idx self.typex = typex self.expr = expr class AssignNode(ExpressionNode): - - def __init__(self, idx, expr): + def __init__(self, row, col, idx, expr): + super().__init__(row, col) self.id = idx self.expr = expr class IsVoidNode(ExpressionNode): - def __init__(self, expr): + def __init__(self, row, col, expr): + super().__init__(row, col) self.expr = expr #Dispatch class ExprCallNode(ExpressionNode): #CallNode - - def __init__(self, obj, idx, args): + def __init__(self, row, col, obj, idx, args): + super().__init__(row, col) self.obj = obj self.id = idx self.args = args class SelfCallNode(ExpressionNode): #StaticCallNode - - def __init__(self, idx, args): + def __init__(self, row, col, idx, args): + super().__init__(row, col) self.id = idx self.args = args class ParentCallNode(ExpressionNode): #BaseCallNode - - def __init__(self, obj, typex, idx, args): + def __init__(self, row, col, obj, typex, idx, args): + super().__init__(row, col) self.obj = obj self.id = idx self.args = args diff --git a/src/cl_ast/expressions/constant.py b/src/cl_ast/expressions/constant.py index 8943b241..23a14bc5 100644 --- a/src/cl_ast/expressions/constant.py +++ b/src/cl_ast/expressions/constant.py @@ -1,7 +1,8 @@ from .exprNode import ExpressionNode class ConstantNode(ExpressionNode): - def __init__(self, lex): + def __init__(self, row, col, lex): + super().__init__(row, col) self.lex = lex class IntegerNode(ConstantNode): diff --git a/src/cl_ast/expressions/operations.py b/src/cl_ast/expressions/operations.py index fe1d2f03..26717675 100644 --- a/src/cl_ast/expressions/operations.py +++ b/src/cl_ast/expressions/operations.py @@ -4,14 +4,14 @@ class OperationNode(ExpressionNode): pass class BinaryOperationNode(OperationNode): - - def __init__(self, left, right): + def __init__(self, row, col, left, right): + super().__init__(row, col) self.left = left self.right = right class UnaryOperationNode(OperationNode): - - def __init__(self, expr): + def __init__(self, row, col, expr): + super().__init__(row, col) self.expr = expr #Binaries diff --git a/src/cl_ast/program.py b/src/cl_ast/program.py index 2c640469..fd02434b 100644 --- a/src/cl_ast/program.py +++ b/src/cl_ast/program.py @@ -1,6 +1,7 @@ from .astNode import ASTNode class ProgramNode(ASTNode): - def __init__(self, declarations): + def __init__(self, row, col, declarations): + super().__init__(row, col) self.declarations = declarations diff --git a/src/cl_parser/coolparser.py b/src/cl_parser/coolparser.py index fd0986d7..d4912124 100644 --- a/src/cl_parser/coolparser.py +++ b/src/cl_parser/coolparser.py @@ -18,13 +18,19 @@ def run(self, raw): self.errors = self.lexer.errors + self.errors return ast + def token_pos(self, p, idx): + line = self.lexer.lexer.lineno + col = find_column(self.lexer.lexer.lexdata, p.lexpos(idx)) + return line, col + # Set the grammar start symbol start = 'program' # Program Rule def p_program(self, p): '''program : class_list''' - p[0] = ProgramNode(p[1]) + line, col = self.token_pos(p, 0) + p[0] = ProgramNode(line, col, p[1]) # Empty Production def p_empty(self, p): @@ -44,10 +50,11 @@ def p_class_list(self, p): def p_def_class(self, p): '''def_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI''' + line, col = self.token_pos(p, 1) if p[3].lower() == 'inherits': - p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + p[0] = ClassDeclarationNode(line, col, p[2], p[6], p[4]) else: - p[0] = ClassDeclarationNode(p[2], p[4]) + p[0] = ClassDeclarationNode(line, col, p[2], p[4]) # Class Feature List Rules def p_feature_list(self, p): @@ -63,15 +70,17 @@ def p_feature_list(self, p): def p_def_attr(self, p): '''def_attr : ID COLON TYPEID | ID COLON TYPEID ASSIGN expr''' + line, col = self.token_pos(p, 1) try: - p[0] = AttrDeclarationNode(p[1], p[3], p[5]) + p[0] = AttrDeclarationNode(line, col, p[1], p[3], p[5]) except: - p[0] = AttrDeclarationNode(p[1], p[3]) + p[0] = AttrDeclarationNode(line, col, p[1], p[3]) # Func Definition Rules def p_def_func(self, p): '''def_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE''' - p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) + line, col = self.token_pos(p, 1) + p[0] = FuncDeclarationNode(line, col, p[1], p[3], p[6], p[8]) # Func Parameters List Rules def p_param_list_ept(self, p): @@ -103,20 +112,21 @@ def p_expr(self, p): | CASE expr OF cases_list ESAC | IF expr THEN expr ELSE expr FI | WHILE expr LOOP expr POOL''' - + line, col = self.token_pos(p, 1) if p[1].lower() == 'let': - p[0] = LetNode(p[2], p[4]) + p[0] = LetNode(line, col, p[2], p[4]) elif p[1].lower() == 'case': - p[0] = CaseNode(p[2], p[4]) + p[0] = CaseNode(line, col, p[2], p[4]) elif p[1].lower() == 'if': - p[0] = ConditionalNode(p[2], p[4], p[6]) + p[0] = ConditionalNode(line, col, p[2], p[4], p[6]) elif p[1].lower() == 'while': - p[0] = WhileNode(p[2], p[4]) + p[0] = WhileNode(line, col, p[2], p[4]) # Assign Production def p_expr_assign(self, p): '''expr : ID ASSIGN expr''' - p[0] = AssignNode(p[1], p[3]) + line, col = self.token_pos(p, 2) + p[0] = AssignNode(line, col, p[1], p[3]) # Precedence Production def p_expr_arith(self, p): @@ -137,9 +147,11 @@ def p_let_assign(self, p): '''let_assign : param ASSIGN expr | param''' try: - p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) + line, col = self.token_pos(p, 2) + p[0] = VarDeclarationNode(line, col, p[1][0], p[1][1], p[3]) except: - p[0] = VarDeclarationNode(p[1][0], p[1][1]) + line, col = self.token_pos(p, 0) + p[0] = VarDeclarationNode(line, col, p[1][0], p[1][1]) # Case Rules @@ -153,7 +165,8 @@ def p_cases_list(self, p): def p_case(self, p): '''case : ID COLON TYPEID WITH expr''' - p[0] = OptionNode(p[1], p[3], p[5]) + line, col = self.token_pos(p, 0) + p[0] = OptionNode(line, col, p[1], p[3], p[5]) # Arith Operations # ------------------- @@ -178,20 +191,21 @@ def p_expr_binary(self, p): | expr LESS expr | expr LESSQ expr | expr EQUALS expr''' + line, col = self.token_pos(p, 2) if p[2] == '+': - p[0] = SumNode(p[1], p[3]) + p[0] = SumNode(line, col, p[1], p[3]) elif p[2] == '-': - p[0] = DiffNode(p[1], p[3]) + p[0] = DiffNode(line, col, p[1], p[3]) elif p[2] == '*': - p[0] = StarNode(p[1], p[3]) + p[0] = StarNode(line, col, p[1], p[3]) elif p[2] == '/': - p[0] = DivNode(p[1], p[3]) + p[0] = DivNode(line, col, p[1], p[3]) elif p[2] == '<': - p[0] = LessNode(p[1], p[3]) + p[0] = LessNode(line, col, p[1], p[3]) elif p[2] == '<=': - p[0] = LessEqualNode(p[1], p[3]) + p[0] = LessEqualNode(line, col, p[1], p[3]) elif p[2] == '=': - p[0] = EqualNode(p[1], p[3]) + p[0] = EqualNode(line, col, p[1], p[3]) # Unary Operations Rules @@ -199,12 +213,13 @@ def p_expr_unary(self, p): '''expr : BITNOT expr | ISVOID expr | NOT expr''' + line, col = self.token_pos(p, 1) if p[1] == '~': - p[0] = BitNotNode(p[2]) + p[0] = BitNotNode(line, col, p[2]) elif p[1].lower() == 'isvoid': - p[0] = IsVoidNode(p[2]) + p[0] = IsVoidNode(line, col, p[2]) elif p[1].lower() == 'not': - p[0] = NotNode(p[2]) + p[0] = NotNode(line, col, p[2]) def p_arith_basecall(self, p): '''arith : base_call''' @@ -216,17 +231,21 @@ def p_basecall(self, p): # Parent Call (Review) '''base_call : fact ARROBA TYPEID DOT func_call | fact''' try: - p[0] = ParentCallNode(p[1], p[3], p[5][0], p[5][1]) + line, col = self.token_pos(p, 2) + p[0] = ParentCallNode(line, col, p[1], p[3], p[5][0], p[5][1]) except: + line, col = self.token_pos(p, 0) p[0] = p[1] def p_factcall(self, p): '''fact : fact DOT func_call | func_call''' try: - p[0] = ExprCallNode(p[1], p[3][0], p[3][1]) + line, col = self.token_pos(p, 2) + p[0] = ExprCallNode(line, col, p[1], p[3][0], p[3][1]) except: - p[0] = SelfCallNode(p[1][0], p[1][1]) + line, col = self.token_pos(p, 0) + p[0] = SelfCallNode(line, col, p[1][0], p[1][1]) def p_func_call(self, p): '''func_call : ID LPAREN arg_list RPAREN''' @@ -260,19 +279,23 @@ def p_fact_group(self, p): def p_atom_int(self, p): '''atom : INTEGER''' - p[0] = IntegerNode(p[1]) + line, col = self.token_pos(p, 1) + p[0] = IntegerNode(line, col, p[1]) def p_atom_id(self, p): '''atom : ID''' - p[0] = VariableNode(p[1]) + line, col = self.token_pos(p, 1) + p[0] = VariableNode(line, col, p[1]) def p_atom_new(self, p): '''atom : NEW TYPEID''' - p[0] = NewNode(p[2]) + line, col = self.token_pos(p, 1) + p[0] = NewNode(line, col, p[2]) def p_atom_block(self, p): '''atom : LBRACE block RBRACE''' - p[0] = BlockNode(p[2]) + line, col = self.token_pos(p, 1) + p[0] = BlockNode(line, col, p[2]) def p_block(self, p): '''block : expr SEMI @@ -284,16 +307,18 @@ def p_block(self, p): def p_atom_bool(self, p): '''atom : BOOL''' - p[0] = BoolNode(p[1]) + line, col = self.token_pos(p, 1) + p[0] = BoolNode(line, col, p[1]) def p_atom_string(self, p): '''atom : STRING''' - p[0] = StringNode(p[1]) + line, col = self.token_pos(p, 1) + p[0] = StringNode(line, col, p[1]) def p_error(self, p): if p: line = self.lexer.lexer.lineno - col = find_column(self.lexer.lexer.lexdata, p.lexpos) + col = find_column(self.lexer.lexer.lexdata, p.lexpos) self.errors.append(SyntacticError(line, col, f"ERROR at or near {p.value}")) else: self.errors.append(SyntacticError(0, 0, "ERROR at or near EOF")) \ No newline at end of file diff --git a/src/main.py b/src/main.py index 823601d9..07d845b9 100644 --- a/src/main.py +++ b/src/main.py @@ -13,16 +13,18 @@ def main(): pipeline.submit_state(Reader('Reader')) pipeline.submit_state(CoolParser('Parser')) - pipeline.submit_state(FormatVisitor('Formatter', './ast.txt')) - pipeline.submit_state(TypeCollector('TCollector')) - pipeline.submit_state(TypeBuilder('TBuilder')) - pipeline.submit_state(VarCollector('VCollector')) - pipeline.submit_state(TypeChecker('TChecker')) + # pipeline.submit_state(FormatVisitor('Formatter', './ast.txt')) + # pipeline.submit_state(TypeCollector('TCollector')) + # pipeline.submit_state(TypeBuilder('TBuilder')) + # pipeline.submit_state(VarCollector('VCollector')) + # pipeline.submit_state(TypeChecker('TChecker')) - ast, context, scope = pipeline.run_pipeline(program) - print(context) - print('-'*25) - print(scope) + pipeline.run_pipeline(program) + + # ast, context, scope = pipeline.run_pipeline(program) + # print(context) + # print('-'*25) + # print(scope) pipeline.report_errors() diff --git a/src/tools/cmp_errors.py b/src/tools/cmp_errors.py index 084ded48..8341652e 100644 --- a/src/tools/cmp_errors.py +++ b/src/tools/cmp_errors.py @@ -48,15 +48,18 @@ class SyntacticError(Error): def __init__(self, row, col, message): super().__init__(row, col, SYNTACTIC_ERR, message) -class NameError(Error): +class CSemanticError(Error): + def __init__(self, row, col, message): + super().__init__(row, col, SEMANTIC_ERR, message) + +class CNameError(Error): def __init__(self, row, col, message): super().__init__(row, col, NAME_ERR, message) -class TypeError(Error): +class CTypeError(Error): def __init__(self, row, col, message): super().__init__(row, col, TYPE_ERR, message) -# Base Semantic for others Errors, redefine constructor -class BaseSemanticError(Error): +class CAttributeError(Error): def __init__(self, row, col, message): - super().__init__(row, col, SEMANTIC_ERR, message) \ No newline at end of file + super().__init__(row, col, ATTRIBUTE_ERR, message) \ No newline at end of file From e1c491c923bc19ed8de24971482d4370049a7310 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Tue, 3 Nov 2020 02:26:41 -0500 Subject: [PATCH 030/140] getting test response --- src/cl_ast/expressions/complex_exprs.py | 7 +++ src/cl_parser/coolparser.py | 20 ++++---- src/main.py | 20 ++++---- src/pipeline/pipeline.py | 7 ++- src/pipeline/state.py | 1 - src/semantic/context.py | 24 +++++++-- src/semantic/types.py | 11 +++++ src/tools/cmp_errors.py | 2 +- src/visitors/format_visitor.py | 41 ++++++++-------- src/visitors/type_builder.py | 7 ++- src/visitors/type_checker.py | 65 +++++++++++++++++-------- src/visitors/var_collector.py | 33 ++++++++++--- 12 files changed, 160 insertions(+), 78 deletions(-) diff --git a/src/cl_ast/expressions/complex_exprs.py b/src/cl_ast/expressions/complex_exprs.py index b135f7d7..66298f15 100644 --- a/src/cl_ast/expressions/complex_exprs.py +++ b/src/cl_ast/expressions/complex_exprs.py @@ -35,6 +35,13 @@ def __init__(self, row, col, init_list, expr): def __hash__(self): return id(self) +class LetDeclarationNode(ExpressionNode): + def __init__(self, row, col, idx, typex, expr=None): + super().__init__(row, col) + self.id = idx + self.type = typex + self.expr = expr + class BlockNode(ExpressionNode): def __init__(self, row, col, expr_list): super().__init__(row, col) diff --git a/src/cl_parser/coolparser.py b/src/cl_parser/coolparser.py index d4912124..e82c985c 100644 --- a/src/cl_parser/coolparser.py +++ b/src/cl_parser/coolparser.py @@ -21,7 +21,7 @@ def run(self, raw): def token_pos(self, p, idx): line = self.lexer.lexer.lineno col = find_column(self.lexer.lexer.lexdata, p.lexpos(idx)) - return line, col + return -1, -1 # Set the grammar start symbol start = 'program' @@ -29,7 +29,7 @@ def token_pos(self, p, idx): # Program Rule def p_program(self, p): '''program : class_list''' - line, col = self.token_pos(p, 0) + line, col = self.token_pos(p, 0) p[0] = ProgramNode(line, col, p[1]) # Empty Production @@ -50,7 +50,7 @@ def p_class_list(self, p): def p_def_class(self, p): '''def_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI''' - line, col = self.token_pos(p, 1) + line, col = self.token_pos(p, 2) if p[3].lower() == 'inherits': p[0] = ClassDeclarationNode(line, col, p[2], p[6], p[4]) else: @@ -148,10 +148,10 @@ def p_let_assign(self, p): | param''' try: line, col = self.token_pos(p, 2) - p[0] = VarDeclarationNode(line, col, p[1][0], p[1][1], p[3]) + p[0] = LetDeclarationNode(line, col, p[1][0], p[1][1], p[3]) except: - line, col = self.token_pos(p, 0) - p[0] = VarDeclarationNode(line, col, p[1][0], p[1][1]) + line, col = self.token_pos(p, 1) + p[0] = LetDeclarationNode(line, col, p[1][0], p[1][1]) # Case Rules @@ -165,7 +165,7 @@ def p_cases_list(self, p): def p_case(self, p): '''case : ID COLON TYPEID WITH expr''' - line, col = self.token_pos(p, 0) + line, col = self.token_pos(p, 1) p[0] = OptionNode(line, col, p[1], p[3], p[5]) # Arith Operations @@ -231,17 +231,17 @@ def p_basecall(self, p): # Parent Call (Review) '''base_call : fact ARROBA TYPEID DOT func_call | fact''' try: - line, col = self.token_pos(p, 2) + line, col = self.token_pos(p, 3) p[0] = ParentCallNode(line, col, p[1], p[3], p[5][0], p[5][1]) except: - line, col = self.token_pos(p, 0) + line, col = self.token_pos(p, 1) p[0] = p[1] def p_factcall(self, p): '''fact : fact DOT func_call | func_call''' try: - line, col = self.token_pos(p, 2) + line, col = self.token_pos(p, 1) p[0] = ExprCallNode(line, col, p[1], p[3][0], p[3][1]) except: line, col = self.token_pos(p, 0) diff --git a/src/main.py b/src/main.py index 07d845b9..7dbcd0ee 100644 --- a/src/main.py +++ b/src/main.py @@ -13,19 +13,17 @@ def main(): pipeline.submit_state(Reader('Reader')) pipeline.submit_state(CoolParser('Parser')) - # pipeline.submit_state(FormatVisitor('Formatter', './ast.txt')) - # pipeline.submit_state(TypeCollector('TCollector')) - # pipeline.submit_state(TypeBuilder('TBuilder')) - # pipeline.submit_state(VarCollector('VCollector')) - # pipeline.submit_state(TypeChecker('TChecker')) + pipeline.submit_state(TypeCollector('TCollector')) + pipeline.submit_state(TypeBuilder('TBuilder')) + pipeline.submit_state(VarCollector('VCollector')) + pipeline.submit_state(TypeChecker('TChecker')) - pipeline.run_pipeline(program) + #temporal + try: + ast, context, scope = pipeline.run_pipeline(program) + except: + pass - # ast, context, scope = pipeline.run_pipeline(program) - # print(context) - # print('-'*25) - # print(scope) - pipeline.report_errors() if pipeline.pipeline_errors: diff --git a/src/pipeline/pipeline.py b/src/pipeline/pipeline.py index 317a52ef..5ee4e2f6 100644 --- a/src/pipeline/pipeline.py +++ b/src/pipeline/pipeline.py @@ -12,12 +12,11 @@ def run_pipeline(self, inputx): res = inputx for state in self.states: res = state.run(res) - if state.stop: + self.pipeline_errors = state.errors + + if self.pipeline_errors: break - # collect errors from current state - self.pipeline_errors += state.errors - return res def report_errors(self): diff --git a/src/pipeline/state.py b/src/pipeline/state.py index 4d47cb1d..57d822dd 100644 --- a/src/pipeline/state.py +++ b/src/pipeline/state.py @@ -1,7 +1,6 @@ class State(object): def __init__(self, name): self.name = name - self.stop = False self.errors = [] def run(self, inputx): diff --git a/src/semantic/context.py b/src/semantic/context.py index d44791ed..999c8e10 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -69,8 +69,8 @@ def __init__(self, context=None): self.cls_scopes = { } if context: - for cls_name, cls in context.types.items(): - self.cls_scopes[cls_name] = ClassScope(cls_type=cls) + for cls_name, clsx in context.types.items(): + self.cls_scopes[cls_name] = ClassScope(cls_type=clsx) def __str__(self): res = ' Program Scope \n' + '-'*18 + '\nClasses in Program\n' + '-'*18 + '\n\n' @@ -89,6 +89,8 @@ def __init__(self, cls_type=None): self.self_var = VariableInfo('self', self.self_type) self.parent = None # using in backtrack search self.func_scopes = { fname: InnerScope(parent=self) for fname in cls_type.methods.keys() } + attr_names = [a.name for a in cls_type.attributes] + self.attr_scopes = { aname: InnerScope(parent=self) for aname in attr_names} def get_attribute(self, name): return self.self_var if name == 'self' else self.self_type.get_attribute(name) @@ -103,6 +105,8 @@ def __str__(self): res = 'Class Methods\n' + '-'*25 + '\n' for mname, s in self.func_scopes.items(): res += f'{mname}: {str(s)}\n' + for aname, s in self.attr_scopes.items(): + res += f'{aname}: {str(s)}\n' return res def __repr__(self): @@ -125,9 +129,23 @@ def define_variable(self, vname, vtype): raise ScopeError(SELF_IS_READONLY) info = VariableInfo(vname, vtype) - self.locals.append(info) + if info.name in [v.name for v in self.locals]: + raise ScopeError(f"Identifier {info.name} already defined in this scope") + else: + self.locals.append(info) return info + def redefine_variable(self, vname, vtype): + if vname == 'self': + raise ScopeError(SELF_IS_READONLY) + + try: + cvar = next(x for x in self.locals if x.name == vname) + cvar.type = vtype + return cvar + except: + return self.define_variable(vname, vtype) + def find_variable(self, vname): try: return next(x for x in self.locals if x.name == vname) diff --git a/src/semantic/types.py b/src/semantic/types.py index b561c834..c2abee51 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -30,6 +30,9 @@ def get_attribute(self, name:str): raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') def define_attribute(self, name:str, typex): + if name == 'self': + raise SemanticError(f'\'self\' cannot be the name of an attribute') + try: self.get_attribute(name) except SemanticError: @@ -51,6 +54,9 @@ def get_method(self, name:str): raise SemanticError(f'Method "{name}" is not defined in {self.name}.') def define_method(self, name:str, param_names:list, param_types:list, return_type): + if name == 'self': + raise SemanticError(f'\'self\' cannot be the name of an method') + if name in self.methods: raise SemanticError(f'Method "{name}" already defined in {self.name}') @@ -79,10 +85,15 @@ def __str__(self): def __repr__(self): return str(self) + class SELF_TYPE(Type): def __init__(self): Type.__init__(self, 'SELF_TYPE') + # not check conforms with self_type + def conforms_to(self, other): + return True + class ErrorType(Type): def __init__(self): Type.__init__(self, '') diff --git a/src/tools/cmp_errors.py b/src/tools/cmp_errors.py index 8341652e..08806968 100644 --- a/src/tools/cmp_errors.py +++ b/src/tools/cmp_errors.py @@ -14,7 +14,7 @@ WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' SELF_IS_READONLY = 'Variable "self" is read-only.' FORMAL_ERROR_SELF = '"self" identifier cannot be used as formal parameter' -LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' +LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in feature "%s".' INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' diff --git a/src/visitors/format_visitor.py b/src/visitors/format_visitor.py index 4b57c097..5fe78c2a 100644 --- a/src/visitors/format_visitor.py +++ b/src/visitors/format_visitor.py @@ -10,6 +10,7 @@ def __init__(self, sname, fname): def run(self, ast): printed_ast = self.visit(ast) f = open(self.fname, 'w') + f.write(printed_ast) f.close() return ast @@ -22,69 +23,69 @@ def visit(self, node, tabs): @visitor.when(ProgramNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ProgramNode [ ... ]' + ans = '\t' * tabs + f'\\__ProgramNode ({node.row},{node.col}) [ ... ]' statements = '\n'.join(self.visit(child, tabs + 1) for child in node.declarations) return f'{ans}\n{statements}' @visitor.when(ClassDeclarationNode) def visit(self, node, tabs=0): parent = '' if node.parent is None else f": {node.parent}" - ans = '\t' * tabs + f'\\__ClassDeclarationNode: class {node.id} {parent} {{ ... }}' + ans = '\t' * tabs + f'\\__ClassDeclarationNode ({node.row},{node.col}): class {node.id} {parent} {{ ... }}' features = '\n'.join(self.visit(child, tabs + 1) for child in node.features) return f'{ans}\n{features}' @visitor.when(AttrDeclarationNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__AttrDeclarationNode: {node.id} : {node.type}' + ans = '\t' * tabs + f'\\__AttrDeclarationNode ({node.row},{node.col}): {node.id} : {node.type}' return f'{ans}' @visitor.when(VarDeclarationNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__VarDeclarationNode: {node.id} : {node.type} = ' + ans = '\t' * tabs + f'\\__VarDeclarationNode ({node.row},{node.col}): {node.id} : {node.type} = ' expr = self.visit(node.expr, tabs + 1) return f'{ans}\n{expr}' @visitor.when(FuncDeclarationNode) def visit(self, node, tabs=0): params = ', '.join(':'.join(param) for param in node.params) - ans = '\t' * tabs + f'\\__FuncDeclarationNode: {node.id}({params}) : {node.type} -> ' + ans = '\t' * tabs + f'\\__FuncDeclarationNode ({node.row},{node.col}): {node.id}({params}) : {node.type} -> ' body = f'{self.visit(node.body, tabs + 1)}' # body = f'\n{self.visit(node.body, tabs + 1)}'.join(self.visit(child, tabs + 1) for child in node.body) return f'{ans}\n{body}' @visitor.when(ConstantNode) def visit(self, node, tabs=0): - return '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.lex}' + return '\t' * tabs + f'\\__ ({node.row},{node.col}){node.__class__.__name__}: {node.lex}' @visitor.when(BinaryOperationNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + ans = '\t' * tabs + f'\\__ ({node.row},{node.col}){node.__class__.__name__} ' left = self.visit(node.left, tabs + 1) right = self.visit(node.right, tabs + 1) return f'{ans}\n{left}\n{right}' @visitor.when(UnaryOperationNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__{node.__class__.__name__} ' + ans = '\t' * tabs + f'\\__ ({node.row},{node.col}){node.__class__.__name__} ' expr = self.visit(node.expr, tabs + 1) return f'{ans}\n{expr}' @visitor.when(AssignNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__AssignNode: {node.id} <- ' + ans = '\t' * tabs + f'\\__AssignNode ({node.row},{node.col}): {node.id} <- ' expr = self.visit(node.expr, tabs + 1) return f'{ans}\n{expr}' @visitor.when(WhileNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__{node.__class__.__name__}: while loop pool' + ans = '\t' * tabs + f'\\__{node.__class__.__name__}: while ({node.row},{node.col}) loop pool' cond = self.visit(node.cond, tabs + 1) expr = self.visit(node.expr, tabs + 1) return f'{ans}\n{cond}\n{expr}' @visitor.when(ConditionalNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: if then else fi' + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: if ({node.row},{node.col}) then else fi' cond = self.visit(node.cond, tabs + 1) stm = self.visit(node.stm, tabs + 1) else_stm = self.visit(node.else_stm, tabs + 1) @@ -92,34 +93,34 @@ def visit(self, node, tabs=0): @visitor.when(CaseNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: case of esac' + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: case ({node.row},{node.col}) of esac' expr = self.visit(node.expr, tabs + 1) case_list = '\n'.join(self.visit(child, tabs + 1) for child in node.case_list) return f'{ans}\n{expr}\n{case_list}' @visitor.when(OptionNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.id} : {node.typex} -> ' + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.id} : {node.typex} ({node.row},{node.col}) -> ' expr = self.visit(node.expr, tabs + 1) return f'{ans}\n{expr}' @visitor.when(BlockNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + '{ }' + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ({node.row},{node.col})' + '{ }' expr = '\n'.join(self.visit(child, tabs + 1) for child in node.expr_list) return f'{ans}\n{expr}' @visitor.when(NewNode) def visit(self, node, tabs=0): - return '\t' * tabs + f'\\__ NewNode: new {node.type}()' + return '\t' * tabs + f'\\__ NewNode ({node.row},{node.col}): new {node.type}()' @visitor.when(VariableNode) def visit(self, node, tabs=0): - return '\t' * tabs + f'\\__ VarAccessNode: {node.id}' + return '\t' * tabs + f'\\__ VarAccessNode ({node.row},{node.col}): {node.id}' @visitor.when(LetNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__} let in ' + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} let ({node.row},{node.col}) in ' init_list = '\n'.join(self.visit(arg, tabs + 1) for arg in node.init_list) expr = self.visit(node.expr, tabs + 1) return f'{ans}\n{init_list}\n{expr}' @@ -127,19 +128,19 @@ def visit(self, node, tabs=0): @visitor.when(ParentCallNode) def visit(self, node, tabs=0): obj = self.visit(node.obj, tabs + 1) - ans = '\t' * tabs + f'\\__ParentCallNode: @{node.type}.{node.id}(, ..., )' + ans = '\t' * tabs + f'\\__ParentCallNode ({node.row},{node.col}) : @{node.type}.{node.id}(, ..., )' args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) return f'{ans}\n{obj}\n{args}' @visitor.when(ExprCallNode) def visit(self, node, tabs=0): obj = self.visit(node.obj, tabs + 1) - ans = '\t' * tabs + f'\\__ExprCallNode: .{node.id}(, ..., )' + ans = '\t' * tabs + f'\\__ExprCallNode ({node.row},{node.col}) : .{node.id}(, ..., )' args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) return f'{ans}\n{obj}\n{args}' @visitor.when(SelfCallNode) def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__SelfCallNode: {node.id}(, ..., )' + ans = '\t' * tabs + f'\\__SelfCallNode ({node.row},{node.col}) : {node.id}(, ..., )' args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) return f'{ans}\n{args}' \ No newline at end of file diff --git a/src/visitors/type_builder.py b/src/visitors/type_builder.py index 319e663d..43d0fe03 100644 --- a/src/visitors/type_builder.py +++ b/src/visitors/type_builder.py @@ -56,12 +56,15 @@ def visit(self, node): current = parent while current: if current.name == self.current_type.name: - raise SemanticError('') + raise ContextError(f'{current.name} is involved in inheritance cycle') current = current.parent - except SemanticError as e: + except ContextError as e: parent = ErrorType() self.errors.append(e.text) # parent type missing + if node.parent in ['Int', 'String', 'Bool']: + self.errors.append('Invalid inherit in basic classes') + self.current_type.set_parent(parent) @visitor.when(FuncDeclarationNode) diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py index 7fb16083..cf2c9f63 100644 --- a/src/visitors/type_checker.py +++ b/src/visitors/type_checker.py @@ -51,13 +51,14 @@ def _check_args(self, meth, scope, args): self.errors.append(INCOMPATIBLE_TYPES % (ptype.name, atype.name)) def _join_types(self, ltypes): - + import itertools as itt + def path_to_objet(typex): path = [] c_type = typex while c_type: - path.append(c_type) + path = [c_type] + path c_type = c_type.parent return path @@ -65,12 +66,14 @@ def path_to_objet(typex): paths = [path_to_objet(typex) for typex in ltypes] tuples = zip(*paths) - for i, t in enumerate(tuples): - gr = itt.groupby(t) - if len(list(gr)) > 1: - return paths[0][i-1] - - return paths[0][-1] + jtype = None + + for t in tuples: + nxt = t[0] + if all(nxt == l for l in t): + jtype = nxt + + return jtype # Visitor Functions @@ -91,9 +94,10 @@ def visit(self, node, scope): @visitor.when(AttrDeclarationNode) def visit(self, node, scope): + ascope = scope.attr_scopes[node.id] vinfo = scope.get_attribute(node.id) if node.expr: - etype = self.visit(node.expr, scope) + etype = self.visit(node.expr, ascope) if not etype.conforms_to(vinfo.type): self.errors.append(INCOMPATIBLE_TYPES %(etype.name, vinfo.type.name)) return ErrorType() @@ -147,7 +151,7 @@ def visit(self, node, scope): rtype = self.visit(node.expr, scope) - if not vtype.conforms_to(rtype): + if not rtype.conforms_to(vtype): self.errors.append(INCOMPATIBLE_TYPES %(vtype.name, rtype.name)) return rtype @@ -188,7 +192,9 @@ def visit(self, node, scope): if ctype.name != 'Bool': self.errors.append(INCORRECT_TYPE %(ctype.name, 'Bool')) - return self.visit(node.expr, scope) + self.visit(node.expr, scope) + + return ObjectType() @visitor.when(ConditionalNode) def visit(self, node, scope): @@ -216,10 +222,10 @@ def visit(self, node, scope): etype = self.visit(node.expr, scope) new_scope = scope.expr_dict[node] - types = [t for opt, c_scp in zip(node.case_list, new_scope.children)] - + types = [self.visit(opt, c_scp) for opt, c_scp in zip(node.case_list, new_scope.children)] + return self._join_types([t[0] for t in types]) - + @visitor.when(OptionNode) def visit(self, node, scope): var_info = scope.find_variable(node.id) @@ -229,9 +235,27 @@ def visit(self, node, scope): @visitor.when(LetNode) def visit(self, node, scope): child_scope = scope.expr_dict[node] + + iscope = child_scope + for init in node.init_list: - self.visit(init, child_scope) - return self.visit(node.expr, child_scope) + self.visit(init, iscope) + iscope = iscope.children[0] + + return self.visit(node.expr, iscope) + + @visitor.when(LetDeclarationNode) + def visit(self, node, scope): + vinfo = scope.find_variable(node.id) + vtype = vinfo.type + + if node.expr: + etype = self.visit(node.expr, scope) + if not etype.conforms_to(vtype): + self.errors.append(INCOMPATIBLE_TYPES %(vtype.name, etype.name)) + return etype + + return vtype @visitor.when(BinaryArithOperationNode) def visit(self, node, scope): @@ -248,7 +272,7 @@ def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) if ltype != rtype != IntType(): - self.errors.append(BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name)) + self.errors.append(BOPERATION_NOT_DEFINED %('Comparison', ltype.name, rtype.name)) return ErrorType() return BoolType() @@ -258,7 +282,7 @@ def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) if ltype != rtype != IntType(): - self.errors.append(BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name)) + self.errors.append(BOPERATION_NOT_DEFINED %('Comparison', ltype.name, rtype.name)) return ErrorType() return BoolType() @@ -267,7 +291,10 @@ def visit(self, node, scope): def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) - + + if ltype in [IntType(), StringType(), BoolType()] and ltype != rtype: + self.errors.append(f'Invalid comparison operation between {ltype.name} and {rtype.name}') + return BoolType() @visitor.when(NotNode) diff --git a/src/visitors/var_collector.py b/src/visitors/var_collector.py index efe34798..b404fae6 100644 --- a/src/visitors/var_collector.py +++ b/src/visitors/var_collector.py @@ -39,7 +39,9 @@ def visit(self, node, scope): @visitor.when(AttrDeclarationNode) def visit(self, node, scope): - pass + ascope = scope.attr_scopes[node.id] + self.current_method = self.current_type.get_attribute(node.id) + self.visit(node.expr, ascope) @visitor.when(FuncDeclarationNode) def visit(self, node, scope): @@ -49,11 +51,10 @@ def visit(self, node, scope): for pname, ptype in node.params: try: if pname == 'self': - raise SemanticError(FORMAL_ERROR_SELF) + raise ScopeError(FORMAL_ERROR_SELF) func_scope.define_variable(pname, self.context.get_type(ptype)) - except SemanticError as e: + except ScopeError as e: self.errors.append(e.text) - func_scope.define_variable(pname, ErrorType()) self.visit(node.body, func_scope) @@ -66,7 +67,7 @@ def visit(self, node, scope): try: vtype = self.context.get_type(node.type) scope.define_variable(node.id, vtype) - except SemanticError as e: + except ScopeError as e: scope.define_variable(node.id, ErrorType()) self.errors.append(e.texts) @@ -76,6 +77,9 @@ def visit(self, node, scope): @visitor.when(AssignNode) def visit(self, node, scope): vinfo = scope.find_variable(node.id) + if vinfo.name == 'self': + self.errors.append(SELF_IS_READONLY) + if vinfo is None: self.errors.append(VARIABLE_NOT_DEFINED %(node.id, self.current_method.name)) scope.define_variable(node.id, ErrorType()) @@ -92,9 +96,24 @@ def visit(self, node, scope): new_scope = scope.create_child() scope.expr_dict[node] = new_scope + iscope = new_scope + for init in node.init_list: - self.visit(init, new_scope) - self.visit(node.expr, new_scope) + self.visit(init, iscope) + iscope = iscope.create_child() + + self.visit(node.expr, iscope) + + @visitor.when(LetDeclarationNode) + def visit(self, node, scope): + try: + vtype = self.context.get_type(node.type) + scope.redefine_variable(node.id, vtype) + except ScopeError as e: + self.errors.append(e.text) + + if node.expr is not None: + self.visit(node.expr, scope) @visitor.when(VariableNode) def visit(self, node, scope): From 42f7599a55a09bea81120a30317851790a67c616 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Thu, 5 Nov 2020 14:37:02 -0500 Subject: [PATCH 031/140] resolving semantic tests --- src/cl_ast/astNode.py | 2 +- src/cl_ast/declarations.py | 10 ++ src/cl_ast/expressions/complex_exprs.py | 1 + src/cl_lexer/coollexer.py | 11 ++- src/cl_parser/coolparser.py | 124 ++++++++++-------------- src/cl_parser/parsetab.py | 97 +++++++++--------- src/main.py | 2 +- src/semantic/context.py | 6 +- src/semantic/types.py | 9 ++ src/visitors/type_builder.py | 34 ++++--- src/visitors/type_checker.py | 95 +++++++++--------- src/visitors/type_collector.py | 2 +- src/visitors/var_collector.py | 20 ++-- 13 files changed, 208 insertions(+), 205 deletions(-) diff --git a/src/cl_ast/astNode.py b/src/cl_ast/astNode.py index 8f134430..be011e8e 100644 --- a/src/cl_ast/astNode.py +++ b/src/cl_ast/astNode.py @@ -1,5 +1,5 @@ class ASTNode(object): - def __init__(self, row, col): + def __init__(self, row=0, col=0): self.row = row self.col = col pass \ No newline at end of file diff --git a/src/cl_ast/declarations.py b/src/cl_ast/declarations.py index ba29f233..7d49d9f3 100644 --- a/src/cl_ast/declarations.py +++ b/src/cl_ast/declarations.py @@ -6,6 +6,7 @@ def __init__(self, row, col, idx, features, parent = None): self.id = idx self.parent = parent self.features = self._sort_features(features) + self.parent_pos = (0, 0) def _sort_features(self, features): sort_f = [] @@ -22,6 +23,7 @@ def __init__(self, row, col, idx, typex, expr=None): self.id = idx self.type = typex self.expr = expr + self.type_pos = (0, 0) class FuncDeclarationNode(ASTNode): def __init__(self, row, col, idx, params, return_type, body): @@ -30,6 +32,14 @@ def __init__(self, row, col, idx, params, return_type, body): self.params = params self.type = return_type self.body = body + self.type_pos = (0, 0) + +class FormalParamNode(ASTNode): + def __init__(self, row, col, idx, typex): + super().__init__(row, col) + self.id = idx + self.type = typex + self.type_pos = (0, 0) class VarDeclarationNode(ASTNode): def __init__(self, row, col, idx, typex, expr=None): diff --git a/src/cl_ast/expressions/complex_exprs.py b/src/cl_ast/expressions/complex_exprs.py index 66298f15..bec5018a 100644 --- a/src/cl_ast/expressions/complex_exprs.py +++ b/src/cl_ast/expressions/complex_exprs.py @@ -41,6 +41,7 @@ def __init__(self, row, col, idx, typex, expr=None): self.id = idx self.type = typex self.expr = expr + self.type_pos = (0, 0) class BlockNode(ExpressionNode): def __init__(self, row, col, expr_list): diff --git a/src/cl_lexer/coollexer.py b/src/cl_lexer/coollexer.py index a5f8e3ef..cf361186 100755 --- a/src/cl_lexer/coollexer.py +++ b/src/cl_lexer/coollexer.py @@ -17,6 +17,12 @@ def input(self, raw): def token(self): return self.lexer.token() + def lineno(self): + return self.lexer.lineno + + def lexpos(self): + return self.lexer.lexpos + def run(self, inputx): self.lexer.input(inputx) toks = [] @@ -207,8 +213,7 @@ def t_ID(self, t): # Line Comments rule def t_COMMENT(self, t): - r'--.*($|\n)' - t.lexer.lineno += 1 + r"\-\-[^\n]*" pass # Track line numbers @@ -217,7 +222,7 @@ def t_newline(self, t): t.lexer.lineno += len(t.value) # Ignored characters - t_ignore = ' \t\r\v\f' + t_ignore = ' \t\r\f' #Error handling rule def t_error(self, t): diff --git a/src/cl_parser/coolparser.py b/src/cl_parser/coolparser.py index e82c985c..0e302dc1 100644 --- a/src/cl_parser/coolparser.py +++ b/src/cl_parser/coolparser.py @@ -14,23 +14,17 @@ def __init__(self, name, **kwargs): self.parser = yacc.yacc(module=self) def run(self, raw): - ast = self.parser.parse(raw, lexer=self.lexer) + ast = self.parser.parse(raw, lexer=self.lexer.lexer) self.errors = self.lexer.errors + self.errors return ast - def token_pos(self, p, idx): - line = self.lexer.lexer.lineno - col = find_column(self.lexer.lexer.lexdata, p.lexpos(idx)) - return -1, -1 - # Set the grammar start symbol start = 'program' # Program Rule def p_program(self, p): '''program : class_list''' - line, col = self.token_pos(p, 0) - p[0] = ProgramNode(line, col, p[1]) + p[0] = ProgramNode(0, 0, p[1]) # Empty Production def p_empty(self, p): @@ -50,11 +44,11 @@ def p_class_list(self, p): def p_def_class(self, p): '''def_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI''' - line, col = self.token_pos(p, 2) if p[3].lower() == 'inherits': - p[0] = ClassDeclarationNode(line, col, p[2], p[6], p[4]) + p[0] = ClassDeclarationNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[2], p[6], p[4]) + p[0].parent_pos = (p.lineno(4), find_column(p.lexer.lexdata, p.lexpos(4))) else: - p[0] = ClassDeclarationNode(line, col, p[2], p[4]) + p[0] = ClassDeclarationNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[2], p[4]) # Class Feature List Rules def p_feature_list(self, p): @@ -70,17 +64,17 @@ def p_feature_list(self, p): def p_def_attr(self, p): '''def_attr : ID COLON TYPEID | ID COLON TYPEID ASSIGN expr''' - line, col = self.token_pos(p, 1) try: - p[0] = AttrDeclarationNode(line, col, p[1], p[3], p[5]) + p[0] = AttrDeclarationNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3], p[5]) except: - p[0] = AttrDeclarationNode(line, col, p[1], p[3]) + p[0] = AttrDeclarationNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3]) + p[0].type_pos = (p.lineno(3), find_column(p.lexer.lexdata, p.lexpos(3))) # Func Definition Rules def p_def_func(self, p): '''def_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE''' - line, col = self.token_pos(p, 1) - p[0] = FuncDeclarationNode(line, col, p[1], p[3], p[6], p[8]) + p[0] = FuncDeclarationNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3], p[6], p[8]) + p[0].type_pos = (p.lineno(6), find_column(p.lexer.lexdata, p.lexpos(6))) # Func Parameters List Rules def p_param_list_ept(self, p): @@ -102,7 +96,7 @@ def p_param_build(self, p): # Parameter Rule def p_param(self, p): '''param : ID COLON TYPEID''' - p[0] = (p[1], p[3]) # (ID, TYPE) + p[0] = FormalParamNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3]) # (ID, TYPE) # Expression Rules # ------------------ @@ -112,21 +106,19 @@ def p_expr(self, p): | CASE expr OF cases_list ESAC | IF expr THEN expr ELSE expr FI | WHILE expr LOOP expr POOL''' - line, col = self.token_pos(p, 1) if p[1].lower() == 'let': - p[0] = LetNode(line, col, p[2], p[4]) + p[0] = LetNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2], p[4]) elif p[1].lower() == 'case': - p[0] = CaseNode(line, col, p[2], p[4]) + p[0] = CaseNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2], p[4]) elif p[1].lower() == 'if': - p[0] = ConditionalNode(line, col, p[2], p[4], p[6]) + p[0] = ConditionalNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2], p[4], p[6]) elif p[1].lower() == 'while': - p[0] = WhileNode(line, col, p[2], p[4]) + p[0] = WhileNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2], p[4]) # Assign Production def p_expr_assign(self, p): '''expr : ID ASSIGN expr''' - line, col = self.token_pos(p, 2) - p[0] = AssignNode(line, col, p[1], p[3]) + p[0] = AssignNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3]) # Precedence Production def p_expr_arith(self, p): @@ -144,14 +136,13 @@ def p_let_list(self, p): p[0] = [ p[1] ] def p_let_assign(self, p): - '''let_assign : param ASSIGN expr - | param''' + '''let_assign : ID COLON TYPEID ASSIGN expr + | ID COLON TYPEID''' try: - line, col = self.token_pos(p, 2) - p[0] = LetDeclarationNode(line, col, p[1][0], p[1][1], p[3]) + p[0] = LetDeclarationNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3], p[5]) except: - line, col = self.token_pos(p, 1) - p[0] = LetDeclarationNode(line, col, p[1][0], p[1][1]) + p[0] = LetDeclarationNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3]) + p[0].type_pos = (p.lineno(3), find_column(p.lexer.lexdata, p.lexpos(3))) # Case Rules @@ -165,20 +156,19 @@ def p_cases_list(self, p): def p_case(self, p): '''case : ID COLON TYPEID WITH expr''' - line, col = self.token_pos(p, 1) - p[0] = OptionNode(line, col, p[1], p[3], p[5]) + p[0] = OptionNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3], p[5]) # Arith Operations # ------------------- # Operators Precedence precedence = ( - ('right', 'BITNOT'), - ('right', 'ISVOID'), - ('left', 'STAR', 'DIVIDE'), - ('left', 'PLUS', 'MINUS'), + ('right', 'NOT'), ('nonassoc', 'LESS', 'LESSQ', 'EQUALS'), - ('right', 'NOT') + ('left', 'PLUS', 'MINUS'), + ('left', 'STAR', 'DIVIDE'), + ('right', 'ISVOID'), + ('right', 'BITNOT'), ) # Binary Operations Rules @@ -191,21 +181,20 @@ def p_expr_binary(self, p): | expr LESS expr | expr LESSQ expr | expr EQUALS expr''' - line, col = self.token_pos(p, 2) if p[2] == '+': - p[0] = SumNode(line, col, p[1], p[3]) + p[0] = SumNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) elif p[2] == '-': - p[0] = DiffNode(line, col, p[1], p[3]) + p[0] = DiffNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) elif p[2] == '*': - p[0] = StarNode(line, col, p[1], p[3]) + p[0] = StarNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) elif p[2] == '/': - p[0] = DivNode(line, col, p[1], p[3]) + p[0] = DivNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) elif p[2] == '<': - p[0] = LessNode(line, col, p[1], p[3]) + p[0] = LessNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) elif p[2] == '<=': - p[0] = LessEqualNode(line, col, p[1], p[3]) + p[0] = LessEqualNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) elif p[2] == '=': - p[0] = EqualNode(line, col, p[1], p[3]) + p[0] = EqualNode(p.lineno(2), find_column(p.lexer.lexdata, p.lexpos(2)), p[1], p[3]) # Unary Operations Rules @@ -213,13 +202,12 @@ def p_expr_unary(self, p): '''expr : BITNOT expr | ISVOID expr | NOT expr''' - line, col = self.token_pos(p, 1) if p[1] == '~': - p[0] = BitNotNode(line, col, p[2]) + p[0] = BitNotNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2]) elif p[1].lower() == 'isvoid': - p[0] = IsVoidNode(line, col, p[2]) + p[0] = IsVoidNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2]) elif p[1].lower() == 'not': - p[0] = NotNode(line, col, p[2]) + p[0] = NotNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2]) def p_arith_basecall(self, p): '''arith : base_call''' @@ -228,28 +216,20 @@ def p_arith_basecall(self, p): # Function Call Rules def p_basecall(self, p): # Parent Call (Review) - '''base_call : fact ARROBA TYPEID DOT func_call + '''base_call : fact ARROBA TYPEID DOT ID LPAREN arg_list RPAREN | fact''' try: - line, col = self.token_pos(p, 3) - p[0] = ParentCallNode(line, col, p[1], p[3], p[5][0], p[5][1]) + p[0] = ParentCallNode(p.lineno(5), find_column(p.lexer.lexdata, p.lexpos(5)), p[1], p[3], p[5], p[7]) except: - line, col = self.token_pos(p, 1) p[0] = p[1] def p_factcall(self, p): - '''fact : fact DOT func_call - | func_call''' + '''fact : fact DOT ID LPAREN arg_list RPAREN + | ID LPAREN arg_list RPAREN''' try: - line, col = self.token_pos(p, 1) - p[0] = ExprCallNode(line, col, p[1], p[3][0], p[3][1]) + p[0] = ExprCallNode(p.lineno(3), find_column(p.lexer.lexdata, p.lexpos(3)), p[1], p[3], p[5]) except: - line, col = self.token_pos(p, 0) - p[0] = SelfCallNode(line, col, p[1][0], p[1][1]) - - def p_func_call(self, p): - '''func_call : ID LPAREN arg_list RPAREN''' - p[0] = (p[1], p[3]) + p[0] = SelfCallNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1], p[3]) def p_arglist_ept(self, p): '''arg_list : empty''' @@ -279,23 +259,19 @@ def p_fact_group(self, p): def p_atom_int(self, p): '''atom : INTEGER''' - line, col = self.token_pos(p, 1) - p[0] = IntegerNode(line, col, p[1]) + p[0] = IntegerNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1]) def p_atom_id(self, p): '''atom : ID''' - line, col = self.token_pos(p, 1) - p[0] = VariableNode(line, col, p[1]) + p[0] = VariableNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1]) def p_atom_new(self, p): '''atom : NEW TYPEID''' - line, col = self.token_pos(p, 1) - p[0] = NewNode(line, col, p[2]) + p[0] = NewNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2]) def p_atom_block(self, p): '''atom : LBRACE block RBRACE''' - line, col = self.token_pos(p, 1) - p[0] = BlockNode(line, col, p[2]) + p[0] = BlockNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[2]) def p_block(self, p): '''block : expr SEMI @@ -307,13 +283,11 @@ def p_block(self, p): def p_atom_bool(self, p): '''atom : BOOL''' - line, col = self.token_pos(p, 1) - p[0] = BoolNode(line, col, p[1]) + p[0] = BoolNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1]) def p_atom_string(self, p): '''atom : STRING''' - line, col = self.token_pos(p, 1) - p[0] = StringNode(line, col, p[1]) + p[0] = StringNode(p.lineno(1), find_column(p.lexer.lexdata, p.lexpos(1)), p[1]) def p_error(self, p): if p: diff --git a/src/cl_parser/parsetab.py b/src/cl_parser/parsetab.py index 75bfc61a..e6038ca5 100644 --- a/src/cl_parser/parsetab.py +++ b/src/cl_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programrightBITNOTrightISVOIDleftSTARDIVIDEleftPLUSMINUSnonassocLESSLESSQEQUALSrightNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ERROR ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : emptyparam_list : param_buildparam_build : param empty\n | param COMMA param_buildparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : param ASSIGN expr\n | paramcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprexpr : expr PLUS expr\n | expr MINUS expr\n | expr STAR expr\n | expr DIVIDE expr\n | expr LESS expr\n | expr LESSQ expr\n | expr EQUALS exprexpr : BITNOT expr\n | ISVOID expr\n | NOT exprarith : base_callbase_call : fact ARROBA TYPEID DOT func_call\n | factfact : fact DOT func_call\n | func_callfunc_call : ID LPAREN arg_list RPARENarg_list : emptyarg_list : arg_buildarg_build : expr empty\n | expr COMMA arg_buildfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' +_lr_signature = 'programrightNOTnonassocLESSLESSQEQUALSleftPLUSMINUSleftSTARDIVIDErightISVOIDrightBITNOTARROBA ASSIGN BITNOT BOOL CASE CLASS COLON COMMA DIVIDE DOT ELSE EQUALS ERROR ESAC FI ID IF IN INHERITS INTEGER ISVOID LBRACE LESS LESSQ LET LOOP LPAREN MINUS NEW NOT OF PLUS POOL RBRACE RPAREN SEMI STAR STRING THEN TYPEID WHILE WITHprogram : class_listempty :class_list : def_class\n | def_class class_listdef_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI\n | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMIfeature_list : empty\n | def_attr SEMI feature_list\n | def_func SEMI feature_listdef_attr : ID COLON TYPEID\n | ID COLON TYPEID ASSIGN exprdef_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACEparam_list : emptyparam_list : param_buildparam_build : param empty\n | param COMMA param_buildparam : ID COLON TYPEIDexpr : LET let_list IN expr\n | CASE expr OF cases_list ESAC\n | IF expr THEN expr ELSE expr FI\n | WHILE expr LOOP expr POOLexpr : ID ASSIGN exprexpr : arithlet_list : let_assign\n | let_assign COMMA let_listlet_assign : ID COLON TYPEID ASSIGN expr\n | ID COLON TYPEIDcases_list : case SEMI\n | case SEMI cases_listcase : ID COLON TYPEID WITH exprexpr : expr PLUS expr\n | expr MINUS expr\n | expr STAR expr\n | expr DIVIDE expr\n | expr LESS expr\n | expr LESSQ expr\n | expr EQUALS exprexpr : BITNOT expr\n | ISVOID expr\n | NOT exprarith : base_callbase_call : fact ARROBA TYPEID DOT ID LPAREN arg_list RPAREN\n | factfact : fact DOT ID LPAREN arg_list RPAREN\n | ID LPAREN arg_list RPARENarg_list : emptyarg_list : arg_buildarg_build : expr empty\n | expr COMMA arg_buildfact : atomfact : LPAREN expr RPARENatom : INTEGERatom : IDatom : NEW TYPEIDatom : LBRACE block RBRACEblock : expr SEMI\n | expr SEMI blockatom : BOOLatom : STRING' -_lr_action_items = {'CLASS':([0,3,21,60,],[4,4,-5,-6,]),'$end':([1,2,3,5,21,60,],[0,-1,-3,-4,-5,-6,]),'TYPEID':([4,8,18,32,53,58,79,128,],[6,14,24,57,82,85,104,134,]),'LBRACE':([6,14,31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,85,98,100,102,103,109,110,113,129,136,],[7,20,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,110,54,54,54,54,54,54,54,54,54,]),'INHERITS':([6,],[8,]),'RBRACE':([7,9,10,16,17,20,22,23,30,37,43,47,48,49,50,52,55,56,76,77,78,82,83,86,91,92,93,94,95,96,97,105,107,108,109,111,114,123,124,126,130,131,137,],[-2,15,-7,-2,-2,-2,-8,-9,36,-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,108,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-57,-46,-18,-58,132,-19,-21,-42,-20,]),'ID':([7,16,17,19,20,31,35,39,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,80,98,99,100,101,102,103,109,110,113,122,127,129,136,],[13,13,13,25,13,37,25,25,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,106,37,25,37,119,37,37,37,37,37,106,119,37,37,]),'SEMI':([11,12,15,24,36,37,38,43,47,48,49,50,52,55,56,76,77,78,82,84,86,91,92,93,94,95,96,97,105,107,108,111,114,118,126,130,131,132,137,138,],[16,17,21,-10,60,-54,-11,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,109,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,127,-19,-21,-42,-12,-20,-30,]),'COLON':([13,25,33,119,],[18,32,58,128,]),'LPAREN':([13,31,37,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,106,109,110,113,129,136,],[19,51,62,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,62,51,51,51,51,51,]),'RPAREN':([19,26,27,28,29,34,37,43,47,48,49,50,52,55,56,57,59,62,76,77,78,81,82,86,87,88,89,90,91,92,93,94,95,96,97,105,107,108,111,112,114,125,126,130,131,137,],[-2,33,-13,-14,-2,-15,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,-16,-2,-38,-39,-40,107,-55,-22,111,-47,-48,-2,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-49,-18,-50,-19,-21,-42,-20,]),'ASSIGN':([24,37,57,72,],[31,61,-17,100,]),'COMMA':([29,37,43,47,48,49,50,52,55,56,57,71,72,76,77,78,82,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,126,130,131,137,],[35,-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,99,-27,-38,-39,-40,-55,-22,113,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-26,-19,-21,-42,-20,]),'LET':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'CASE':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'IF':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'WHILE':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'BITNOT':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'ISVOID':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'NOT':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'INTEGER':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,]),'NEW':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'BOOL':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,]),'STRING':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'ARROBA':([37,48,49,50,52,55,56,82,105,107,108,111,],[-54,79,-45,-51,-53,-59,-60,-55,-44,-52,-56,-46,]),'DOT':([37,48,49,50,52,55,56,82,104,105,107,108,111,],[-54,80,-45,-51,-53,-59,-60,-55,122,-44,-52,-56,-46,]),'PLUS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,63,-23,-41,-43,-45,-51,-53,-59,-60,63,63,63,63,63,-40,63,-55,63,63,63,-31,-32,63,63,-35,-36,-37,-44,-52,-56,-46,63,63,63,63,63,-19,-21,-42,63,-20,63,]),'MINUS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,64,-23,-41,-43,-45,-51,-53,-59,-60,64,64,64,64,64,-40,64,-55,64,64,64,-31,-32,64,64,-35,-36,-37,-44,-52,-56,-46,64,64,64,64,64,-19,-21,-42,64,-20,64,]),'STAR':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,65,-23,-41,-43,-45,-51,-53,-59,-60,65,65,65,65,65,-40,65,-55,65,65,65,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,65,65,65,65,65,-19,-21,-42,65,-20,65,]),'DIVIDE':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,66,-23,-41,-43,-45,-51,-53,-59,-60,66,66,66,66,66,-40,66,-55,66,66,66,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,66,66,66,66,66,-19,-21,-42,66,-20,66,]),'LESS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,67,-23,-41,-43,-45,-51,-53,-59,-60,67,67,67,67,67,-40,67,-55,67,67,67,67,67,67,67,None,None,None,-44,-52,-56,-46,67,67,67,67,67,-19,-21,-42,67,-20,67,]),'LESSQ':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,68,-23,-41,-43,-45,-51,-53,-59,-60,68,68,68,68,68,-40,68,-55,68,68,68,68,68,68,68,None,None,None,-44,-52,-56,-46,68,68,68,68,68,-19,-21,-42,68,-20,68,]),'EQUALS':([37,38,43,47,48,49,50,52,55,56,73,74,75,76,77,78,81,82,84,86,90,91,92,93,94,95,96,97,105,107,108,111,114,116,120,121,124,126,130,131,135,137,138,],[-54,69,-23,-41,-43,-45,-51,-53,-59,-60,69,69,69,69,69,-40,69,-55,69,69,69,69,69,69,69,None,None,None,-44,-52,-56,-46,69,69,69,69,69,-19,-21,-42,69,-20,69,]),'OF':([37,43,47,48,49,50,52,55,56,73,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,101,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'THEN':([37,43,47,48,49,50,52,55,56,74,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,102,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'LOOP':([37,43,47,48,49,50,52,55,56,75,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,103,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,-20,]),'IN':([37,43,47,48,49,50,52,55,56,57,70,71,72,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,115,116,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-17,98,-24,-27,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-25,-26,-19,-21,-42,-20,]),'ELSE':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,120,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,129,-19,-21,-42,-20,]),'POOL':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,121,126,130,131,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,130,-19,-21,-42,-20,]),'FI':([37,43,47,48,49,50,52,55,56,76,77,78,82,86,91,92,93,94,95,96,97,105,107,108,111,114,126,130,131,135,137,],[-54,-23,-41,-43,-45,-51,-53,-59,-60,-38,-39,-40,-55,-22,-31,-32,-33,-34,-35,-36,-37,-44,-52,-56,-46,-18,-19,-21,-42,137,-20,]),'ESAC':([117,127,133,],[126,-28,-29,]),'WITH':([134,],[136,]),} +_lr_action_items = {'CLASS':([0,3,21,59,],[4,4,-5,-6,]),'$end':([1,2,3,5,21,59,],[0,-1,-3,-4,-5,-6,]),'TYPEID':([4,8,18,32,52,57,78,99,128,],[6,14,24,56,81,84,103,114,136,]),'LBRACE':([6,14,31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,84,97,101,102,107,108,111,121,125,129,138,140,],[7,20,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,108,53,53,53,53,53,53,53,53,53,53,53,]),'INHERITS':([6,],[8,]),'RBRACE':([7,9,10,16,17,20,22,23,30,37,43,47,48,50,51,54,55,75,76,77,81,82,85,90,91,92,93,94,95,96,105,106,107,109,112,122,123,126,130,139,141,144,],[-2,15,-7,-2,-2,-2,-8,-9,36,-53,-23,-41,-43,-50,-52,-58,-59,-38,-39,-40,-54,106,-22,-31,-32,-33,-34,-35,-36,-37,-51,-55,-56,-45,-18,-57,133,-19,-21,-44,-20,-42,]),'ID':([7,16,17,19,20,31,35,39,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,79,97,98,100,101,102,107,108,111,120,121,125,127,129,138,140,],[13,13,13,25,13,37,25,71,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,104,37,71,117,37,37,37,37,37,131,37,37,117,37,37,37,]),'SEMI':([11,12,15,24,36,37,38,43,47,48,50,51,54,55,75,76,77,81,83,85,90,91,92,93,94,95,96,105,106,109,112,116,126,130,133,139,141,143,144,],[16,17,21,-10,59,-53,-11,-23,-41,-43,-50,-52,-58,-59,-38,-39,-40,-54,107,-22,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-18,127,-19,-21,-12,-44,-20,-30,-42,]),'COLON':([13,25,33,71,117,],[18,32,57,99,128,]),'LPAREN':([13,31,37,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,104,107,108,111,121,125,129,131,138,140,],[19,49,61,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,121,49,49,49,49,49,49,138,49,49,]),'RPAREN':([19,26,27,28,29,34,37,43,47,48,50,51,54,55,56,58,61,75,76,77,80,81,85,86,87,88,89,90,91,92,93,94,95,96,105,106,109,110,112,121,124,126,130,132,138,139,141,142,144,],[-2,33,-13,-14,-2,-15,-53,-23,-41,-43,-50,-52,-58,-59,-17,-16,-2,-38,-39,-40,105,-54,-22,109,-46,-47,-2,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-48,-18,-2,-49,-19,-21,139,-2,-44,-20,144,-42,]),'ASSIGN':([24,37,114,],[31,60,125,]),'COMMA':([29,37,43,47,48,50,51,54,55,56,70,75,76,77,81,85,89,90,91,92,93,94,95,96,105,106,109,112,114,126,130,134,139,141,144,],[35,-53,-23,-41,-43,-50,-52,-58,-59,-17,98,-38,-39,-40,-54,-22,111,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-18,-27,-19,-21,-26,-44,-20,-42,]),'LET':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'CASE':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'IF':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'WHILE':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'BITNOT':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,]),'ISVOID':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,]),'NOT':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,]),'INTEGER':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'NEW':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,]),'BOOL':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'STRING':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,]),'ARROBA':([37,48,50,51,54,55,81,105,106,109,139,],[-53,78,-50,-52,-58,-59,-54,-51,-55,-45,-44,]),'DOT':([37,48,50,51,54,55,81,103,105,106,109,139,],[-53,79,-50,-52,-58,-59,-54,120,-51,-55,-45,-44,]),'PLUS':([37,38,43,47,48,50,51,54,55,72,73,74,75,76,77,80,81,83,85,89,90,91,92,93,94,95,96,105,106,109,112,118,119,123,126,130,134,137,139,141,143,144,],[-53,62,-23,-41,-43,-50,-52,-58,-59,62,62,62,-38,-39,62,62,-54,62,62,62,-31,-32,-33,-34,62,62,62,-51,-55,-45,62,62,62,62,-19,-21,62,62,-44,-20,62,-42,]),'MINUS':([37,38,43,47,48,50,51,54,55,72,73,74,75,76,77,80,81,83,85,89,90,91,92,93,94,95,96,105,106,109,112,118,119,123,126,130,134,137,139,141,143,144,],[-53,63,-23,-41,-43,-50,-52,-58,-59,63,63,63,-38,-39,63,63,-54,63,63,63,-31,-32,-33,-34,63,63,63,-51,-55,-45,63,63,63,63,-19,-21,63,63,-44,-20,63,-42,]),'STAR':([37,38,43,47,48,50,51,54,55,72,73,74,75,76,77,80,81,83,85,89,90,91,92,93,94,95,96,105,106,109,112,118,119,123,126,130,134,137,139,141,143,144,],[-53,64,-23,-41,-43,-50,-52,-58,-59,64,64,64,-38,-39,64,64,-54,64,64,64,64,64,-33,-34,64,64,64,-51,-55,-45,64,64,64,64,-19,-21,64,64,-44,-20,64,-42,]),'DIVIDE':([37,38,43,47,48,50,51,54,55,72,73,74,75,76,77,80,81,83,85,89,90,91,92,93,94,95,96,105,106,109,112,118,119,123,126,130,134,137,139,141,143,144,],[-53,65,-23,-41,-43,-50,-52,-58,-59,65,65,65,-38,-39,65,65,-54,65,65,65,65,65,-33,-34,65,65,65,-51,-55,-45,65,65,65,65,-19,-21,65,65,-44,-20,65,-42,]),'LESS':([37,38,43,47,48,50,51,54,55,72,73,74,75,76,77,80,81,83,85,89,90,91,92,93,94,95,96,105,106,109,112,118,119,123,126,130,134,137,139,141,143,144,],[-53,66,-23,-41,-43,-50,-52,-58,-59,66,66,66,-38,-39,66,66,-54,66,66,66,-31,-32,-33,-34,None,None,None,-51,-55,-45,66,66,66,66,-19,-21,66,66,-44,-20,66,-42,]),'LESSQ':([37,38,43,47,48,50,51,54,55,72,73,74,75,76,77,80,81,83,85,89,90,91,92,93,94,95,96,105,106,109,112,118,119,123,126,130,134,137,139,141,143,144,],[-53,67,-23,-41,-43,-50,-52,-58,-59,67,67,67,-38,-39,67,67,-54,67,67,67,-31,-32,-33,-34,None,None,None,-51,-55,-45,67,67,67,67,-19,-21,67,67,-44,-20,67,-42,]),'EQUALS':([37,38,43,47,48,50,51,54,55,72,73,74,75,76,77,80,81,83,85,89,90,91,92,93,94,95,96,105,106,109,112,118,119,123,126,130,134,137,139,141,143,144,],[-53,68,-23,-41,-43,-50,-52,-58,-59,68,68,68,-38,-39,68,68,-54,68,68,68,-31,-32,-33,-34,None,None,None,-51,-55,-45,68,68,68,68,-19,-21,68,68,-44,-20,68,-42,]),'OF':([37,43,47,48,50,51,54,55,72,75,76,77,81,85,90,91,92,93,94,95,96,105,106,109,112,126,130,139,141,144,],[-53,-23,-41,-43,-50,-52,-58,-59,100,-38,-39,-40,-54,-22,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-18,-19,-21,-44,-20,-42,]),'THEN':([37,43,47,48,50,51,54,55,73,75,76,77,81,85,90,91,92,93,94,95,96,105,106,109,112,126,130,139,141,144,],[-53,-23,-41,-43,-50,-52,-58,-59,101,-38,-39,-40,-54,-22,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-18,-19,-21,-44,-20,-42,]),'LOOP':([37,43,47,48,50,51,54,55,74,75,76,77,81,85,90,91,92,93,94,95,96,105,106,109,112,126,130,139,141,144,],[-53,-23,-41,-43,-50,-52,-58,-59,102,-38,-39,-40,-54,-22,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-18,-19,-21,-44,-20,-42,]),'ELSE':([37,43,47,48,50,51,54,55,75,76,77,81,85,90,91,92,93,94,95,96,105,106,109,112,118,126,130,139,141,144,],[-53,-23,-41,-43,-50,-52,-58,-59,-38,-39,-40,-54,-22,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-18,129,-19,-21,-44,-20,-42,]),'POOL':([37,43,47,48,50,51,54,55,75,76,77,81,85,90,91,92,93,94,95,96,105,106,109,112,119,126,130,139,141,144,],[-53,-23,-41,-43,-50,-52,-58,-59,-38,-39,-40,-54,-22,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-18,130,-19,-21,-44,-20,-42,]),'IN':([37,43,47,48,50,51,54,55,69,70,75,76,77,81,85,90,91,92,93,94,95,96,105,106,109,112,113,114,126,130,134,139,141,144,],[-53,-23,-41,-43,-50,-52,-58,-59,97,-24,-38,-39,-40,-54,-22,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-18,-25,-27,-19,-21,-26,-44,-20,-42,]),'FI':([37,43,47,48,50,51,54,55,75,76,77,81,85,90,91,92,93,94,95,96,105,106,109,112,126,130,137,139,141,144,],[-53,-23,-41,-43,-50,-52,-58,-59,-38,-39,-40,-54,-22,-31,-32,-33,-34,-35,-36,-37,-51,-55,-45,-18,-19,-21,141,-44,-20,-42,]),'ESAC':([115,127,135,],[126,-28,-29,]),'WITH':([136,],[140,]),} _lr_action = {} for _k, _v in _lr_action_items.items(): @@ -17,7 +17,7 @@ _lr_action[_x][_k] = _y del _lr_action_items -_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,16,17,20,],[9,22,23,30,]),'empty':([7,16,17,19,20,29,62,90,],[10,10,10,27,10,34,88,112,]),'def_attr':([7,16,17,20,],[11,11,11,11,]),'def_func':([7,16,17,20,],[12,12,12,12,]),'param_list':([19,],[26,]),'param_build':([19,35,],[28,59,]),'param':([19,35,39,99,],[29,29,72,72,]),'expr':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[38,73,74,75,76,77,78,81,84,86,90,91,92,93,94,95,96,97,114,116,120,121,84,124,90,135,138,]),'arith':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'base_call':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'fact':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'func_call':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,80,98,100,102,103,109,110,113,122,129,136,],[49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,105,49,49,49,49,49,49,49,131,49,49,]),'atom':([31,40,41,42,44,45,46,51,54,61,62,63,64,65,66,67,68,69,98,100,102,103,109,110,113,129,136,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'let_list':([39,99,],[70,115,]),'let_assign':([39,99,],[71,71,]),'block':([54,109,],[83,123,]),'arg_list':([62,],[87,]),'arg_build':([62,113,],[89,125,]),'cases_list':([101,127,],[117,133,]),'case':([101,127,],[118,118,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,16,17,20,],[9,22,23,30,]),'empty':([7,16,17,19,20,29,61,89,121,138,],[10,10,10,27,10,34,87,110,87,87,]),'def_attr':([7,16,17,20,],[11,11,11,11,]),'def_func':([7,16,17,20,],[12,12,12,12,]),'param_list':([19,],[26,]),'param_build':([19,35,],[28,58,]),'param':([19,35,],[29,29,]),'expr':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[38,72,73,74,75,76,77,80,83,85,89,90,91,92,93,94,95,96,112,118,119,83,123,89,89,134,137,89,143,]),'arith':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'base_call':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'fact':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'atom':([31,40,41,42,44,45,46,49,53,60,61,62,63,64,65,66,67,68,97,101,102,107,108,111,121,125,129,138,140,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,]),'let_list':([39,98,],[69,113,]),'let_assign':([39,98,],[70,70,]),'block':([53,107,],[82,122,]),'arg_list':([61,121,138,],[86,132,142,]),'arg_build':([61,111,121,138,],[88,124,88,88,]),'cases_list':([100,127,],[115,135,]),'case':([100,127,],[116,116,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -27,52 +27,51 @@ del _lr_goto_items _lr_productions = [ ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','coolparser.py',25), - ('empty -> ','empty',0,'p_empty','coolparser.py',30), - ('class_list -> def_class','class_list',1,'p_class_list','coolparser.py',35), - ('class_list -> def_class class_list','class_list',2,'p_class_list','coolparser.py',36), - ('def_class -> CLASS TYPEID LBRACE feature_list RBRACE SEMI','def_class',6,'p_def_class','coolparser.py',44), - ('def_class -> CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI','def_class',8,'p_def_class','coolparser.py',45), - ('feature_list -> empty','feature_list',1,'p_feature_list','coolparser.py',53), - ('feature_list -> def_attr SEMI feature_list','feature_list',3,'p_feature_list','coolparser.py',54), - ('feature_list -> def_func SEMI feature_list','feature_list',3,'p_feature_list','coolparser.py',55), - ('def_attr -> ID COLON TYPEID','def_attr',3,'p_def_attr','coolparser.py',63), - ('def_attr -> ID COLON TYPEID ASSIGN expr','def_attr',5,'p_def_attr','coolparser.py',64), - ('def_func -> ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE','def_func',9,'p_def_func','coolparser.py',72), - ('param_list -> empty','param_list',1,'p_param_list_ept','coolparser.py',77), - ('param_list -> param_build','param_list',1,'p_param_list_prm','coolparser.py',81), - ('param_build -> param empty','param_build',2,'p_param_build','coolparser.py',85), - ('param_build -> param COMMA param_build','param_build',3,'p_param_build','coolparser.py',86), - ('param -> ID COLON TYPEID','param',3,'p_param','coolparser.py',94), - ('expr -> LET let_list IN expr','expr',4,'p_expr','coolparser.py',101), - ('expr -> CASE expr OF cases_list ESAC','expr',5,'p_expr','coolparser.py',102), - ('expr -> IF expr THEN expr ELSE expr FI','expr',7,'p_expr','coolparser.py',103), - ('expr -> WHILE expr LOOP expr POOL','expr',5,'p_expr','coolparser.py',104), - ('expr -> ID ASSIGN expr','expr',3,'p_expr_assign','coolparser.py',117), - ('expr -> arith','expr',1,'p_expr_arith','coolparser.py',122), - ('let_list -> let_assign','let_list',1,'p_let_list','coolparser.py',128), - ('let_list -> let_assign COMMA let_list','let_list',3,'p_let_list','coolparser.py',129), - ('let_assign -> param ASSIGN expr','let_assign',3,'p_let_assign','coolparser.py',136), - ('let_assign -> param','let_assign',1,'p_let_assign','coolparser.py',137), - ('cases_list -> case SEMI','cases_list',2,'p_cases_list','coolparser.py',146), - ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','coolparser.py',147), - ('case -> ID COLON TYPEID WITH expr','case',5,'p_case','coolparser.py',154), - ('expr -> expr PLUS expr','expr',3,'p_expr_binary','coolparser.py',173), - ('expr -> expr MINUS expr','expr',3,'p_expr_binary','coolparser.py',174), - ('expr -> expr STAR expr','expr',3,'p_expr_binary','coolparser.py',175), - ('expr -> expr DIVIDE expr','expr',3,'p_expr_binary','coolparser.py',176), - ('expr -> expr LESS expr','expr',3,'p_expr_binary','coolparser.py',177), - ('expr -> expr LESSQ expr','expr',3,'p_expr_binary','coolparser.py',178), - ('expr -> expr EQUALS expr','expr',3,'p_expr_binary','coolparser.py',179), - ('expr -> BITNOT expr','expr',2,'p_expr_unary','coolparser.py',198), - ('expr -> ISVOID expr','expr',2,'p_expr_unary','coolparser.py',199), - ('expr -> NOT expr','expr',2,'p_expr_unary','coolparser.py',200), - ('arith -> base_call','arith',1,'p_arith_basecall','coolparser.py',209), - ('base_call -> fact ARROBA TYPEID DOT func_call','base_call',5,'p_basecall','coolparser.py',215), - ('base_call -> fact','base_call',1,'p_basecall','coolparser.py',216), - ('fact -> fact DOT func_call','fact',3,'p_factcall','coolparser.py',223), - ('fact -> func_call','fact',1,'p_factcall','coolparser.py',224), - ('func_call -> ID LPAREN arg_list RPAREN','func_call',4,'p_func_call','coolparser.py',231), + ('program -> class_list','program',1,'p_program','coolparser.py',26), + ('empty -> ','empty',0,'p_empty','coolparser.py',31), + ('class_list -> def_class','class_list',1,'p_class_list','coolparser.py',36), + ('class_list -> def_class class_list','class_list',2,'p_class_list','coolparser.py',37), + ('def_class -> CLASS TYPEID LBRACE feature_list RBRACE SEMI','def_class',6,'p_def_class','coolparser.py',45), + ('def_class -> CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI','def_class',8,'p_def_class','coolparser.py',46), + ('feature_list -> empty','feature_list',1,'p_feature_list','coolparser.py',55), + ('feature_list -> def_attr SEMI feature_list','feature_list',3,'p_feature_list','coolparser.py',56), + ('feature_list -> def_func SEMI feature_list','feature_list',3,'p_feature_list','coolparser.py',57), + ('def_attr -> ID COLON TYPEID','def_attr',3,'p_def_attr','coolparser.py',65), + ('def_attr -> ID COLON TYPEID ASSIGN expr','def_attr',5,'p_def_attr','coolparser.py',66), + ('def_func -> ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE','def_func',9,'p_def_func','coolparser.py',75), + ('param_list -> empty','param_list',1,'p_param_list_ept','coolparser.py',81), + ('param_list -> param_build','param_list',1,'p_param_list_prm','coolparser.py',85), + ('param_build -> param empty','param_build',2,'p_param_build','coolparser.py',89), + ('param_build -> param COMMA param_build','param_build',3,'p_param_build','coolparser.py',90), + ('param -> ID COLON TYPEID','param',3,'p_param','coolparser.py',98), + ('expr -> LET let_list IN expr','expr',4,'p_expr','coolparser.py',105), + ('expr -> CASE expr OF cases_list ESAC','expr',5,'p_expr','coolparser.py',106), + ('expr -> IF expr THEN expr ELSE expr FI','expr',7,'p_expr','coolparser.py',107), + ('expr -> WHILE expr LOOP expr POOL','expr',5,'p_expr','coolparser.py',108), + ('expr -> ID ASSIGN expr','expr',3,'p_expr_assign','coolparser.py',120), + ('expr -> arith','expr',1,'p_expr_arith','coolparser.py',125), + ('let_list -> let_assign','let_list',1,'p_let_list','coolparser.py',131), + ('let_list -> let_assign COMMA let_list','let_list',3,'p_let_list','coolparser.py',132), + ('let_assign -> ID COLON TYPEID ASSIGN expr','let_assign',5,'p_let_assign','coolparser.py',139), + ('let_assign -> ID COLON TYPEID','let_assign',3,'p_let_assign','coolparser.py',140), + ('cases_list -> case SEMI','cases_list',2,'p_cases_list','coolparser.py',150), + ('cases_list -> case SEMI cases_list','cases_list',3,'p_cases_list','coolparser.py',151), + ('case -> ID COLON TYPEID WITH expr','case',5,'p_case','coolparser.py',158), + ('expr -> expr PLUS expr','expr',3,'p_expr_binary','coolparser.py',177), + ('expr -> expr MINUS expr','expr',3,'p_expr_binary','coolparser.py',178), + ('expr -> expr STAR expr','expr',3,'p_expr_binary','coolparser.py',179), + ('expr -> expr DIVIDE expr','expr',3,'p_expr_binary','coolparser.py',180), + ('expr -> expr LESS expr','expr',3,'p_expr_binary','coolparser.py',181), + ('expr -> expr LESSQ expr','expr',3,'p_expr_binary','coolparser.py',182), + ('expr -> expr EQUALS expr','expr',3,'p_expr_binary','coolparser.py',183), + ('expr -> BITNOT expr','expr',2,'p_expr_unary','coolparser.py',202), + ('expr -> ISVOID expr','expr',2,'p_expr_unary','coolparser.py',203), + ('expr -> NOT expr','expr',2,'p_expr_unary','coolparser.py',204), + ('arith -> base_call','arith',1,'p_arith_basecall','coolparser.py',213), + ('base_call -> fact ARROBA TYPEID DOT ID LPAREN arg_list RPAREN','base_call',8,'p_basecall','coolparser.py',219), + ('base_call -> fact','base_call',1,'p_basecall','coolparser.py',220), + ('fact -> fact DOT ID LPAREN arg_list RPAREN','fact',6,'p_factcall','coolparser.py',227), + ('fact -> ID LPAREN arg_list RPAREN','fact',4,'p_factcall','coolparser.py',228), ('arg_list -> empty','arg_list',1,'p_arglist_ept','coolparser.py',235), ('arg_list -> arg_build','arg_list',1,'p_arglist_prm','coolparser.py',239), ('arg_build -> expr empty','arg_build',2,'p_arg_build','coolparser.py',243), diff --git a/src/main.py b/src/main.py index 7dbcd0ee..28516175 100644 --- a/src/main.py +++ b/src/main.py @@ -21,7 +21,7 @@ def main(): #temporal try: ast, context, scope = pipeline.run_pipeline(program) - except: + except Exception as e: pass pipeline.report_errors() diff --git a/src/semantic/context.py b/src/semantic/context.py index 999c8e10..35e37e2e 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -21,10 +21,10 @@ def __init__(self): # build-in methods self.types['Object'].methods['abort'] = Method('abort', [], [], self.types['Object']) self.types['Object'].methods['type_name'] = Method('type_name', [], [], self.types['String']) - self.types['Object'].methods['copy'] = Method('copy', [], [], self.types['SELF_TYPE']) + self.types['Object'].methods['copy'] = Method('copy', [], [], self.types['Object']) # Must be ret type SELF_TYPE - self.types['IO'].methods['out_string'] = Method('out_string', ['x'], [self.types['String']], self.types['SELF_TYPE']) - self.types['IO'].methods['out_int'] = Method('out_int', ['x'], [self.types['Int']], self.types['SELF_TYPE']) + self.types['IO'].methods['out_string'] = Method('out_string', ['x'], [self.types['String']], self.types['IO']) # Must be ret type SELF_TYPE + self.types['IO'].methods['out_int'] = Method('out_int', ['x'], [self.types['Int']], self.types['IO']) # Must be ret type SELF_TYPE self.types['IO'].methods['in_string'] = Method('in_string', [], [], self.types['String']) self.types['IO'].methods['in_int'] = Method('in_int', [], [], self.types['Int']) diff --git a/src/semantic/types.py b/src/semantic/types.py index c2abee51..3f183da3 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -94,6 +94,15 @@ def __init__(self): def conforms_to(self, other): return True + def bypass(self): + return True + + def __eq__(self, other): + return True + + def __ne__(self, other): + return False + class ErrorType(Type): def __init__(self): Type.__init__(self, '') diff --git a/src/visitors/type_builder.py b/src/visitors/type_builder.py index 43d0fe03..9458d654 100644 --- a/src/visitors/type_builder.py +++ b/src/visitors/type_builder.py @@ -60,10 +60,10 @@ def visit(self, node): current = current.parent except ContextError as e: parent = ErrorType() - self.errors.append(e.text) # parent type missing + self.errors.append(CSemanticError(node.parent_pos[0], node.parent_pos[1], e.text)) # parent type missing if node.parent in ['Int', 'String', 'Bool']: - self.errors.append('Invalid inherit in basic classes') + self.errors.append(CSemanticError(node.parent_pos[0], node.parent_pos[1], 'Invalid inherit in basic classes')) self.current_type.set_parent(parent) @@ -71,22 +71,22 @@ def visit(self, node): def visit(self, node): args_ids = [] args_types = [] - for n, t in node.params: - args_ids.append(n) + for param in node.params: + args_ids.append(param.id) try: - args_types.append(self.context.get_type(t)) + args_types.append(self.context.get_type(param.type)) except SemanticError as e: args_types.append(ErrorType()) - self.errors.append(e.text) + self.errors.append(CSemanticError(param.row, param.col, e.text)) try: ret_type = self.context.get_type(node.type) except SemanticError as e: ret_type = ErrorType() - self.errors.append(e.text) + self.errors.append(CSemanticError(node.type_pos[0], node.node.type_pos[1], e.text)) try: self.current_type.define_method(node.id, args_ids, args_types, ret_type) except SemanticError as e: - self.errors.append(e.text) + self.errors.append(CSemanticError(node.row, node.col, e.text)) @visitor.when(AttrDeclarationNode) def visit(self, node): @@ -94,11 +94,11 @@ def visit(self, node): attr_type = self.context.get_type(node.type) except SemanticError as e: attr_type = ErrorType() - self.errors.append(e.text) + self.errors.append(CSemanticError(node.type_pos[0], node.node.type_pos[1], e.text)) try: self.current_type.define_attribute(node.id, attr_type) except SemanticError as e: - self.errors.append(e.text) + self.errors.append(CSemanticError(node.row, node.col, e.text)) class InheritBuilder: def __init__(self, context): @@ -133,8 +133,16 @@ def visit(self, node): try: pmeth = parent.get_method(node.id) - if not pmeth == cmeth: - self.errors.append(WRONG_SIGNATURE % (node.id, parent.name)) + for param, base in zip(node.params, zip(pmeth.param_names, pmeth.param_types)): + if param.type != base[1].name: + self.errors.append(CSemanticError(param.row, param.col, WRONG_SIGNATURE % (node.id, parent.name))) + + # Return Type compare and report error + if pmeth.return_type.name != node.type: + self.errors.append(CSemanticError(node.type_pos[0], node.node.type_pos[1], WRONG_SIGNATURE % (node.id, parent.name))) + + # if not pmeth == cmeth: + # self.errors.append(CSemanticError(node.row, node.col, WRONG_SIGNATURE % (node.id, parent.name))) except SemanticError: pass @@ -145,6 +153,6 @@ def visit(self, node): try: pattr = parent.get_attribute(node.id) if pattr: - self.errors.append(f"Cannot override attribute {node.id} in {self.current_type.name} from {parent.name}") + self.errors.append(CSemanticError(node.row, node.col, f"Cannot override attribute {node.id} in {self.current_type.name} from {parent.name}")) except SemanticError: pass \ No newline at end of file diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py index cf2c9f63..63193e90 100644 --- a/src/visitors/type_checker.py +++ b/src/visitors/type_checker.py @@ -17,41 +17,37 @@ def run(self, inputx): self.visit(ast, scope) return ast, context, scope - # Checker Auxiliar Functions (TODO: Combine in the Context) - - def _get_type(self, typex): + def _get_type(self, node, typex): try: return self.context.get_type(typex) except SemanticError as e: - self.errors.append(e.text) + self.errors.append(CSemanticError(node.row, node.col, e.text)) return ErrorType() - def _get_method(self, typex, name): + def _get_method(self, node, typex, name): if typex is ErrorType(): return - try: return typex.get_method(name) except SemanticError as e: - self.errors.append(e.text) + self.errors.append(CNameError(node.row, node.col, e.text)) return MethodError(name, [], [], ErrorType()) - def _check_args(self, meth, scope, args): + def _check_args(self, node, meth, scope, args): arg_types = [ self.visit(arg, scope) for arg in args ] if len(arg_types) > len(meth.param_types): - self.errors.append(TOO_MANY_ARGUMENTS % meth.name) + self.errors.append(CSemanticError(node.row, node.col, TOO_MANY_ARGUMENTS % meth.name)) elif len(arg_types) < len(meth.param_types): for arg in meth.param_names[len(arg_types):]: - self.errors.append(MISSING_PARAMETER % (arg, meth.name)) + self.errors.append(CSemanticError(node.row, node.col, MISSING_PARAMETER % (arg, meth.name))) - for atype, ptype in zip(arg_types, meth.param_types): + for arg, atype, ptype in zip(args, arg_types, meth.param_types): if not atype.conforms_to(ptype): - self.errors.append(INCOMPATIBLE_TYPES % (ptype.name, atype.name)) + self.errors.append(CTypeError(arg.row, arg.col, INCOMPATIBLE_TYPES % (ptype.name, atype.name))) def _join_types(self, ltypes): - import itertools as itt def path_to_objet(typex): path = [] @@ -99,9 +95,10 @@ def visit(self, node, scope): if node.expr: etype = self.visit(node.expr, ascope) if not etype.conforms_to(vinfo.type): - self.errors.append(INCOMPATIBLE_TYPES %(etype.name, vinfo.type.name)) + self.errors.append(CTypeError(node.expr.row, node.expr.col, INCOMPATIBLE_TYPES %(etype.name, vinfo.type.name))) return ErrorType() return etype + try: return self.context.get_type(node.type) except: @@ -111,25 +108,25 @@ def visit(self, node, scope): def visit(self, node, scope): fscope = scope.func_scopes[node.id] parent = self.current_type.parent - ptypes = [param[1] for param in node.params] + # ptypes = [param[1] for param in node.params] self.current_method = meth = self.current_type.get_method(node.id) - while parent: - try: - old_meth = parent.get_method(node.id) - if old_meth.return_type.name != meth.return_type.name and node.type != 'SELF_TYPE': - self.errors.append(WRONG_SIGNATURE % (node.id, parent.name)) - elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, meth.param_types, old_meth.param_types)): - self.errors.append(WRONG_SIGNATURE % (node.id, parent.name)) - break - except SemanticError: - parent = parent.parent + # while parent: + # try: + # old_meth = parent.get_method(node.id) + # if old_meth.return_type.name != meth.return_type.name and node.type != 'SELF_TYPE': + # self.errors.append(CSemanticError(node.row, node.col, WRONG_SIGNATURE % (node.id, parent.name))) + # elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, meth.param_types, old_meth.param_types)): + # self.errors.append(CSemanticError(node.row, node.col, WRONG_SIGNATURE % (node.id, parent.name))) + # break + # except SemanticError: + # parent = parent.parent res = self.visit(node.body, fscope) if not res.conforms_to(meth.return_type): - self.errors.append(INCOMPATIBLE_TYPES %(meth.return_type.name, res.name)) + self.errors.append(CTypeError(node.body.row, node.body.col, INCOMPATIBLE_TYPES %(meth.return_type.name, res.name))) @visitor.when(VarDeclarationNode) def visit(self, node, scope): @@ -139,7 +136,7 @@ def visit(self, node, scope): if node.expr: etype = self.visit(node.expr, scope) if not etype.conforms_to(vtype): - self.errors.append(INCOMPATIBLE_TYPES %(vtype.name, etype.name)) + self.errors.append(CTypeError(node.row, node.col, INCOMPATIBLE_TYPES %(vtype.name, etype.name))) return etype return vtype @@ -152,7 +149,7 @@ def visit(self, node, scope): rtype = self.visit(node.expr, scope) if not rtype.conforms_to(vtype): - self.errors.append(INCOMPATIBLE_TYPES %(vtype.name, rtype.name)) + self.errors.append(CTypeError(node.expr.row, node.expr.col, INCOMPATIBLE_TYPES %(vtype.name, rtype.name))) return rtype @@ -160,29 +157,29 @@ def visit(self, node, scope): def visit(self, node, scope): otype = self.visit(node.obj, scope) - meth = self._get_method(otype, node.id) - self._check_args(meth, scope, node.args) + meth = self._get_method(node, otype, node.id) + self._check_args(node, meth, scope, node.args) return meth.return_type @visitor.when(ParentCallNode) def visit(self, node, scope): otype = self.visit(node.obj, scope) - ptype = self._get_type(node.type) + ptype = self._get_type(node, node.type) if not otype.conforms_to(ptype): - self.errors.append(INCOMPATIBLE_TYPES % (otype.name, ptype.name)) + self.errors.append(CTypeError(node.obj.row, node.obj.col, INCOMPATIBLE_TYPES % (otype.name, ptype.name))) return ErrorType() - meth = self._get_method(ptype, node.id) - self._check_args(meth, scope, node.args) + meth = self._get_method(node, ptype, node.id) + self._check_args(node, meth, scope, node.args) return meth.return_type @visitor.when(SelfCallNode) def visit(self, node, scope): stype = self.current_type - meth = self._get_method(stype, node.id) - self._check_args(meth, scope, node.args) + meth = self._get_method(node, stype, node.id) + self._check_args(node, meth, scope, node.args) return meth.return_type @visitor.when(WhileNode) @@ -190,7 +187,7 @@ def visit(self, node, scope): ctype = self.visit(node.cond, scope) if ctype.name != 'Bool': - self.errors.append(INCORRECT_TYPE %(ctype.name, 'Bool')) + self.errors.append(CTypeError(node.cond.row, node.cond.col, INCORRECT_TYPE %(ctype.name, 'Bool'))) self.visit(node.expr, scope) @@ -201,7 +198,7 @@ def visit(self, node, scope): ctype = self.visit(node.cond, scope) if ctype.name != 'Bool': - self.errors.append(INCORRECT_TYPE %(ctype.name, 'Bool')) + self.errors.append(CTypeError(node.cond.row, node.cond.col, INCORRECT_TYPE %(ctype.name, 'Bool'))) ttype = self.visit(node.stm, scope) ftype = self.visit(node.else_stm, scope) @@ -252,7 +249,7 @@ def visit(self, node, scope): if node.expr: etype = self.visit(node.expr, scope) if not etype.conforms_to(vtype): - self.errors.append(INCOMPATIBLE_TYPES %(vtype.name, etype.name)) + self.errors.append(CTypeError(node.expr.row, node.expr.col, INCOMPATIBLE_TYPES %(vtype.name, etype.name))) return etype return vtype @@ -261,8 +258,8 @@ def visit(self, node, scope): def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) - if ltype != rtype != IntType(): - self.errors.append(BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name)) + if rtype != IntType() or ltype != IntType(): + self.errors.append(CTypeError(node.row, node.col, BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name))) return ErrorType() return IntType() @@ -271,8 +268,8 @@ def visit(self, node, scope): def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) - if ltype != rtype != IntType(): - self.errors.append(BOPERATION_NOT_DEFINED %('Comparison', ltype.name, rtype.name)) + if rtype != IntType() or ltype != IntType(): + self.errors.append(CTypeError(node.row, node.col, BOPERATION_NOT_DEFINED %('Comparison', ltype.name, rtype.name))) return ErrorType() return BoolType() @@ -281,8 +278,8 @@ def visit(self, node, scope): def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) - if ltype != rtype != IntType(): - self.errors.append(BOPERATION_NOT_DEFINED %('Comparison', ltype.name, rtype.name)) + if rtype != IntType() or ltype != IntType(): + self.errors.append(CTypeError(node.row, node.col, BOPERATION_NOT_DEFINED %('Comparison', ltype.name, rtype.name))) return ErrorType() return BoolType() @@ -293,7 +290,7 @@ def visit(self, node, scope): rtype = self.visit(node.right, scope) if ltype in [IntType(), StringType(), BoolType()] and ltype != rtype: - self.errors.append(f'Invalid comparison operation between {ltype.name} and {rtype.name}') + self.errors.append(CTypeError(node.row, node.col, f'Invalid comparison operation between {ltype.name} and {rtype.name}')) return BoolType() @@ -301,7 +298,7 @@ def visit(self, node, scope): def visit(self, node, scope): ltype = self.visit(node.expr, scope) if ltype != BoolType(): - self.errors.append(UOPERATION_NOT_DEFINED %('Logical', ltype.name)) + self.errors.append(CTypeError(node.row, node.col, UOPERATION_NOT_DEFINED %('Logical', ltype.name))) return ErrorType() return BoolType() @@ -310,7 +307,7 @@ def visit(self, node, scope): def visit(self, node, scope): ltype = self.visit(node.expr, scope) if ltype != IntType(): - self.errors.append(UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name)) + self.errors.append(CTypeError(node.row, node.col, UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name))) return ErrorType() return IntType() @@ -326,7 +323,7 @@ def visit(self, node, scope): @visitor.when(NewNode) def visit(self, node, scope): - return self._get_type(node.type) + return self._get_type(node, node.type) @visitor.when(IntegerNode) def visit(self, node, scope): diff --git a/src/visitors/type_collector.py b/src/visitors/type_collector.py index 02bcc284..a47d942f 100644 --- a/src/visitors/type_collector.py +++ b/src/visitors/type_collector.py @@ -27,4 +27,4 @@ def visit(self, node): try: self.context.create_type(node.id) except ContextError as e: - self.errors.append(e.text) # report error in valid format \ No newline at end of file + self.errors.append(CSemanticError(node.row, node.col, e.text)) \ No newline at end of file diff --git a/src/visitors/var_collector.py b/src/visitors/var_collector.py index b404fae6..2c7730f1 100644 --- a/src/visitors/var_collector.py +++ b/src/visitors/var_collector.py @@ -48,20 +48,20 @@ def visit(self, node, scope): self.current_method = self.current_type.get_method(node.id) func_scope = scope.func_scopes[node.id] - for pname, ptype in node.params: + for param in node.params: try: - if pname == 'self': + if param.id == 'self': raise ScopeError(FORMAL_ERROR_SELF) - func_scope.define_variable(pname, self.context.get_type(ptype)) + func_scope.define_variable(param.id, self.context.get_type(param.type)) except ScopeError as e: - self.errors.append(e.text) + self.errors.append(CSemanticError(param.row, param.col, e.text)) self.visit(node.body, func_scope) @visitor.when(VarDeclarationNode) def visit(self, node, scope): if scope.is_defined(node.id) and scope.find_variable(node.id).type is not ErrorType(): - self.errors.append(LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name)) + self.errors.append(CSemanticError(node.row, node.col, LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name))) else: try: @@ -69,7 +69,7 @@ def visit(self, node, scope): scope.define_variable(node.id, vtype) except ScopeError as e: scope.define_variable(node.id, ErrorType()) - self.errors.append(e.texts) + self.errors.append(CSemanticError(node.row, node.col, e.text)) if node.expr is not None: self.visit(node.expr, scope) @@ -78,10 +78,10 @@ def visit(self, node, scope): def visit(self, node, scope): vinfo = scope.find_variable(node.id) if vinfo.name == 'self': - self.errors.append(SELF_IS_READONLY) + self.errors.append(CSemanticError(node.row, node.col, SELF_IS_READONLY)) if vinfo is None: - self.errors.append(VARIABLE_NOT_DEFINED %(node.id, self.current_method.name)) + self.errors.append(CNameError(node.row, node.col, VARIABLE_NOT_DEFINED %(node.id, self.current_method.name))) scope.define_variable(node.id, ErrorType()) self.visit(node.expr, scope) @@ -110,7 +110,7 @@ def visit(self, node, scope): vtype = self.context.get_type(node.type) scope.redefine_variable(node.id, vtype) except ScopeError as e: - self.errors.append(e.text) + self.errors.append(CSemanticError(node.type_pos[0], node.type_pos[1], e.text)) if node.expr is not None: self.visit(node.expr, scope) @@ -118,7 +118,7 @@ def visit(self, node, scope): @visitor.when(VariableNode) def visit(self, node, scope): if not scope.is_defined(node.id): - self.errors.append(VARIABLE_NOT_DEFINED %(node.id, self.current_method.name)) + self.errors.append(CNameError(node.row, node.col, VARIABLE_NOT_DEFINED %(node.id, self.current_method.name))) scope.define_variable(node.id, ErrorType()) @visitor.when(CaseNode) From 65a7e8609fe29efd48735643ba71f16825859383 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Thu, 5 Nov 2020 20:30:39 -0500 Subject: [PATCH 032/140] passing new type test --- src/cl_ast/declarations.py | 8 +++++--- src/visitors/type_builder.py | 27 +++++++++++++++------------ src/visitors/type_checker.py | 21 +++++++++++++++------ src/visitors/var_collector.py | 10 ++++++++-- 4 files changed, 43 insertions(+), 23 deletions(-) diff --git a/src/cl_ast/declarations.py b/src/cl_ast/declarations.py index 7d49d9f3..a57ce012 100644 --- a/src/cl_ast/declarations.py +++ b/src/cl_ast/declarations.py @@ -10,12 +10,14 @@ def __init__(self, row, col, idx, features, parent = None): def _sort_features(self, features): sort_f = [] + fmeth = [] + fattr = [] for f in features: if isinstance(f, AttrDeclarationNode): - sort_f.insert(0, f) + fattr.append(f) else: - sort_f.append(f) - return sort_f + fmeth.append(f) + return fattr + fmeth class AttrDeclarationNode(ASTNode): def __init__(self, row, col, idx, typex, expr=None): diff --git a/src/visitors/type_builder.py b/src/visitors/type_builder.py index 9458d654..59af0b1e 100644 --- a/src/visitors/type_builder.py +++ b/src/visitors/type_builder.py @@ -56,11 +56,12 @@ def visit(self, node): current = parent while current: if current.name == self.current_type.name: - raise ContextError(f'{current.name} is involved in inheritance cycle') + self.errors.append(CSemanticError(node.parent_pos[0], node.parent_pos[1], (f'{current.name} is involved in inheritance cycle'))) + break current = current.parent except ContextError as e: parent = ErrorType() - self.errors.append(CSemanticError(node.parent_pos[0], node.parent_pos[1], e.text)) # parent type missing + self.errors.append(CTypeError(node.parent_pos[0], node.parent_pos[1], e.text)) # parent type missing if node.parent in ['Int', 'String', 'Bool']: self.errors.append(CSemanticError(node.parent_pos[0], node.parent_pos[1], 'Invalid inherit in basic classes')) @@ -75,14 +76,14 @@ def visit(self, node): args_ids.append(param.id) try: args_types.append(self.context.get_type(param.type)) - except SemanticError as e: + except ContextError as e: args_types.append(ErrorType()) - self.errors.append(CSemanticError(param.row, param.col, e.text)) + self.errors.append(CTypeError(param.row, param.col, e.text)) try: ret_type = self.context.get_type(node.type) - except SemanticError as e: + except ContextError as e: ret_type = ErrorType() - self.errors.append(CSemanticError(node.type_pos[0], node.node.type_pos[1], e.text)) + self.errors.append(CTypeError(node.type_pos[0], node.type_pos[1], e.text)) try: self.current_type.define_method(node.id, args_ids, args_types, ret_type) except SemanticError as e: @@ -92,9 +93,9 @@ def visit(self, node): def visit(self, node): try: attr_type = self.context.get_type(node.type) - except SemanticError as e: + except ContextError as e: attr_type = ErrorType() - self.errors.append(CSemanticError(node.type_pos[0], node.node.type_pos[1], e.text)) + self.errors.append(CTypeError(node.type_pos[0], node.type_pos[1], e.text)) try: self.current_type.define_attribute(node.id, attr_type) except SemanticError as e: @@ -133,16 +134,18 @@ def visit(self, node): try: pmeth = parent.get_method(node.id) + if len(node.params) != len(pmeth.param_names): + self.errors.append(CSemanticError(node.row, node.col, f"Incompatible number of formal parameters in redefined {node.id}")) + raise SemanticError() + for param, base in zip(node.params, zip(pmeth.param_names, pmeth.param_types)): if param.type != base[1].name: self.errors.append(CSemanticError(param.row, param.col, WRONG_SIGNATURE % (node.id, parent.name))) - + # Return Type compare and report error if pmeth.return_type.name != node.type: - self.errors.append(CSemanticError(node.type_pos[0], node.node.type_pos[1], WRONG_SIGNATURE % (node.id, parent.name))) + self.errors.append(CSemanticError(node.type_pos[0], node.type_pos[1], WRONG_SIGNATURE % (node.id, parent.name))) - # if not pmeth == cmeth: - # self.errors.append(CSemanticError(node.row, node.col, WRONG_SIGNATURE % (node.id, parent.name))) except SemanticError: pass diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py index 63193e90..f1f4ad3a 100644 --- a/src/visitors/type_checker.py +++ b/src/visitors/type_checker.py @@ -20,8 +20,8 @@ def run(self, inputx): def _get_type(self, node, typex): try: return self.context.get_type(typex) - except SemanticError as e: - self.errors.append(CSemanticError(node.row, node.col, e.text)) + except ContextError as e: + self.errors.append(CTypeError(node.row, node.col, e.text)) return ErrorType() def _get_method(self, node, typex, name): @@ -30,7 +30,7 @@ def _get_method(self, node, typex, name): try: return typex.get_method(name) except SemanticError as e: - self.errors.append(CNameError(node.row, node.col, e.text)) + self.errors.append(CAttributeError(node.row, node.col, e.text)) return MethodError(name, [], [], ErrorType()) def _check_args(self, node, meth, scope, args): @@ -218,14 +218,23 @@ def visit(self, node, scope): def visit(self, node, scope): etype = self.visit(node.expr, scope) new_scope = scope.expr_dict[node] - - types = [self.visit(opt, c_scp) for opt, c_scp in zip(node.case_list, new_scope.children)] - return self._join_types([t[0] for t in types]) + types = [] + btypes = [] + for opt, c_scp in zip(node.case_list, new_scope.children): + vtype, otype = self.visit(opt, c_scp) + types.append(vtype) + if otype in btypes: + self.errors.append(CSemanticError(opt.row, opt.col, f"Duplicate branch {otype.name} in case statement")) + else: + btypes.append(otype) + + return self._join_types(types) @visitor.when(OptionNode) def visit(self, node, scope): var_info = scope.find_variable(node.id) + typex = self.visit(node.expr, scope) return typex, var_info.type diff --git a/src/visitors/var_collector.py b/src/visitors/var_collector.py index 2c7730f1..4fcf90ce 100644 --- a/src/visitors/var_collector.py +++ b/src/visitors/var_collector.py @@ -109,6 +109,8 @@ def visit(self, node, scope): try: vtype = self.context.get_type(node.type) scope.redefine_variable(node.id, vtype) + except ContextError as e: + self.errors.append(CTypeError(node.type_pos[0], node.type_pos[1], e.text)) except ScopeError as e: self.errors.append(CSemanticError(node.type_pos[0], node.type_pos[1], e.text)) @@ -133,8 +135,12 @@ def visit(self, node, scope): @visitor.when(OptionNode) def visit(self, node, scope): - typex = self.context.get_type(node.typex) - + try: + typex = self.context.get_type(node.typex) + except ContextError as e: + self.errors.append(CTypeError( node.row, node.col, e.text)) + typex = ErrorType() + self.visit(node.expr, scope) scope.define_variable(node.id, typex) From e0202d3ad2949e62baf9a4766e6d0165e330a5a5 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 23 Oct 2020 22:01:06 -0400 Subject: [PATCH 033/140] some gitignore changes --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a9bee090..34f03568 100644 --- a/.gitignore +++ b/.gitignore @@ -411,4 +411,6 @@ dmypy.json # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) -src/ast.txt \ No newline at end of file +src/ast.txt +.idea +venv \ No newline at end of file From 45b55f515fb83e089f5dcd7f157d095514a47691 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sun, 1 Nov 2020 11:35:33 -0500 Subject: [PATCH 034/140] initial skeleton for nodeIL structure --- src/cl_code/allocate_node_il.py | 9 ++++ src/cl_code/assignmet_node_il.py | 41 ++++++++++++++++++ src/cl_code/methods_node_il.py | 71 ++++++++++++++++++++++++++++++++ src/cl_code/node_il.py | 0 src/cl_code/operation_node_il.py | 17 ++++++++ 5 files changed, 138 insertions(+) create mode 100644 src/cl_code/allocate_node_il.py create mode 100644 src/cl_code/assignmet_node_il.py create mode 100644 src/cl_code/methods_node_il.py create mode 100644 src/cl_code/node_il.py create mode 100644 src/cl_code/operation_node_il.py diff --git a/src/cl_code/allocate_node_il.py b/src/cl_code/allocate_node_il.py new file mode 100644 index 00000000..f439baf7 --- /dev/null +++ b/src/cl_code/allocate_node_il.py @@ -0,0 +1,9 @@ +from .node_il import NodeIL + +class AllocateIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass diff --git a/src/cl_code/assignmet_node_il.py b/src/cl_code/assignmet_node_il.py new file mode 100644 index 00000000..f566a2f3 --- /dev/null +++ b/src/cl_code/assignmet_node_il.py @@ -0,0 +1,41 @@ +from .node_il import NodeIL + +class AssignmentNodeIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass + +class VarToVarIL(AssigmentNodeIL): + + def __init__(self): + pass + + def __str__(self): + pass + +class MemoToVarIL(AssigmentNodeIL): + + def __init__(self, left, right, offset): + pass + + def __str__(self): + pass + +class VarToMemoIL(AssigmentNodeIL): + + def __init__(self, left, right, offset): + pass + + def __str__(self): + pass + +class ConstToMemoIL(AssigmentNodeIL): + + def __init__(self, left, right, offset): + pass + + def __str__(self): + pass \ No newline at end of file diff --git a/src/cl_code/methods_node_il.py b/src/cl_code/methods_node_il.py new file mode 100644 index 00000000..be479508 --- /dev/null +++ b/src/cl_code/methods_node_il.py @@ -0,0 +1,71 @@ +from .node_il import NodeIL + +class LabelIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass + +class GotoIL(NodeIL): + def __init__(self): + pass + + def __str__(self): + pass + +class IfJumpIL(NodeIL): + def __init__(self): + pass + + def __str__(self): + pass + +class PopIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass + +class PushIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass + +class ReturnIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass + +class StringIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass + +class PrintIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass + +class CommentIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass \ No newline at end of file diff --git a/src/cl_code/node_il.py b/src/cl_code/node_il.py new file mode 100644 index 00000000..e69de29b diff --git a/src/cl_code/operation_node_il.py b/src/cl_code/operation_node_il.py new file mode 100644 index 00000000..8ecf8ea0 --- /dev/null +++ b/src/cl_code/operation_node_il.py @@ -0,0 +1,17 @@ +from .node_il import NodeIL + +class BinaryOperationIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass + +class UnaryOperationIL(NodeIL): + + def __init__(self): + pass + + def __str__(self): + pass From 95b074fca1ea00d93251f13f4e9d2f0ee0e4593c Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Mon, 2 Nov 2020 21:24:31 -0500 Subject: [PATCH 035/140] adding some complex nodeIL types --- src/cl_code/methods_node_il.py | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/cl_code/methods_node_il.py b/src/cl_code/methods_node_il.py index be479508..687c1a1b 100644 --- a/src/cl_code/methods_node_il.py +++ b/src/cl_code/methods_node_il.py @@ -67,5 +67,41 @@ class CommentIL(NodeIL): def __init__(self): pass + def __str__(self): + pass + +class HierarchyIL(NodeIL): + def __init__(self): + pass + + def __str__(self): + pass + +class InheritIL(NodeIL): + def __init__(self): + pass + + def __str__(self): + pass + +class VirtualTableIL(NodeIL): + def __init__(self): + pass + + def __str__(self): + pass + +class DispatchIL(NodeIL): + def __init__(self): + pass + + def __str__(self): + pass + +class DispatchParentIL(ILNode): + def __init__(self): + pass + + def __str__(self): pass \ No newline at end of file From 11a850fd290e791a2979271c31e151b836f4c446 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Mon, 2 Nov 2020 21:27:50 -0500 Subject: [PATCH 036/140] some code adjustment --- src/{cl_code => code_generation/nodesIL}/allocate_node_il.py | 0 src/{cl_code => code_generation/nodesIL}/assignmet_node_il.py | 0 src/{cl_code => code_generation/nodesIL}/methods_node_il.py | 0 src/{cl_code => code_generation/nodesIL}/node_il.py | 0 src/{cl_code => code_generation/nodesIL}/operation_node_il.py | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename src/{cl_code => code_generation/nodesIL}/allocate_node_il.py (100%) rename src/{cl_code => code_generation/nodesIL}/assignmet_node_il.py (100%) rename src/{cl_code => code_generation/nodesIL}/methods_node_il.py (100%) rename src/{cl_code => code_generation/nodesIL}/node_il.py (100%) rename src/{cl_code => code_generation/nodesIL}/operation_node_il.py (100%) diff --git a/src/cl_code/allocate_node_il.py b/src/code_generation/nodesIL/allocate_node_il.py similarity index 100% rename from src/cl_code/allocate_node_il.py rename to src/code_generation/nodesIL/allocate_node_il.py diff --git a/src/cl_code/assignmet_node_il.py b/src/code_generation/nodesIL/assignmet_node_il.py similarity index 100% rename from src/cl_code/assignmet_node_il.py rename to src/code_generation/nodesIL/assignmet_node_il.py diff --git a/src/cl_code/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py similarity index 100% rename from src/cl_code/methods_node_il.py rename to src/code_generation/nodesIL/methods_node_il.py diff --git a/src/cl_code/node_il.py b/src/code_generation/nodesIL/node_il.py similarity index 100% rename from src/cl_code/node_il.py rename to src/code_generation/nodesIL/node_il.py diff --git a/src/cl_code/operation_node_il.py b/src/code_generation/nodesIL/operation_node_il.py similarity index 100% rename from src/cl_code/operation_node_il.py rename to src/code_generation/nodesIL/operation_node_il.py From 78547f3c0621ed080f65dcc5124c35e8ddd363b6 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Mon, 2 Nov 2020 21:32:51 -0500 Subject: [PATCH 037/140] adding skeleton for transpilator from COOL to IL, and virtualTable helper class --- src/code_generation/transpilator.py | 0 src/code_generation/virtual_table.py | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 src/code_generation/transpilator.py create mode 100644 src/code_generation/virtual_table.py diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py new file mode 100644 index 00000000..e69de29b diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py new file mode 100644 index 00000000..24544f5a --- /dev/null +++ b/src/code_generation/virtual_table.py @@ -0,0 +1,4 @@ +class virtualTable: + + def __init__(self): + pass \ No newline at end of file From de48b2df6930cb01a234e9f13ea5c6e583e409ac Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Wed, 4 Nov 2020 21:51:12 -0500 Subject: [PATCH 038/140] operation nodes definition --- src/code_generation/nodesIL/node_il.py | 4 ++++ .../nodesIL/operation_node_il.py | 17 +++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/code_generation/nodesIL/node_il.py b/src/code_generation/nodesIL/node_il.py index e69de29b..81cea221 100644 --- a/src/code_generation/nodesIL/node_il.py +++ b/src/code_generation/nodesIL/node_il.py @@ -0,0 +1,4 @@ + +class NodeIL(): + pass + diff --git a/src/code_generation/nodesIL/operation_node_il.py b/src/code_generation/nodesIL/operation_node_il.py index 8ecf8ea0..929b126c 100644 --- a/src/code_generation/nodesIL/operation_node_il.py +++ b/src/code_generation/nodesIL/operation_node_il.py @@ -2,16 +2,21 @@ class BinaryOperationIL(NodeIL): - def __init__(self): - pass + def __init__(self, var, leftOp, rightOp, op): + self.var = var + self.leftOp = leftOp + self.rightOp = rightOp + self.op = op def __str__(self): - pass + return "{} = {} {} {}\n".format(self.var, self.leftOp, self.op, self.rightOp) class UnaryOperationIL(NodeIL): - def __init__(self): - pass + def __init__(self, var, op, symb): + self.var = var + self.op = op + self.symb = symb def __str__(self): - pass + return "{} = {} {}".format(self.var, self.symbol, self.op) From bff5734cf89c70175a0dcbfea0bf088d2f27d4ec Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Wed, 4 Nov 2020 21:58:17 -0500 Subject: [PATCH 039/140] assignments node definitions --- .../nodesIL/assignmet_node_il.py | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/code_generation/nodesIL/assignmet_node_il.py b/src/code_generation/nodesIL/assignmet_node_il.py index f566a2f3..44a5fa3b 100644 --- a/src/code_generation/nodesIL/assignmet_node_il.py +++ b/src/code_generation/nodesIL/assignmet_node_il.py @@ -2,40 +2,44 @@ class AssignmentNodeIL(NodeIL): - def __init__(self): - pass + def __init__(self, left, right): + self.left = left + self.right = right def __str__(self): - pass + return "{} = {}".format(self.left, self.right) class VarToVarIL(AssigmentNodeIL): - def __init__(self): - pass + def __init__(self, left, right): + super().__init__(left, right) def __str__(self): - pass + return "{} = {}".format(self.left, self.right) class MemoToVarIL(AssigmentNodeIL): def __init__(self, left, right, offset): - pass + super().__init__(left, right) + self.offset = offset def __str__(self): - pass + return "{} = {}".format(self.left, self.offset) class VarToMemoIL(AssigmentNodeIL): def __init__(self, left, right, offset): - pass + super().__init__(left, right) + self.offset = offset def __str__(self): - pass + return "{} = {}".format(self.offset, self.right) class ConstToMemoIL(AssigmentNodeIL): def __init__(self, left, right, offset): - pass + super().__init__(left, right) + self.offset = offset def __str__(self): - pass \ No newline at end of file + return "{} = {}\n".format(self.left + self.offset, self.right) \ No newline at end of file From 4074a869c89f296b1d9b9d03754c1f163a5d5491 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 5 Nov 2020 21:25:21 -0500 Subject: [PATCH 040/140] some allocate IL --- src/code_generation/nodesIL/allocate_node_il.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/code_generation/nodesIL/allocate_node_il.py b/src/code_generation/nodesIL/allocate_node_il.py index f439baf7..5e9646cd 100644 --- a/src/code_generation/nodesIL/allocate_node_il.py +++ b/src/code_generation/nodesIL/allocate_node_il.py @@ -2,8 +2,10 @@ class AllocateIL(NodeIL): - def __init__(self): - pass + def __init__(self, var, size, type): + self.var = var + self.size = size + self.type = type def __str__(self): pass From 8fa467367e0b5c9defc343f5102aa3ce107e4131 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 5 Nov 2020 21:52:16 -0500 Subject: [PATCH 041/140] some redefinitions in operation and allocate nodes --- src/code_generation/nodesIL/assignmet_node_il.py | 8 ++++---- src/code_generation/nodesIL/operation_node_il.py | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/code_generation/nodesIL/assignmet_node_il.py b/src/code_generation/nodesIL/assignmet_node_il.py index 44a5fa3b..f3287d6c 100644 --- a/src/code_generation/nodesIL/assignmet_node_il.py +++ b/src/code_generation/nodesIL/assignmet_node_il.py @@ -15,7 +15,7 @@ def __init__(self, left, right): super().__init__(left, right) def __str__(self): - return "{} = {}".format(self.left, self.right) + return "var {} = var {}".format(self.left, self.right) class MemoToVarIL(AssigmentNodeIL): @@ -24,7 +24,7 @@ def __init__(self, left, right, offset): self.offset = offset def __str__(self): - return "{} = {}".format(self.left, self.offset) + return "var {} = memo [{}]".format(self.left, self.offset) class VarToMemoIL(AssigmentNodeIL): @@ -33,7 +33,7 @@ def __init__(self, left, right, offset): self.offset = offset def __str__(self): - return "{} = {}".format(self.offset, self.right) + return "memo [{}] = var {}".format(self.offset, self.right) class ConstToMemoIL(AssigmentNodeIL): @@ -42,4 +42,4 @@ def __init__(self, left, right, offset): self.offset = offset def __str__(self): - return "{} = {}\n".format(self.left + self.offset, self.right) \ No newline at end of file + return "memo [{}] = {}\n".format(self.left + self.offset, self.right) \ No newline at end of file diff --git a/src/code_generation/nodesIL/operation_node_il.py b/src/code_generation/nodesIL/operation_node_il.py index 929b126c..4c9f9316 100644 --- a/src/code_generation/nodesIL/operation_node_il.py +++ b/src/code_generation/nodesIL/operation_node_il.py @@ -2,21 +2,21 @@ class BinaryOperationIL(NodeIL): - def __init__(self, var, leftOp, rightOp, op): + def __init__(self, var, leftOp, rightOp, symbol): self.var = var self.leftOp = leftOp self.rightOp = rightOp - self.op = op + self.symbol = symbol def __str__(self): - return "{} = {} {} {}\n".format(self.var, self.leftOp, self.op, self.rightOp) + return "var {} = var {} {} var {}\n".format(self.var, self.leftOp, self.symbol, self.rightOp) class UnaryOperationIL(NodeIL): def __init__(self, var, op, symb): self.var = var self.op = op - self.symb = symb + self.symbol = symbol def __str__(self): - return "{} = {} {}".format(self.var, self.symbol, self.op) + return "var {} = {} var {}".format(self.var, self.symbol, self.op) From 2d59a1fa7964eacafec04061f56a4bb9ddf71c43 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 5 Nov 2020 22:14:01 -0500 Subject: [PATCH 042/140] some definitions in MethodsNodeIL --- .../nodesIL/allocate_node_il.py | 6 +-- .../nodesIL/methods_node_il.py | 52 ++++++++++--------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/code_generation/nodesIL/allocate_node_il.py b/src/code_generation/nodesIL/allocate_node_il.py index 5e9646cd..360a842b 100644 --- a/src/code_generation/nodesIL/allocate_node_il.py +++ b/src/code_generation/nodesIL/allocate_node_il.py @@ -2,10 +2,10 @@ class AllocateIL(NodeIL): - def __init__(self, var, size, type): + def __init__(self, var, size, typ): self.var = var self.size = size - self.type = type + self.typ = typ def __str__(self): - pass + return "alloc {} in {}".format(self.typ, self.var) diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index 687c1a1b..320dd11b 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -2,49 +2,51 @@ class LabelIL(NodeIL): - def __init__(self): - pass + def __init__(self, first, second, func): + self.label = first + '_' + second + self.first = first + self.second = second + self.func = func def __str__(self): - pass + return 'label {}:'.format(self.label) class GotoIL(NodeIL): - def __init__(self): - pass + def __init__(self, label): + self.label = label def __str__(self): - pass + return "goto {}".format(self.label) class IfJumpIL(NodeIL): - def __init__(self): - pass + + def __init__(self, var, label): + self.var = var + self.label = label def __str__(self): - pass + return 'if {} goto {}'.format(self.var, self.label) class PopIL(NodeIL): - def __init__(self): - pass + def __init__(self, size): + self.size = size def __str__(self): - pass + return 'pop {}'.format(self.size) class PushIL(NodeIL): - def __init__(self): - pass + def __init__(self, value): + self.value(value) def __str__(self): - pass + return 'push {}'.format(self.value) class ReturnIL(NodeIL): - def __init__(self): - pass - def __str__(self): - pass + return 'return\n' class StringIL(NodeIL): @@ -56,19 +58,19 @@ def __str__(self): class PrintIL(NodeIL): - def __init__(self): - pass + def __init__(self, string): + self.string = string def __str__(self): - pass + return 'print {}'.format(self.string) class CommentIL(NodeIL): - def __init__(self): - pass + def __init__(self, text): + self.text = text def __str__(self): - pass + return '#' + self.text class HierarchyIL(NodeIL): def __init__(self): From 2ad5ab450d1622b0d9bd3c04068c12503be537c5 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 6 Nov 2020 09:36:53 -0500 Subject: [PATCH 043/140] some other methodsIL definitions --- .../nodesIL/methods_node_il.py | 56 ++++++++++++++----- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index 320dd11b..6c6eafaa 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -11,6 +11,14 @@ def __init__(self, first, second, func): def __str__(self): return 'label {}:'.format(self.label) +class LoadLabelIL(NodeIL): + def __init__(self, var, label): + self.var = var + self.label = label + + def __str__(self): + return "load: {} to {}".format(self.label, str(self.var)) + class GotoIL(NodeIL): def __init__(self, label): self.label = label @@ -50,11 +58,12 @@ def __str__(self): class StringIL(NodeIL): - def __init__(self): - pass + def __init__(self, label, string): + self.label = label + self.string = string def __str__(self): - pass + return "{}: {}".format(self.label,self.string) class PrintIL(NodeIL): @@ -73,18 +82,23 @@ def __str__(self): return '#' + self.text class HierarchyIL(NodeIL): - def __init__(self): - pass + + def __init__(self, node, parent): + self.node = node + self.parent = parent def __str__(self): - pass + return "type {} descendant of {}".format(self.node, self.parent) class InheritIL(NodeIL): - def __init__(self): - pass + + def __init__(self, child, parent): + self.child = child + self.parent = parent + # self.res = res def __str__(self): - pass + return "child {} inherits parent {}".format(self.child, self.parent) class VirtualTableIL(NodeIL): def __init__(self): @@ -94,16 +108,30 @@ def __str__(self): pass class DispatchIL(NodeIL): - def __init__(self): - pass + + def __init__(self, obj, offset, result): + self.obj = obj + self.offset = offset + self.result = result def __str__(self): - pass + return "dispatch: object({}).method({}) to {}".format(self.obj,self.offset,self.result) class DispatchParentIL(ILNode): - def __init__(self): - pass + + def __init__(self, obj, method, result): + self.method = method + self.result = result + self.obj = obj + + + def __str__(self): + return "dispatch_parent: method {} with_obj {} in {}".format(self.method, self.obj, self.result) +class VirtualTableIL(ILNode): + def __init__(self, name, methods): + self.name = name + self.methods = methods def __str__(self): pass \ No newline at end of file From 16339c662eec406aadd510e2221870753fc8b710 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 6 Nov 2020 10:24:56 -0500 Subject: [PATCH 044/140] adding transpilator def, virtual table def and variables def --- src/code_generation/nodesIL/variables.py | 28 ++++++++++++++++++++++++ src/code_generation/transpilator.py | 17 ++++++++++++++ src/code_generation/virtual_table.py | 25 +++++++++++++++++++-- 3 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/code_generation/nodesIL/variables.py diff --git a/src/code_generation/nodesIL/variables.py b/src/code_generation/nodesIL/variables.py new file mode 100644 index 00000000..cf7472d0 --- /dev/null +++ b/src/code_generation/nodesIL/variables.py @@ -0,0 +1,28 @@ +class Variables: + + def __init__(self): + self.variables = {} + self.vars = [] + + def add_var(self, name): + pass + + def id(self, name): + pass + + def pop_var(self): + pass + + def add_temp(self): + pass + + def peek_last(self): + pass + + def get_stack(self): + pass + + def get_copy(self): + pass + + \ No newline at end of file diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index e69de29b..497fdacb 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -0,0 +1,17 @@ +import sys +sys.path.append('/..') +from .nodesIL.node_il import * +from .nodesIL.allocate_node_il import * +from .nodesIL.assignmet_node_il import * +from .nodesIL.methods_node_il import * +from .nodesIL.operation_node_il import * +from ..visitors import visitor + +class codeVisitor: + + def __init__(self): + #code IL + self.code = [] + self.data = [] + + self \ No newline at end of file diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index 24544f5a..8b8a508e 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -1,4 +1,25 @@ -class virtualTable: +class VirtualTable: def __init__(self): - pass \ No newline at end of file + self.classes = {} + self.methods = {} + self.attributes = {} + + def add_method(self, A, B, args): + pass + + def add_attr(self, claSS, args): + pass + + def get_method_id(self, claSS, method): + pass + + def get_attributes(self, claSS): + pass + + def get_attributes_id(self, claSS, attr): + pass + + + + From a67b3f9cabd237880b9ee954aac9657f8df664a1 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 6 Nov 2020 10:39:45 -0500 Subject: [PATCH 045/140] variables class completed missing some test --- src/code_generation/nodesIL/variables.py | 26 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/code_generation/nodesIL/variables.py b/src/code_generation/nodesIL/variables.py index cf7472d0..d1fbad32 100644 --- a/src/code_generation/nodesIL/variables.py +++ b/src/code_generation/nodesIL/variables.py @@ -1,28 +1,36 @@ class Variables: def __init__(self): - self.variables = {} + self.stack = {} self.vars = [] def add_var(self, name): - pass + self.stack[name] = len(self.stack) + 1 + self.vars.append(name) def id(self, name): - pass + return len(self.stack) - self.stack[name] + 1 def pop_var(self): - pass + self.stack.pop(self.vars[-1]) + self.vars.pop() def add_temp(self): - pass + name = len(self.stack) + 1 + self.add_var('tmp_' + str(name)) def peek_last(self): - pass + return self.vars[-1] def get_stack(self): - pass + stack = '|' + for v in self.stack: + stack += 'id: ' + str(self.id(v) ) + 'name :' + v + '|' + return stack def get_copy(self): - pass + vars_copy = Variables() + vars_copy.stack = self.stack.copy() + vars_copy.vars = self.vars.copy() + return vars_copy - \ No newline at end of file From 4a17a51e195bed7ae643d803adf55351ba91e867 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sat, 7 Nov 2020 15:05:26 -0500 Subject: [PATCH 046/140] finishing add method functionality in virtual table --- src/code_generation/virtual_table.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index 8b8a508e..2fff115d 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -6,16 +6,38 @@ def __init__(self): self.attributes = {} def add_method(self, A, B, args): - pass + + if not A in self.methods: + self.methods[A] = [] + self.methos[A].append((B, args)) + else: + add = True + for name, arguments in self.methods[A]: + if name == B: + if len(args) == len(arguments): + differs = False + for i in range(0, len(args)): + if arg[i] != arguments[i]: + differs = True + break + if !differs: + add = False + if add: + self.methods[A].append((B, args)) + + def add_attr(self, claSS, args): - pass + if not claSS in self.attributes: + self.attributes[claSS] = [] + for arg in args: + self.attributes[claSS].append(a) def get_method_id(self, claSS, method): pass def get_attributes(self, claSS): - pass + return self.attributes[claSS] def get_attributes_id(self, claSS, attr): pass From 8ed3e42489541eab52de747a1291c93c52efeaa6 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sat, 7 Nov 2020 21:55:52 -0500 Subject: [PATCH 047/140] starting visitor skeleton for transpilator --- src/code_generation/nodesIL/__init__.py | 4 + src/code_generation/transpilator.py | 106 +++++++++++++++++- .../{nodesIL => }/variables.py | 0 3 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 src/code_generation/nodesIL/__init__.py rename src/code_generation/{nodesIL => }/variables.py (100%) diff --git a/src/code_generation/nodesIL/__init__.py b/src/code_generation/nodesIL/__init__.py new file mode 100644 index 00000000..428291c0 --- /dev/null +++ b/src/code_generation/nodesIL/__init__.py @@ -0,0 +1,4 @@ +from node_il import NodeIL +from allocate_node_il import * +from assignmet_node_il import * +from operation_node_il import * \ No newline at end of file diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 497fdacb..559236b1 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -1,11 +1,9 @@ import sys sys.path.append('/..') -from .nodesIL.node_il import * -from .nodesIL.allocate_node_il import * -from .nodesIL.assignmet_node_il import * -from .nodesIL.methods_node_il import * -from .nodesIL.operation_node_il import * +from .nodesIL import * +from .virtual_table import VirtualTable from ..visitors import visitor +from ..cl_ast import * class codeVisitor: @@ -14,4 +12,100 @@ def __init__(self): self.code = [] self.data = [] - self \ No newline at end of file + self.count = 0 + + self.virtual_table = VirtualTable() + + def getInt(self): + self.count = self.count + 1 + return self.count + + def collectTypes(self): + pass + + def setInitialCode(self): + pass + + + @visitor.on('node') + def visit(self, node): + pass + + #program + @visitor.on(ProgramNode) + def visit(self, node): + pass + + #declarations + @visitor.on(ClassDeclarationNode) + def visit(self, node): + pass + + @visitor.on(AttrDeclarationNode) + def visit(self, node): + pass + + @visitor.on(FuncDeclarationNode) + def visit(self, node): + pass + + @visitor.on(VarDeclarationNode) + def visit(self, node): + pass + + #operations: binary + @visitor.on(SumNode) + def visit(self, node): + pass + + @visitor.on(DiffNode) + def visit(self, node): + pass + + @visitor.on(StarNode) + def visit(self, node): + pass + + @visitor.on(DivNode) + def visit(self, node): + pass + + @visitor.on(LessNode) + def visit(self, node): + pass + + @visitor.on(LessEqualNode) + def visit(self, node): + pass + + @visitor.on(EqualNode) + def visit(self, node): + pass + + #operations: unary + + @visitor.on(BitNotNode) + def visit(self, node): + pass + + @visitor.on(NotNode) + def visit(self, node): + pass + + #operations: complex + #TODO + + #constants + @visitor.on(IntegerNode) + def visit(self, node): + pass + + @visitor.on(StringNode) + def visit(self, node): + pass + + @visitor.on(BoolNode) + def visit(self, node): + pass + + diff --git a/src/code_generation/nodesIL/variables.py b/src/code_generation/variables.py similarity index 100% rename from src/code_generation/nodesIL/variables.py rename to src/code_generation/variables.py From f00c645515495615b3e0c6a9c3dbe5018edfe518 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sat, 7 Nov 2020 22:08:08 -0500 Subject: [PATCH 048/140] adding some other visitor nodes --- src/cl_ast/expressions/complex_exprs.py | 2 +- src/code_generation/transpilator.py | 65 ++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/cl_ast/expressions/complex_exprs.py b/src/cl_ast/expressions/complex_exprs.py index bec5018a..5418477c 100644 --- a/src/cl_ast/expressions/complex_exprs.py +++ b/src/cl_ast/expressions/complex_exprs.py @@ -97,4 +97,4 @@ def __init__(self, row, col, obj, typex, idx, args): self.obj = obj self.id = idx self.args = args - self.type = typex \ No newline at end of file + self.type = typex diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 559236b1..64efab44 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -92,8 +92,64 @@ def visit(self, node): def visit(self, node): pass - #operations: complex - #TODO + #expressions: atomics + @visitor.on(VariableNode) + def visit(self, node): + pass + + @visitor.on(NewNode) + def visit(self, node): + pass + + #expressions: complex + @visitor.on(ConditionalNode) + def visit(self, node): + pass + + @visitor.on(WhileNode) + def visit(self, node): + pass + + @visitor.on(LetNode) + def visit(self, node): + pass + + @visitor.on(LetDeclarationNode) + def visit(self, node): + pass + + @visitor.on(BlockNode) + def visit(self, node): + pass + + @visitor.on(CaseNode) + def visit(self, node): + pass + + @visitor.on(OptionNode) + def visit(self, node): + pass + + @visitor.on(AssignNode) + def visit(self, node): + pass + + @visitor.on(IsVoidNode) + def visit(self, node): + pass + + #expression: complex->dispatch + @visitor.on(ExprCallNode) + def visit(self, node): + pass + + @visitor.on(SelfCallNode) + def visit(self, node): + pass + + @visitor.on(ParentCallNode) + def visit(self, node): + pass #constants @visitor.on(IntegerNode) @@ -109,3 +165,8 @@ def visit(self, node): pass + + + + + From ca94dd905a45c597f38451f4d39a798bba783e13 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sun, 8 Nov 2020 11:55:53 -0500 Subject: [PATCH 049/140] some correction in import and some defs --- src/code_generation/nodesIL/__init__.py | 8 +++---- .../nodesIL/assignmet_node_il.py | 8 +++---- src/code_generation/transpilator.py | 21 ++++++++++++++++--- src/code_generation/virtual_table.py | 2 +- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/code_generation/nodesIL/__init__.py b/src/code_generation/nodesIL/__init__.py index 428291c0..35494bb5 100644 --- a/src/code_generation/nodesIL/__init__.py +++ b/src/code_generation/nodesIL/__init__.py @@ -1,4 +1,4 @@ -from node_il import NodeIL -from allocate_node_il import * -from assignmet_node_il import * -from operation_node_il import * \ No newline at end of file +from .node_il import NodeIL +from .allocate_node_il import * +from .assignmet_node_il import * +from .operation_node_il import * \ No newline at end of file diff --git a/src/code_generation/nodesIL/assignmet_node_il.py b/src/code_generation/nodesIL/assignmet_node_il.py index f3287d6c..85aaeef1 100644 --- a/src/code_generation/nodesIL/assignmet_node_il.py +++ b/src/code_generation/nodesIL/assignmet_node_il.py @@ -9,7 +9,7 @@ def __init__(self, left, right): def __str__(self): return "{} = {}".format(self.left, self.right) -class VarToVarIL(AssigmentNodeIL): +class VarToVarIL(AssignmentNodeIL): def __init__(self, left, right): super().__init__(left, right) @@ -17,7 +17,7 @@ def __init__(self, left, right): def __str__(self): return "var {} = var {}".format(self.left, self.right) -class MemoToVarIL(AssigmentNodeIL): +class MemoToVarIL(AssignmentNodeIL): def __init__(self, left, right, offset): super().__init__(left, right) @@ -26,7 +26,7 @@ def __init__(self, left, right, offset): def __str__(self): return "var {} = memo [{}]".format(self.left, self.offset) -class VarToMemoIL(AssigmentNodeIL): +class VarToMemoIL(AssignmentNodeIL): def __init__(self, left, right, offset): super().__init__(left, right) @@ -35,7 +35,7 @@ def __init__(self, left, right, offset): def __str__(self): return "memo [{}] = var {}".format(self.offset, self.right) -class ConstToMemoIL(AssigmentNodeIL): +class ConstToMemoIL(AssignmentNodeIL): def __init__(self, left, right, offset): super().__init__(left, right) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 64efab44..84e70e55 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -1,8 +1,8 @@ import sys sys.path.append('/..') from .nodesIL import * -from .virtual_table import VirtualTable -from ..visitors import visitor +from virtual_table import VirtualTable +import visitor from ..cl_ast import * class codeVisitor: @@ -26,6 +26,21 @@ def collectTypes(self): def setInitialCode(self): pass + def setBuiltInTypes(self): + built_in = ['Object', 'IO', 'Bool', 'String'] + for t in built_in: + self.code.append(LabelIL(t, 'Constructor', True)) + self.code.append(PushIL()) + self.append(ReturnIL()) + + def setClassConstructor(self): + pass + + def handleBinaryOps(self, node, variables, symbol): + pass + + def handleUnaryOps(self, node, variables, symbol): + pass @visitor.on('node') def visit(self, node): @@ -34,7 +49,7 @@ def visit(self, node): #program @visitor.on(ProgramNode) def visit(self, node): - pass + self.visit(node.declarations) #declarations @visitor.on(ClassDeclarationNode) diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index 2fff115d..8124129e 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -20,7 +20,7 @@ def add_method(self, A, B, args): if arg[i] != arguments[i]: differs = True break - if !differs: + if not differs: add = False if add: self.methods[A].append((B, args)) From a9e7abe519f84854e65f820ce21a7720e48ef667 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Tue, 10 Nov 2020 10:29:16 -0500 Subject: [PATCH 050/140] some methods in transpilator, class constructor, built ins constructor, handles for operations --- src/code_generation/nodesIL/__init__.py | 3 +- .../nodesIL/methods_node_il.py | 9 ++- src/code_generation/transpilator.py | 64 +++++++++++++++++-- src/code_generation/virtual_table.py | 3 +- 4 files changed, 67 insertions(+), 12 deletions(-) diff --git a/src/code_generation/nodesIL/__init__.py b/src/code_generation/nodesIL/__init__.py index 35494bb5..2e3bf46c 100644 --- a/src/code_generation/nodesIL/__init__.py +++ b/src/code_generation/nodesIL/__init__.py @@ -1,4 +1,5 @@ from .node_il import NodeIL from .allocate_node_il import * from .assignmet_node_il import * -from .operation_node_il import * \ No newline at end of file +from .operation_node_il import * +from .methods_node_il import * \ No newline at end of file diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index 6c6eafaa..36efe68b 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -45,11 +45,14 @@ def __str__(self): class PushIL(NodeIL): - def __init__(self, value): - self.value(value) + def __init__(self, value = 0, case = 1): + self.value = value + self.case = case def __str__(self): - return 'push {}'.format(self.value) + if self.value: + return 'push {}'.format(self.value) + return 'push' class ReturnIL(NodeIL): diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 84e70e55..a5355b40 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -1,7 +1,8 @@ import sys sys.path.append('/..') -from .nodesIL import * +from nodesIL import * from virtual_table import VirtualTable +from variables import Variables import visitor from ..cl_ast import * @@ -13,6 +14,7 @@ def __init__(self): self.data = [] self.count = 0 + self.current_class = 'Main' self.virtual_table = VirtualTable() @@ -24,8 +26,20 @@ def collectTypes(self): pass def setInitialCode(self): - pass - + self.code.append(CommentIL('--------------Initial Code---------------')) + self.code.append(LabelIL("main", "")) + + self.append(PushIL()) + self.append(PushIL()) + self.append(PushIL()) + + self.code.append(AllocateIL(1, self.vt.get_index('Main'), 'Main')) + self.code.append(DispatchParentIL(2, 1, 'Main.Constructor')) + + self.code.append(DispatchIL(3,1,self.virtual_table.get_method_id('Main', 'main'))) + + self.code.append(GotoIL("Object.abort")) + def setBuiltInTypes(self): built_in = ['Object', 'IO', 'Bool', 'String'] for t in built_in: @@ -33,14 +47,50 @@ def setBuiltInTypes(self): self.code.append(PushIL()) self.append(ReturnIL()) - def setClassConstructor(self): - pass + def setClassConstructor(self, attributes): + self.code.append(LabelIL(self.current_class, 'Constructor', True)) + + vars = Variables() + vars.add_var('self') + vars.add_temp() + + for node in attributes: + if node.value == None: + continue + self.visit(node.value, vars) + p = vars.peek_last() + index = self.virtual_table.get_attributes_id(self.current_class, node.name.value) + self.code.append(VarToMemoIL(vars.id('self'), vars.id(p), index))) + + self.code.append(PushIL()) + self.code.append(ReturnIL()) + def handleBinaryOps(self, node, variables, symbol): - pass + self.code.append(CommentIL('Binary')) + self.code.append(PushIL()) + res = variables.add_temp() + + self.visit(node.left, variables) + left = variables.peek_last() + self.visit(node.right, variables) + right = variables.peek_last() + + self.code.append(BinaryOperationIL(variables.id(res), variables.id(left), variables.id(right), symbol)) + + variables.pop_var() + variables.pop_var() + self.code.append(PopIL(2)) def handleUnaryOps(self, node, variables, symbol): - pass + self.code.append(CommentIL('Unary')) + res = variables.add_tmp() + self.code.append(PushIL()) + + self.visit(node.expr, variables) + v = variables.peek_last() + + self.code.append(UnaryOperationIL(variables.id(res), variables.id(v), symbol)) @visitor.on('node') def visit(self, node): diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index 8124129e..55e57a0d 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -25,7 +25,8 @@ def add_method(self, A, B, args): if add: self.methods[A].append((B, args)) - + def get_index(self, c): + return len(self.attr[c]) + 1 def add_attr(self, claSS, args): if not claSS in self.attributes: From d30e1266d7eff31157403dd182821c0b14c283cb Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Tue, 10 Nov 2020 15:03:21 -0500 Subject: [PATCH 051/140] collect types method completed --- src/code_generation/transpilator.py | 58 ++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index a5355b40..3a899e26 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -18,12 +18,66 @@ def __init__(self): self.virtual_table = VirtualTable() + self.depth = {} + def getInt(self): self.count = self.count + 1 return self.count - def collectTypes(self): - pass + def collectTypes(self, classes): + types = {'Object' : None, 'IO' : 'Object', 'Int' : 'Object', 'Bool' : 'Object', 'String' : 'Object'} + methods = {'Object' : ['abort', 'type_name', 'copy'],'IO' : ['out_string', 'out_int', 'in_string', 'in_int'],'String' : ['length', 'concat', 'substr'],'Int' : [], 'Bool' : [] } + + attr = dict([ (x, []) for x in types ]) + + for node in classes: + types[node.idx.value] = node.parent.value + + for f in node.features: + if type(f) == AttrDeclarationNode: + if not node.idx.value in attr: + attr[node.idx.value] = [] + attr[node.idx.value].append(f.name.value) + else: + if not node.idx.value in methods: + methods[node.idx.value] = [] + methods[node.idx.value].append(f.name.value) + + for t in types.keys(): + nodes = [t] + x = t + + while types[x] != None: + x = types[x] + nodes.append(x) + + nodes.reverse() + + for n in nodes: + try: + self.virtual_table.add_method(t, n, methods[n]) + except: + pass + + try: + self.virtual_table.add_attr(t, attr[n]) + + for t in types: + slef.data.append(HierarchyIL(t, types[t])) + + for m in self.virtual_table.methods: + self.data.append(VirtualTableIL(c, self.virtual_table.methods[m])) + + depth = dict([(x, len(types) + 2) for x in types]) + depth['Object'] = 0 + + for _ in types: + for c in types: + if c == 'Object': + continue + p = types[c] + depth[c] = min(depth[c], depth[p] + 1) + self.depth = depth def setInitialCode(self): self.code.append(CommentIL('--------------Initial Code---------------')) From 14e04976bacca0ceded124576dfebc971bd7af20 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Wed, 11 Nov 2020 09:12:05 -0500 Subject: [PATCH 052/140] binary and unary operations visitor for transpilator --- src/code_generation/transpilator.py | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 3a899e26..da3c8bd0 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -174,42 +174,42 @@ def visit(self, node): #operations: binary @visitor.on(SumNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.handleBinaryOps(node, variables, '+') @visitor.on(DiffNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.handleBinaryOps(node, variables, '-') @visitor.on(StarNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.handleBinaryOps(node, variables, '*') @visitor.on(DivNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.handleBinaryOps(node, variables, '/') @visitor.on(LessNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.handleBinaryOps(node, variables, '<') @visitor.on(LessEqualNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.handleBinaryOps(node, variables, '<=') @visitor.on(EqualNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.handleBinaryOps(node, variables, '=') #operations: unary @visitor.on(BitNotNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.handleUnaryOps(node, variables, '~') @visitor.on(NotNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.handleUnaryOps(node, variables, '!') #expressions: atomics @visitor.on(VariableNode) From eaff126dae1426b35f9cdba6b99b1b8619e64b1f Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Wed, 11 Nov 2020 14:47:49 -0500 Subject: [PATCH 053/140] vistor -> expersions: atomics --- src/code_generation/transpilator.py | 31 +++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index da3c8bd0..738f5eaa 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -213,12 +213,35 @@ def visit(self, node, variables): #expressions: atomics @visitor.on(VariableNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(PushIL()) + result = variables.add_temp() + + if node.id.value in variables.variables: + self.code.append(VarToVarIL(variables.id(result), variables.id(node.id.value))) + else: + self.code.append(MemoToVarIL(variables.id(result), variables.id('self'), self.virtual_table.get_attributes_id(self.current_class, node.id.value))) @visitor.on(NewNode) - def visit(self, node): - pass + def visit(self, node, variables): + result = variables.add_temp() + self.code.append(PushIL()) + + dispatch = variables.add_tmp() + self.code.append(PushIL()) + + self.code.append(PushIL()) + p = variables.add_tmp() + + size = self.virtual_table.get_index(node.type.value) + self.code.append(AllocateIL(variables.id(p), size, node.type.value)) + + self.code.append(VarToVarIL(variables.id(result), variables.id(p))) + self.code.append(DispatchParentIL(variables.id(dispatch), variables.id(p), node.type.value + '.Constructor')) + + self.code.append(PopIL(2)) + variables.pop_var() + variables.pop_var() #expressions: complex @visitor.on(ConditionalNode) From da12e01182722a94ec34d9bbe68c0a8c7e6d9f6a Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Wed, 11 Nov 2020 14:59:40 -0500 Subject: [PATCH 054/140] vistor -> expresions: constants --- src/code_generation/transpilator.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 738f5eaa..a942b840 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -295,16 +295,28 @@ def visit(self, node): #constants @visitor.on(IntegerNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(CommentIL('Integer')) + variables.add_temp() + self.code.append(PushIL(int(self.lex)) @visitor.on(StringNode) - def visit(self, node): - pass + def visit(self, node, variables): + label = 'string_' + str(self.getInt()) + self.data.append(StringIL(label, node.lex)) + self.code.append(CommentIL('loading label')) + self.code.append(PushIL()) + p = variables.add_tmp() + + self.code.append(LoadLabelIL(variables.id(p), label)) @visitor.on(BoolNode) def visit(self, node): - pass + variables.add_tmp() + if node.lex: + self.code.append(PushIL(1)) + else: + self.code.append(PushIL(0)) From 7b2baf0e76c378096c8733e41a1594f45d84eaf5 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 12 Nov 2020 10:54:52 -0500 Subject: [PATCH 055/140] visitor-> block node --- src/code_generation/transpilator.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index a942b840..0c0c420f 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -261,8 +261,19 @@ def visit(self, node): pass @visitor.on(BlockNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(CommentIL('Block')) + result = variables.add_temp() + self.code.append(PushIL(0)) + for expr in node.expr_list: + self.visit(expr, variables) + + p = variables.peek_last() + self.code.append(VarToVarIL(variables.id(result), variables.id(p))) + + self.code.append(PopIL()) + for i in range(0, len(node.expr_list)): + variables.pop_var() @visitor.on(CaseNode) def visit(self, node): From c9d980ae69f0cc0fc60853df7ad79c5799217bca Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 12 Nov 2020 11:10:40 -0500 Subject: [PATCH 056/140] visitor-> while node --- src/code_generation/transpilator.py | 32 ++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 0c0c420f..aecfc849 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -245,12 +245,38 @@ def visit(self, node, variables): #expressions: complex @visitor.on(ConditionalNode) - def visit(self, node): + def visit(self, node, variables): pass @visitor.on(WhileNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(CommentIL('loop')) + self.code.append(PushIL()) + + result = variables.add_tmp() + + LOOP = LabelIL('_loop', self.getInt()) + POOL = LabelIL('_pool', LOOP.second) + BODY = LabelIL('_body', LOOP.second) + + self.code.append(LOOP) + + self.visit(node.cond, variables) + p = variables.peek_last() + + self.code.append(IfJumpIL(variables.id(p), BODY.label)) + + self.code.append(GotoIL(POOL.label)) + + self.code.append(BODY) + self.visit(node.expr, variables) + variables.pop_var() + variables.pop_var() + self.code.append(PopIL(2)) + self.code.append(GotoIL(LOOP.label)) + + self.code.append(POOL) + @visitor.on(LetNode) def visit(self, node): From 1c0139a07f7206005b7be2702aaa6ab26d1adc6c Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 12 Nov 2020 11:23:46 -0500 Subject: [PATCH 057/140] visitor-> conditional node --- src/code_generation/transpilator.py | 30 ++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index aecfc849..a3ffede6 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -246,7 +246,35 @@ def visit(self, node, variables): #expressions: complex @visitor.on(ConditionalNode) def visit(self, node, variables): - pass + self.code.append(CommentIL('Condition')) + result = variables.add_temp() + self.code.append(PushIL()) + + self.visit(node.cond, variables) + p = variables.peek_last() + + IF = LabelIL('_if', self.getInt()) + FI = labelIL('_fi', IF.second) + + self.append(IfJumpIL(variables.id(p), IF.label)) + + self.visit(node.else_stm, variables) + ELSE = variables.peek_last() + self.code.append(VarToVarIL(variables.id(result), variables.id(ELSE))) + + self.code.append(GotoIL(FI.label)) + + self.code.append(IF) + self.visit(node.stm, variables) + _if = variables.peek_last() + self.code.append(VarToVarIL(variables.id(result), variables.id(_if))) + variables.pop_var() + + self.code.append(LabelIL('_fi'), IF.second) + + variables.pop_var() + self.code.append(PopIL(2)) + @visitor.on(WhileNode) def visit(self, node, variables): From 46a3020c3ce93d0a52157a002daace9b2e5f4610 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 12 Nov 2020 11:46:33 -0500 Subject: [PATCH 058/140] visitor-> let node --- src/code_generation/transpilator.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index a3ffede6..c4fa119e 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -307,8 +307,25 @@ def visit(self, node, variables): @visitor.on(LetNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(PushIL()) + result = variables.add_temp() + + vars = variables.get_copy() + + for expr in node.init_list: + self.visit(expr, vars) + vars = vars.get_copy() + + self.visit(node.expr, vars) + p = vars.peek_last() + + self.code.append(VarToVarIL(result, p)) + pop_times = len(node.expr) + 1 + + self.code.append(PopIL(pop_times)) + + @visitor.on(LetDeclarationNode) def visit(self, node): From d879e8d9aeb1aba608101361dde2fa14bbec184a Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 12 Nov 2020 11:54:06 -0500 Subject: [PATCH 059/140] visitor-> assign node --- src/code_generation/transpilator.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index c4fa119e..d256d46b 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -308,6 +308,7 @@ def visit(self, node, variables): @visitor.on(LetNode) def visit(self, node, variables): + self.code.append(CommentIL('Let')) self.code.append(PushIL()) result = variables.add_temp() @@ -355,8 +356,15 @@ def visit(self, node): pass @visitor.on(AssignNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(CommentIL('Assignment')) + self.visit(node.expr, variables) + p = variables.peek_last() + + if node.idx.value in variables.variables: + self.code.append(VarToVarIL(variables.id(node.idx.value), variables.id(p))) + else: + self.code.append(VarToMemoIL(variables.id('self'), variables.id(p), self.virtual_table.get_attributes_id(self.current_class, node.idx.value))) @visitor.on(IsVoidNode) def visit(self, node): From d592078c746965da0895bfa967a2bbff02f0f29e Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 12 Nov 2020 15:32:01 -0500 Subject: [PATCH 060/140] visitor-> case node --- src/code_generation/transpilator.py | 49 +++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index d256d46b..2c26fae9 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -348,8 +348,53 @@ def visit(self, node, variables): variables.pop_var() @visitor.on(CaseNode) - def visit(self, node): - pass + def visit(self, node, variables): + node.case_list.sort(key = lambda x : self.depth[x.type], reverse = True) + + result = variables.add_temp() + self.code.append(PushIL()) + + self.visit(node.expr, variables) + p = variables.peek_last() + + labels = [] + for b in node.branches: + labels.append(LabelIL('branch', self.getInt())) + + index = 0 + for b in node.branches: + tmp = variables.add_temp() + self.code.apppend(PushIL()) + + self.code.append(InheritIL(variables.id(p), b.typex, variables.id(tmp))) + + self.code.append(IfJumpIL(variables.id(tmp), labels[i].label)) + self.code.append(PopIL(1)) + variables.pop_var() + i += 1 + + end_label = LabelIL('esac', self.getInt()) + i = 0 + for b in node.branches: + self.code.append(labels[i]) + i += 1 + variables.pop_var() + self.code.append(PopIL(1)) + + self.code.append(PushIL()) + result = variables.add_var(b.id) + self.code.append(VarToVarIL(variables.id(result), variables.id(p))) + + self.visit(b.expr, variables) + m = variables.peek_last() + + self.code.append(VarToVarIL(variables.id(result), variables.id(m))) + + variables.pop_var() + variables.pop_var() + variables.pop_var() + + self.code.append(PopIL(3)) @visitor.on(OptionNode) def visit(self, node): From 672b505f41692e1a44e92fc876f33a7ce89ffdca Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 12 Nov 2020 15:55:16 -0500 Subject: [PATCH 061/140] visitor-> class declaration node --- src/code_generation/transpilator.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 2c26fae9..d607af3c 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -158,7 +158,17 @@ def visit(self, node): #declarations @visitor.on(ClassDeclarationNode) def visit(self, node): - pass + self.current_class = node.idx.value + + attributes = [] + for f in node.features: + if type(f) == AttrDeclarationNode: + attributes.append(f) + + self.setClassConstructor(attributes) + + for f in node.features: + self.visit(f) @visitor.on(AttrDeclarationNode) def visit(self, node): From 6426b481af923709c911d56907e63c1cc5a802bf Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 12 Nov 2020 15:59:33 -0500 Subject: [PATCH 062/140] visitor-> func declaration node --- src/code_generation/transpilator.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index d607af3c..28729279 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -176,7 +176,18 @@ def visit(self, node): @visitor.on(FuncDeclarationNode) def visit(self, node): - pass + self.code.append(LabelIL(self.current_class, node.idx, True)) + + variables = Variables() + variables.add_var('self') + + for p in node.params: + variables.add_var(p.name) + + variables.add_temp() + + self.visit(node.body, variables) + self.code.append(ReturnIL()) @visitor.on(VarDeclarationNode) def visit(self, node): From 1c7c1ff634012fa0f930a26615ff768dd9bb689b Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Thu, 12 Nov 2020 16:06:20 -0500 Subject: [PATCH 063/140] visitor-> var declaration node --- src/code_generation/transpilator.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 28729279..4197b4e7 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -190,8 +190,16 @@ def visit(self, node): self.code.append(ReturnIL()) @visitor.on(VarDeclarationNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(PushIL()) + p = variables.add_var(node.idx.value) + + if node.expr != None: + self.visit(node.expr, variables) + res = variables.peek_last() + self.code.append(VarToVarIL(variables.id(p), variables.id(res))) + variables.pop_var() + self.code.append(PopIL()) #operations: binary @visitor.on(SumNode) From 6361350a6212f0a3af94e1618856cf19bfd85596 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 13 Nov 2020 09:31:08 -0500 Subject: [PATCH 064/140] visitor -> self dispatch --- .../nodesIL/methods_node_il.py | 20 ++++++------ src/code_generation/transpilator.py | 31 +++++++++++++++++-- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index 36efe68b..f052017e 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -104,11 +104,17 @@ def __str__(self): return "child {} inherits parent {}".format(self.child, self.parent) class VirtualTableIL(NodeIL): - def __init__(self): - pass + def __init__(self, name, methods): + self.name = name + self.methods = methods def __str__(self): - pass + to_return = '' + to_return += 'VirtualTable: ' + self.name + '\n' + to_return += '------Methods---------\n' + for m in self.methods: + to_return += m + '\n' + return to_return class DispatchIL(NodeIL): @@ -130,11 +136,3 @@ def __init__(self, obj, method, result): def __str__(self): return "dispatch_parent: method {} with_obj {} in {}".format(self.method, self.obj, self.result) - -class VirtualTableIL(ILNode): - def __init__(self, name, methods): - self.name = name - self.methods = methods - - def __str__(self): - pass \ No newline at end of file diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 4197b4e7..27b67327 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -450,8 +450,35 @@ def visit(self, node): pass @visitor.on(SelfCallNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(CommentIL('Self-Dispatch')) + + result = variables.add_temp() + self.code.append(PushIL()) + + index = self.virtual_table.get_method_id(self.current_class, node.id.value) + + if self.current_class != 'Main': + self.code.append(CommentIL('push self')) + s = variables.add_temp() + self.code.append(PushIL()) + self.code.append(VarToVarIL(variables.id(s), variables.id('self'))) + + i = 0 + for p in node.args: + self.code.append(CommentIL('Args: ' + str(i))) + i += 1 + self.visit(p, variables) + self.code.append(DispatchIL(variables.id(result), variables.id('self'), index)) + + n = 0 + if self.current_class == 'Main': + n = 1 + + for i in range(len(node.args) + n): + variables.pop_var() + + self.code.append(PopIL(len(node.args) + n)) @visitor.on(ParentCallNode) def visit(self, node): From 77ea185fd3ead926e052894b8749d79e000f679d Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 13 Nov 2020 09:45:52 -0500 Subject: [PATCH 065/140] visitor -> point dispatch --- src/code_generation/transpilator.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index 27b67327..c4f06843 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -446,8 +446,31 @@ def visit(self, node): #expression: complex->dispatch @visitor.on(ExprCallNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(CommentIL('Point-Dispatch')) + + result = variables.add_temp() + self.code.append(PushIL()) + + index = self.virtual_table.get_method_id(node.obj.type, node.id.value) + + self.code.append(CommentIL('push object')) + self.visit(node.obj, variables) + + name = variables.peek_last() + + i = 0 + for p in node.args: + self.code.append(CommentIL('Args: ' + str(i))) + i += 1 + self.visit(p, variables) + + self.code.append(DispatchIL(variables.id(result), variables.id(name), index)) + + for i in range(0, len(node.args) + 1): + variables.pop_var() + + self.code.append(PopIL(len(node.args) + 1)) @visitor.on(SelfCallNode) def visit(self, node, variables): From 1ce6fec245bed07293fb3d3e133d284448a9cc69 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 13 Nov 2020 10:37:32 -0500 Subject: [PATCH 066/140] visitor -> parent dispatch --- src/code_generation/transpilator.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/code_generation/transpilator.py b/src/code_generation/transpilator.py index c4f06843..1b1cb318 100644 --- a/src/code_generation/transpilator.py +++ b/src/code_generation/transpilator.py @@ -504,8 +504,30 @@ def visit(self, node, variables): self.code.append(PopIL(len(node.args) + n)) @visitor.on(ParentCallNode) - def visit(self, node): - pass + def visit(self, node, variables): + self.code.append(CommentIL('Parent-Dispatch')) + + result = variables.add_temp() + self.code.append(PushIL()) + + self.code.append('push object') + self.visit(node.obj, variables) + name = variables.peek_last() + + i = 0 + for p in node.args: + self.code.append(CommentIL('Args: ' + str(i))) + i += 1 + self.visit(p, variables) + + method = node.idx.value + '.' + node.obj.idx.value + + self.code.append(DispatchParentIL(variables.id(result), variables.id(name), method)) + + for i in range((len(node.args) + 1)): + variables.pop_var() + self.code.append(PopIL(len(node.args) + 1)) + #constants @visitor.on(IntegerNode) From e10874586d7abc3000ba8146512a18d227a28104 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 13 Nov 2020 10:56:37 -0500 Subject: [PATCH 067/140] visitor for IL to mips skeleton --- src/code_generation/to_mips.py | 108 +++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/code_generation/to_mips.py diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py new file mode 100644 index 00000000..34ec3446 --- /dev/null +++ b/src/code_generation/to_mips.py @@ -0,0 +1,108 @@ +import os +from nodesIL import * +import visitor + +class MIPS: + def __init__(self): + pass + + def start(self): + pass + + @visitor.on('node') + def visit(self, node): + pass + + #operations + + @visitor.on(BinaryOperationIL) + def visit(self, node): + pass + + @visitor.on(UnaryOperationIL) + def visit(self, node): + pass + + #allocate + + @visitor.on(AllocateIL) + def visit(self, node): + pass + + #assignment + @visitor.on(VarToVarIL) + def visit(self, node): + pass + + @visitor.on(VarToMemoIL) + def visit(self, node): + pass + + @visitor.on(MemoToVarIL) + def visit(self, node): + pass + + @visitor.on(ConstToMemoIL) + def visit(self, node): + pass + + #methods + @visitor.on(LabelIL) + def visit(self, node): + pass + + @visitor.on(GotoIL) + def visit(self, node): + pass + + @visitor.on(CommentIL) + def visit(self, node): + pass + + @visitor.on(IfJumpIL) + def visit(self, node): + pass + + @visitor.on(HierarchyIL) + def visit(self, node): + pass + + @visitor.on(VirtualTableIL) + def visit(self, node): + pass + + @visitor.on(PushIL) + def visit(self, node): + pass + + @visitor.on(PopIL) + def visit(self, node): + pass + + @visitor.on(ReturnIL) + def visit(self, node): + pass + + @visitor.on(DispatchIL) + def visit(self, node): + pass + + @visitor.on(DispatchParentIL) + def visit(self, node): + pass + + @visitor.on(InheritIL) + def visit(self, node): + pass + + @visitor.on(StringIL) + def visit(self, node): + pass + + @visitor.on(PrintIL) + def visit(self, node): + pass + + @visitor.on(LoadLabelIL) + def visit(self, node): + pass \ No newline at end of file From 273959bc454718a88fa3952210eb359039040b8e Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 13 Nov 2020 14:47:47 -0500 Subject: [PATCH 068/140] some initials for mips visitor, statics and else --- src/code_generation/statics/IO.s | 48 ++++++++++++ src/code_generation/statics/Object.s | 22 ++++++ src/code_generation/statics/String.s | 101 ++++++++++++++++++++++++++ src/code_generation/statics/inherit.s | 13 ++++ src/code_generation/to_mips.py | 39 +++++++++- src/main.py | 2 +- 6 files changed, 220 insertions(+), 5 deletions(-) create mode 100644 src/code_generation/statics/IO.s create mode 100644 src/code_generation/statics/Object.s create mode 100644 src/code_generation/statics/String.s create mode 100644 src/code_generation/statics/inherit.s diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s new file mode 100644 index 00000000..78440266 --- /dev/null +++ b/src/code_generation/statics/IO.s @@ -0,0 +1,48 @@ +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + +IO.out_string: +li $v0, 4 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra \ No newline at end of file diff --git a/src/code_generation/statics/Object.s b/src/code_generation/statics/Object.s new file mode 100644 index 00000000..a20adb37 --- /dev/null +++ b/src/code_generation/statics/Object.s @@ -0,0 +1,22 @@ +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + +Object.abort: +li $v0, 10 +syscall diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s new file mode 100644 index 00000000..c3641f9f --- /dev/null +++ b/src/code_generation/statics/String.s @@ -0,0 +1,101 @@ + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra \ No newline at end of file diff --git a/src/code_generation/statics/inherit.s b/src/code_generation/statics/inherit.s new file mode 100644 index 00000000..8e17e254 --- /dev/null +++ b/src/code_generation/statics/inherit.s @@ -0,0 +1,13 @@ +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit + +inherit_true: +li $v0, 1 +jr $ra + +inherit_false: +li $v0, 0 +jr $ra \ No newline at end of file diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index 34ec3446..e94c923e 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -3,12 +3,43 @@ import visitor class MIPS: - def __init__(self): - pass + def __init__(self, il_code, il_data): + self.code = [] + self.data = [] + self.il_code = il_code + self.il_data = il_data + self.path = path + + def _loadfrom(self, file): + fd = open(file) + return fd.read() def start(self): - pass - + code = "" + code += ".data\n" + code += "buffer:\n" + code += ".space 65536\n" + code += "\n" + + for node in il_data: + self.visit(node) + + code += "\n.globl main\n" + code+= ".text\n" + + code += _loadfrom(path.join('code_generation/statics', 'IO.s')) + code += _loadfrom(path.join('code_generation/statics', 'Object.s')) + code += _loadfrom(path.join('code_generation/statics', 'String.s')) + code += _loadfrom(path.join('code_generation/statics', 'inherit.s')) + + for c in self.code: + code += (c + "\n") + + code += "li $v0, 10\n" + code += "syscall\n" + + return code + @visitor.on('node') def visit(self, node): pass diff --git a/src/main.py b/src/main.py index 28516175..b1ce3a16 100644 --- a/src/main.py +++ b/src/main.py @@ -28,6 +28,6 @@ def main(): if pipeline.pipeline_errors: exit(1) - + if __name__ == "__main__": main() \ No newline at end of file From 610a8fe0be79deb5a5344676c4af54c7730ae23b Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 13 Nov 2020 15:47:20 -0500 Subject: [PATCH 069/140] assignations and other visit methods --- src/code_generation/to_mips.py | 46 +++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index e94c923e..d3835baa 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -52,8 +52,14 @@ def visit(self, node): @visitor.on(UnaryOperationIL) def visit(self, node): - pass - + self.code.append("lw $a0, {}($sp)\n".format(-4*node.op)) + + if node.symbol == '~': + self.code.append("not $a0, $a0\n") + else: + self.code.append("li $a1, 1\n") + self.code.append("sub $a0, $a1, $a0\n") + self.code.append("sw $a0, {}($sp)\n".format(-4 * node.var)) #allocate @visitor.on(AllocateIL) @@ -63,36 +69,48 @@ def visit(self, node): #assignment @visitor.on(VarToVarIL) def visit(self, node): - pass + self.code.append("lw $a0, {}($sp)\n".format(-4 * node.rigth)) + self.code.append("sw $a0, {}($sp)\n".format(-4 * node.left)) @visitor.on(VarToMemoIL) def visit(self, node): - pass + self.code.append("lw $a0, {}($sp)\n".format(-4*node.right)) + self.code.append("lw $a1, {}($sp)\n".format(-4*node.left)) + self.code.append("sw $a0, {}($a1)\n".format(4*node.offset)) @visitor.on(MemoToVarIL) def visit(self, node): - pass + self.code.append("lw $a0, {}($sp)\n".format(-4 * node.right)) + self.code.append("lw $a1, {}($a0)\n".format(4*node.offset)) + self.code.append("sw $a1, {}($sp)\n".format(-4*node.left)) @visitor.on(ConstToMemoIL) def visit(self, node): - pass + self.code.append("lw $a0, {}($sp)\n".format(-4 * node.left)) + self.code.append("li $a1, {}\n".format(node.right)) + self.code.append("sw $a1, {}($a0)\n".format(4*node.offset)) #methods @visitor.on(LabelIL) def visit(self, node): - pass + self.code.append(node.label + ':\n') + if node.func: + self.code.append("sw $ra, ($sp)\n") + self.code.append("addiu $sp, $sp, 4\n") + @visitor.on(GotoIL) def visit(self, node): - pass + self.code.append("j " + node.label + "\n") @visitor.on(CommentIL) def visit(self, node): - pass + self.code.append(str(node)) @visitor.on(IfJumpIL) def visit(self, node): - pass + self.code.append("lw $a0, {}($sp)\n".format(-4 * node.var)) + self.code.append("bnez $a0, " + node.label + "\n") @visitor.on(HierarchyIL) def visit(self, node): @@ -128,11 +146,15 @@ def visit(self, node): @visitor.on(StringIL) def visit(self, node): - pass + self.code.append("{}: .asciiz {}\n".format(node.label, node.string)) @visitor.on(PrintIL) def visit(self, node): - pass + if node.string: + self.code.append("la $t0, _out_string\n") + else: + self.code.append("la $t0, _out_in\n") + self.code.append("jalr $ra, $t0\n") @visitor.on(LoadLabelIL) def visit(self, node): From bef067a8516aa060bfbb39616405b81c27fb5445 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Fri, 13 Nov 2020 16:11:27 -0500 Subject: [PATCH 070/140] PushIL and PopIL --- src/code_generation/to_mips.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index d3835baa..6a5542b2 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -122,11 +122,14 @@ def visit(self, node): @visitor.on(PushIL) def visit(self, node): - pass + self.code.append("li $a0, {}\n".format(node.value)) + self.code.append("sw $a0, ($sp)\n") + self.code.append("addiu $sp, $sp, 4\n") @visitor.on(PopIL) def visit(self, node): - pass + self.code.append("addiu $sp, $sp, " + str(-4*node.size) + "\n") + @visitor.on(ReturnIL) def visit(self, node): From de90d8322cd188ae10356d55f29695398fb3329f Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sat, 14 Nov 2020 11:39:19 -0500 Subject: [PATCH 071/140] LoadLabelIL --- src/code_generation/to_mips.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index 6a5542b2..cae7616d 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -161,4 +161,5 @@ def visit(self, node): @visitor.on(LoadLabelIL) def visit(self, node): - pass \ No newline at end of file + self.code.append("la $a0, " + node.label + "\n") + self.code.append("sw $a0, {}($sp)".format(-4 * node.var)) \ No newline at end of file From 8e908e24beddeb8da26ab3283f36c316d99be4d7 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sat, 14 Nov 2020 11:43:18 -0500 Subject: [PATCH 072/140] return IL --- src/code_generation/to_mips.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index cae7616d..732a295e 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -133,7 +133,11 @@ def visit(self, node): @visitor.on(ReturnIL) def visit(self, node): - pass + self.code.append("lw $v0, -4($sp)\n") + self.code.append("addiu $sp, $sp, -4\n") + self.code.append("lw $ra, -4($sp)\n") + self.code.append("addiu $sp, $sp, -4\n") + self.code.append("jr $ra\n") @visitor.on(DispatchIL) def visit(self, node): @@ -162,4 +166,4 @@ def visit(self, node): @visitor.on(LoadLabelIL) def visit(self, node): self.code.append("la $a0, " + node.label + "\n") - self.code.append("sw $a0, {}($sp)".format(-4 * node.var)) \ No newline at end of file + self.code.append("sw $a0, {}($sp)\n".format(-4 * node.var)) \ No newline at end of file From e37a9ae687d43cc1fe03d81be4c121899a049d1f Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sat, 14 Nov 2020 11:56:26 -0500 Subject: [PATCH 073/140] binary operations IL --- src/code_generation/to_mips.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index 732a295e..b6db9465 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -48,7 +48,34 @@ def visit(self, node): @visitor.on(BinaryOperationIL) def visit(self, node): - pass + self.code.append("lw $a0, " + node.label + "\n") + self,code,append("lw $a1, {}($sp)".format(-4 * node.var)) + + if node.symbol == '+': + self.code.append("add $a0, $a0, $a1\n") + elif node.symbol == '-': + self.code.append("sub $a0, $a0, $a1\n") + elif node.symbol == '*': + self.code.append("mult $a0, $a1\n") + self.code.append("mflo $a0\n") + elif node.symbol == '/': + self.code.append("div $a0, $a1\n") + self.code.append("mflo $a0\n") + elif node.symbol == '=': + self.code.append("seq $a0, $a0, $a1\n") + elif node.symbol == '>': + self.code.append("li $a2, 1\n") + self.code.append("add $a1, $a1, $a2\n") + self.code.append("sge $a0, $a0, $a1\n") + elif node.symbol == '>=': + self.code.append("sge $a0, $a0, $a1\n") + elif node.symbol == '<=': + self.code.append("add $a0, $a1, $a0\n") + elif node.symbol == '<': + self.code.append("li $a2, 1\n") + self.code.append("add $a0, $a0, $a2\n") + self.code.append("sge $a0, $a1, $a0\n") + self.code.append("sw $a0, {}($sp)\n".format(-4*node.var)) @visitor.on(UnaryOperationIL) def visit(self, node): From e4079efb18dd48074788d7cbce0d97df8d5c5e6e Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sat, 14 Nov 2020 12:19:58 -0500 Subject: [PATCH 074/140] allocate IL method --- src/code_generation/to_mips.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index b6db9465..3f5d5aa0 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -91,7 +91,12 @@ def visit(self, node): @visitor.on(AllocateIL) def visit(self, node): - pass + self.code.append("li $v0, 9\n") + self.code.append("li $a0, {}\n".format(4*node.size)) + self.code.append("syscall\n") + self.code.append("sw $v0, {}($sp)\n".format(-4*node.var)) + self.code.append("la $a1, {}_VT\n".format(node.typ)) + self.code.append("sw $a1, ($v0)\n") #assignment @visitor.on(VarToVarIL) From adbd831d7324f8282c15c829883cbb8f350353e5 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sat, 14 Nov 2020 21:41:48 -0500 Subject: [PATCH 075/140] hierarchy IL --- src/code_generation/to_mips.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index 3f5d5aa0..6e64e7b4 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -146,7 +146,8 @@ def visit(self, node): @visitor.on(HierarchyIL) def visit(self, node): - pass + self.code.append(node.node + "_INH\n") + self.code.append(".word {}_INH\n".format(node.parent)) @visitor.on(VirtualTableIL) def visit(self, node): From 755ec05ca20a4da7040356ef3031825f66f69a49 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sat, 14 Nov 2020 21:47:42 -0500 Subject: [PATCH 076/140] virtual table IL --- src/code_generation/to_mips.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index 6e64e7b4..62223876 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -146,12 +146,16 @@ def visit(self, node): @visitor.on(HierarchyIL) def visit(self, node): - self.code.append(node.node + "_INH\n") + self.code.append(node.node + "_INH:\n") self.code.append(".word {}_INH\n".format(node.parent)) @visitor.on(VirtualTableIL) def visit(self, node): - pass + self.code.append(node.name + "_VT:\n") + self.code.append(".word {}_INH\n".format(node.name)) + + for m in node.methods: + self.code.append(".word " + str(m) + "\n") @visitor.on(PushIL) def visit(self, node): From 86b9699e388489d553779b2945ef6285b6c58f2c Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sun, 15 Nov 2020 09:24:12 -0500 Subject: [PATCH 077/140] completing IL visitor, dispatch methods --- src/code_generation/nodesIL/methods_node_il.py | 4 ++-- src/code_generation/to_mips.py | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index f052017e..cdcdd32c 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -95,10 +95,10 @@ def __str__(self): class InheritIL(NodeIL): - def __init__(self, child, parent): + def __init__(self, child, parent, result): self.child = child self.parent = parent - # self.res = res + self.result = result def __str__(self): return "child {} inherits parent {}".format(self.child, self.parent) diff --git a/src/code_generation/to_mips.py b/src/code_generation/to_mips.py index 62223876..d6cbb2d8 100644 --- a/src/code_generation/to_mips.py +++ b/src/code_generation/to_mips.py @@ -178,15 +178,27 @@ def visit(self, node): @visitor.on(DispatchIL) def visit(self, node): - pass + self.code.append("lw $a0, {}($sp)\n".format(-4 * node.obj)) + self.code.append("lw $a0, ($a0)\n") + self.code.append("addiu $a0, $a0, {}\n".format(-4 * node.offset)) + self.code.append("lw $v0, ($a0)\n") + self.code.append("jalr $ra, $v0\n") + self.code.append("sw $v0, {}($sp)\n".format(-4 * node.res)) + @visitor.on(DispatchParentIL) def visit(self, node): - pass + self.code.append("la $v0, " + node.method + "\n") + self.code.append("jalr $ra, $v0\n") + self.code.append("sw $v0, {}($sp)".format(-4 * node.result)) @visitor.on(InheritIL) def visit(self, node): - pass + self.code.append("lw $a0, {}($sp)\n".format(-4 * node.child)) + self.code.append("la $a1, " + node.parent + "\n") + self.code.append("la $t0, inherit\n") + self.code.append("jalr $ra, $t0\n") + self.code.append("sw $v0, {}($sp)\n".format(-4*node.result)) @visitor.on(StringIL) def visit(self, node): From b6a723d0c28a4ef53e4fe50ea1a14c39e204c089 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Sun, 15 Nov 2020 11:29:05 -0500 Subject: [PATCH 078/140] some correctios in file distribution, and misstyping in visitors --- src/code_generation/__init__.py | 7 ++ src/code_generation/nodesIL/__init__.py | 5 -- .../nodesIL/methods_node_il.py | 2 +- src/main.py | 10 +++ src/visitors/__init__.py | 4 +- src/{code_generation => visitors}/to_mips.py | 48 +++++------ .../transpilator.py | 79 +++++++++---------- 7 files changed, 84 insertions(+), 71 deletions(-) create mode 100644 src/code_generation/__init__.py delete mode 100644 src/code_generation/nodesIL/__init__.py rename src/{code_generation => visitors}/to_mips.py (90%) rename src/{code_generation => visitors}/transpilator.py (92%) diff --git a/src/code_generation/__init__.py b/src/code_generation/__init__.py new file mode 100644 index 00000000..31e6e079 --- /dev/null +++ b/src/code_generation/__init__.py @@ -0,0 +1,7 @@ +from .nodesIL.node_il import NodeIL +from .nodesIL.allocate_node_il import * +from .nodesIL.assignmet_node_il import * +from .nodesIL.operation_node_il import * +from .nodesIL.methods_node_il import * +from .variables import * +from .virtual_table import * \ No newline at end of file diff --git a/src/code_generation/nodesIL/__init__.py b/src/code_generation/nodesIL/__init__.py deleted file mode 100644 index 2e3bf46c..00000000 --- a/src/code_generation/nodesIL/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from .node_il import NodeIL -from .allocate_node_il import * -from .assignmet_node_il import * -from .operation_node_il import * -from .methods_node_il import * \ No newline at end of file diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index cdcdd32c..70072506 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -126,7 +126,7 @@ def __init__(self, obj, offset, result): def __str__(self): return "dispatch: object({}).method({}) to {}".format(self.obj,self.offset,self.result) -class DispatchParentIL(ILNode): +class DispatchParentIL(NodeIL): def __init__(self, obj, method, result): self.method = method diff --git a/src/main.py b/src/main.py index b1ce3a16..0f082964 100644 --- a/src/main.py +++ b/src/main.py @@ -21,9 +21,19 @@ def main(): #temporal try: ast, context, scope = pipeline.run_pipeline(program) + cv = codeVisitor() + cv.visit(ast) + + print('-----------------code----------------------------') + for n in cv.code: + print(str(n)) + + + except Exception as e: pass + pipeline.report_errors() if pipeline.pipeline_errors: diff --git a/src/visitors/__init__.py b/src/visitors/__init__.py index cebd2dd9..ad4c6b75 100644 --- a/src/visitors/__init__.py +++ b/src/visitors/__init__.py @@ -2,4 +2,6 @@ from .type_builder import TypeBuilder from .type_checker import TypeChecker from .type_collector import TypeCollector -from .var_collector import VarCollector \ No newline at end of file +from .var_collector import VarCollector +from .transpilator import codeVisitor +from .to_mips import MIPS \ No newline at end of file diff --git a/src/code_generation/to_mips.py b/src/visitors/to_mips.py similarity index 90% rename from src/code_generation/to_mips.py rename to src/visitors/to_mips.py index d6cbb2d8..47e56831 100644 --- a/src/code_generation/to_mips.py +++ b/src/visitors/to_mips.py @@ -1,6 +1,6 @@ import os -from nodesIL import * -import visitor +from code_generation import * +import visitors.visitor as visitor class MIPS: def __init__(self, il_code, il_data): @@ -46,7 +46,7 @@ def visit(self, node): #operations - @visitor.on(BinaryOperationIL) + @visitor.when(BinaryOperationIL) def visit(self, node): self.code.append("lw $a0, " + node.label + "\n") self,code,append("lw $a1, {}($sp)".format(-4 * node.var)) @@ -77,7 +77,7 @@ def visit(self, node): self.code.append("sge $a0, $a1, $a0\n") self.code.append("sw $a0, {}($sp)\n".format(-4*node.var)) - @visitor.on(UnaryOperationIL) + @visitor.when(UnaryOperationIL) def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4*node.op)) @@ -89,7 +89,7 @@ def visit(self, node): self.code.append("sw $a0, {}($sp)\n".format(-4 * node.var)) #allocate - @visitor.on(AllocateIL) + @visitor.when(AllocateIL) def visit(self, node): self.code.append("li $v0, 9\n") self.code.append("li $a0, {}\n".format(4*node.size)) @@ -99,31 +99,31 @@ def visit(self, node): self.code.append("sw $a1, ($v0)\n") #assignment - @visitor.on(VarToVarIL) + @visitor.when(VarToVarIL) def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4 * node.rigth)) self.code.append("sw $a0, {}($sp)\n".format(-4 * node.left)) - @visitor.on(VarToMemoIL) + @visitor.when(VarToMemoIL) def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4*node.right)) self.code.append("lw $a1, {}($sp)\n".format(-4*node.left)) self.code.append("sw $a0, {}($a1)\n".format(4*node.offset)) - @visitor.on(MemoToVarIL) + @visitor.when(MemoToVarIL) def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4 * node.right)) self.code.append("lw $a1, {}($a0)\n".format(4*node.offset)) self.code.append("sw $a1, {}($sp)\n".format(-4*node.left)) - @visitor.on(ConstToMemoIL) + @visitor.when(ConstToMemoIL) def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4 * node.left)) self.code.append("li $a1, {}\n".format(node.right)) self.code.append("sw $a1, {}($a0)\n".format(4*node.offset)) #methods - @visitor.on(LabelIL) + @visitor.when(LabelIL) def visit(self, node): self.code.append(node.label + ':\n') if node.func: @@ -131,25 +131,25 @@ def visit(self, node): self.code.append("addiu $sp, $sp, 4\n") - @visitor.on(GotoIL) + @visitor.when(GotoIL) def visit(self, node): self.code.append("j " + node.label + "\n") - @visitor.on(CommentIL) + @visitor.when(CommentIL) def visit(self, node): self.code.append(str(node)) - @visitor.on(IfJumpIL) + @visitor.when(IfJumpIL) def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4 * node.var)) self.code.append("bnez $a0, " + node.label + "\n") - @visitor.on(HierarchyIL) + @visitor.when(HierarchyIL) def visit(self, node): self.code.append(node.node + "_INH:\n") self.code.append(".word {}_INH\n".format(node.parent)) - @visitor.on(VirtualTableIL) + @visitor.when(VirtualTableIL) def visit(self, node): self.code.append(node.name + "_VT:\n") self.code.append(".word {}_INH\n".format(node.name)) @@ -157,18 +157,18 @@ def visit(self, node): for m in node.methods: self.code.append(".word " + str(m) + "\n") - @visitor.on(PushIL) + @visitor.when(PushIL) def visit(self, node): self.code.append("li $a0, {}\n".format(node.value)) self.code.append("sw $a0, ($sp)\n") self.code.append("addiu $sp, $sp, 4\n") - @visitor.on(PopIL) + @visitor.when(PopIL) def visit(self, node): self.code.append("addiu $sp, $sp, " + str(-4*node.size) + "\n") - @visitor.on(ReturnIL) + @visitor.when(ReturnIL) def visit(self, node): self.code.append("lw $v0, -4($sp)\n") self.code.append("addiu $sp, $sp, -4\n") @@ -176,7 +176,7 @@ def visit(self, node): self.code.append("addiu $sp, $sp, -4\n") self.code.append("jr $ra\n") - @visitor.on(DispatchIL) + @visitor.when(DispatchIL) def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4 * node.obj)) self.code.append("lw $a0, ($a0)\n") @@ -186,13 +186,13 @@ def visit(self, node): self.code.append("sw $v0, {}($sp)\n".format(-4 * node.res)) - @visitor.on(DispatchParentIL) + @visitor.when(DispatchParentIL) def visit(self, node): self.code.append("la $v0, " + node.method + "\n") self.code.append("jalr $ra, $v0\n") self.code.append("sw $v0, {}($sp)".format(-4 * node.result)) - @visitor.on(InheritIL) + @visitor.when(InheritIL) def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4 * node.child)) self.code.append("la $a1, " + node.parent + "\n") @@ -200,11 +200,11 @@ def visit(self, node): self.code.append("jalr $ra, $t0\n") self.code.append("sw $v0, {}($sp)\n".format(-4*node.result)) - @visitor.on(StringIL) + @visitor.when(StringIL) def visit(self, node): self.code.append("{}: .asciiz {}\n".format(node.label, node.string)) - @visitor.on(PrintIL) + @visitor.when(PrintIL) def visit(self, node): if node.string: self.code.append("la $t0, _out_string\n") @@ -212,7 +212,7 @@ def visit(self, node): self.code.append("la $t0, _out_in\n") self.code.append("jalr $ra, $t0\n") - @visitor.on(LoadLabelIL) + @visitor.when(LoadLabelIL) def visit(self, node): self.code.append("la $a0, " + node.label + "\n") self.code.append("sw $a0, {}($sp)\n".format(-4 * node.var)) \ No newline at end of file diff --git a/src/code_generation/transpilator.py b/src/visitors/transpilator.py similarity index 92% rename from src/code_generation/transpilator.py rename to src/visitors/transpilator.py index 1b1cb318..e6338240 100644 --- a/src/code_generation/transpilator.py +++ b/src/visitors/transpilator.py @@ -1,10 +1,8 @@ import sys sys.path.append('/..') -from nodesIL import * -from virtual_table import VirtualTable -from variables import Variables -import visitor -from ..cl_ast import * +from code_generation import * +import visitors.visitor as visitor +from cl_ast import * class codeVisitor: @@ -58,12 +56,13 @@ def collectTypes(self, classes): self.virtual_table.add_method(t, n, methods[n]) except: pass - try: self.virtual_table.add_attr(t, attr[n]) + except: + pass for t in types: - slef.data.append(HierarchyIL(t, types[t])) + self.data.append(HierarchyIL(t, types[t])) for m in self.virtual_table.methods: self.data.append(VirtualTableIL(c, self.virtual_table.methods[m])) @@ -114,7 +113,7 @@ def setClassConstructor(self, attributes): self.visit(node.value, vars) p = vars.peek_last() index = self.virtual_table.get_attributes_id(self.current_class, node.name.value) - self.code.append(VarToMemoIL(vars.id('self'), vars.id(p), index))) + self.code.append(VarToMemoIL(vars.id('self'), vars.id(p), index)) self.code.append(PushIL()) self.code.append(ReturnIL()) @@ -151,12 +150,12 @@ def visit(self, node): pass #program - @visitor.on(ProgramNode) + @visitor.when(ProgramNode) def visit(self, node): self.visit(node.declarations) #declarations - @visitor.on(ClassDeclarationNode) + @visitor.when(ClassDeclarationNode) def visit(self, node): self.current_class = node.idx.value @@ -170,11 +169,11 @@ def visit(self, node): for f in node.features: self.visit(f) - @visitor.on(AttrDeclarationNode) + @visitor.when(AttrDeclarationNode) def visit(self, node): pass - @visitor.on(FuncDeclarationNode) + @visitor.when(FuncDeclarationNode) def visit(self, node): self.code.append(LabelIL(self.current_class, node.idx, True)) @@ -189,7 +188,7 @@ def visit(self, node): self.visit(node.body, variables) self.code.append(ReturnIL()) - @visitor.on(VarDeclarationNode) + @visitor.when(VarDeclarationNode) def visit(self, node, variables): self.code.append(PushIL()) p = variables.add_var(node.idx.value) @@ -202,46 +201,46 @@ def visit(self, node, variables): self.code.append(PopIL()) #operations: binary - @visitor.on(SumNode) + @visitor.when(SumNode) def visit(self, node, variables): self.handleBinaryOps(node, variables, '+') - @visitor.on(DiffNode) + @visitor.when(DiffNode) def visit(self, node, variables): self.handleBinaryOps(node, variables, '-') - @visitor.on(StarNode) + @visitor.when(StarNode) def visit(self, node, variables): self.handleBinaryOps(node, variables, '*') - @visitor.on(DivNode) + @visitor.when(DivNode) def visit(self, node, variables): self.handleBinaryOps(node, variables, '/') - @visitor.on(LessNode) + @visitor.when(LessNode) def visit(self, node, variables): self.handleBinaryOps(node, variables, '<') - @visitor.on(LessEqualNode) + @visitor.when(LessEqualNode) def visit(self, node, variables): self.handleBinaryOps(node, variables, '<=') - @visitor.on(EqualNode) + @visitor.when(EqualNode) def visit(self, node, variables): self.handleBinaryOps(node, variables, '=') #operations: unary - @visitor.on(BitNotNode) + @visitor.when(BitNotNode) def visit(self, node, variables): self.handleUnaryOps(node, variables, '~') - @visitor.on(NotNode) + @visitor.when(NotNode) def visit(self, node, variables): self.handleUnaryOps(node, variables, '!') #expressions: atomics - @visitor.on(VariableNode) + @visitor.when(VariableNode) def visit(self, node, variables): self.code.append(PushIL()) result = variables.add_temp() @@ -251,7 +250,7 @@ def visit(self, node, variables): else: self.code.append(MemoToVarIL(variables.id(result), variables.id('self'), self.virtual_table.get_attributes_id(self.current_class, node.id.value))) - @visitor.on(NewNode) + @visitor.when(NewNode) def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) @@ -273,7 +272,7 @@ def visit(self, node, variables): variables.pop_var() #expressions: complex - @visitor.on(ConditionalNode) + @visitor.when(ConditionalNode) def visit(self, node, variables): self.code.append(CommentIL('Condition')) result = variables.add_temp() @@ -305,7 +304,7 @@ def visit(self, node, variables): self.code.append(PopIL(2)) - @visitor.on(WhileNode) + @visitor.when(WhileNode) def visit(self, node, variables): self.code.append(CommentIL('loop')) self.code.append(PushIL()) @@ -335,7 +334,7 @@ def visit(self, node, variables): self.code.append(POOL) - @visitor.on(LetNode) + @visitor.when(LetNode) def visit(self, node, variables): self.code.append(CommentIL('Let')) self.code.append(PushIL()) @@ -357,11 +356,11 @@ def visit(self, node, variables): - @visitor.on(LetDeclarationNode) + @visitor.when(LetDeclarationNode) def visit(self, node): pass - @visitor.on(BlockNode) + @visitor.when(BlockNode) def visit(self, node, variables): self.code.append(CommentIL('Block')) result = variables.add_temp() @@ -376,7 +375,7 @@ def visit(self, node, variables): for i in range(0, len(node.expr_list)): variables.pop_var() - @visitor.on(CaseNode) + @visitor.when(CaseNode) def visit(self, node, variables): node.case_list.sort(key = lambda x : self.depth[x.type], reverse = True) @@ -425,11 +424,11 @@ def visit(self, node, variables): self.code.append(PopIL(3)) - @visitor.on(OptionNode) + @visitor.when(OptionNode) def visit(self, node): pass - @visitor.on(AssignNode) + @visitor.when(AssignNode) def visit(self, node, variables): self.code.append(CommentIL('Assignment')) self.visit(node.expr, variables) @@ -440,12 +439,12 @@ def visit(self, node, variables): else: self.code.append(VarToMemoIL(variables.id('self'), variables.id(p), self.virtual_table.get_attributes_id(self.current_class, node.idx.value))) - @visitor.on(IsVoidNode) + @visitor.when(IsVoidNode) def visit(self, node): pass #expression: complex->dispatch - @visitor.on(ExprCallNode) + @visitor.when(ExprCallNode) def visit(self, node, variables): self.code.append(CommentIL('Point-Dispatch')) @@ -472,7 +471,7 @@ def visit(self, node, variables): self.code.append(PopIL(len(node.args) + 1)) - @visitor.on(SelfCallNode) + @visitor.when(SelfCallNode) def visit(self, node, variables): self.code.append(CommentIL('Self-Dispatch')) @@ -503,7 +502,7 @@ def visit(self, node, variables): self.code.append(PopIL(len(node.args) + n)) - @visitor.on(ParentCallNode) + @visitor.when(ParentCallNode) def visit(self, node, variables): self.code.append(CommentIL('Parent-Dispatch')) @@ -530,13 +529,13 @@ def visit(self, node, variables): #constants - @visitor.on(IntegerNode) + @visitor.when(IntegerNode) def visit(self, node, variables): self.code.append(CommentIL('Integer')) variables.add_temp() - self.code.append(PushIL(int(self.lex)) + self.code.append(PushIL(int(self.lex))) - @visitor.on(StringNode) + @visitor.when(StringNode) def visit(self, node, variables): label = 'string_' + str(self.getInt()) self.data.append(StringIL(label, node.lex)) @@ -546,7 +545,7 @@ def visit(self, node, variables): self.code.append(LoadLabelIL(variables.id(p), label)) - @visitor.on(BoolNode) + @visitor.when(BoolNode) def visit(self, node): variables.add_tmp() if node.lex: From 8b246131054e918284532a8e9891a49aa4485da3 Mon Sep 17 00:00:00 2001 From: Harold Rosales Date: Mon, 23 Nov 2020 22:04:38 -0500 Subject: [PATCH 079/140] testing some changes --- src/main.py | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/main.py b/src/main.py index 0f082964..20a116b9 100644 --- a/src/main.py +++ b/src/main.py @@ -8,6 +8,12 @@ def main(): program = sys.argv[1] + + # out_program = sys.argv[2] + + # mkdir(out_program, mode=0o777, *, dir_fd=None) + + # fd = open(out_program, 'rw') pipeline = Pipeline() @@ -19,25 +25,27 @@ def main(): pipeline.submit_state(TypeChecker('TChecker')) #temporal - try: - ast, context, scope = pipeline.run_pipeline(program) - cv = codeVisitor() - cv.visit(ast) + ast, context, scope = pipeline.run_pipeline(program) + + pipeline.report_errors() - print('-----------------code----------------------------') - for n in cv.code: - print(str(n)) - - + if pipeline.pipeline_errors: + exit(1) - except Exception as e: - pass + print('Done ast') + + cv = codeVisitor() + cv.visit(ast) + mips = MIPS(cv.code, cv.data) + for code in cv.code: + mips.visit(code) - pipeline.report_errors() + for code in mips.code: + print(code) +# except: +# pass - if pipeline.pipeline_errors: - exit(1) if __name__ == "__main__": main() \ No newline at end of file From ba3cd17319ebca3bc008cf57d748fd066b8f95be Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Mon, 23 Nov 2020 22:15:22 -0500 Subject: [PATCH 080/140] puliendo detalles de generacion --- src/visitors/to_mips.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 47e56831..91ce15f7 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -3,12 +3,11 @@ import visitors.visitor as visitor class MIPS: - def __init__(self, il_code, il_data): + def __init__(self, il_code, il_data,): self.code = [] self.data = [] self.il_code = il_code self.il_data = il_data - self.path = path def _loadfrom(self, file): fd = open(file) From f29239f2b368bd10f214e5f7b069d042314ac473 Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Mon, 23 Nov 2020 22:19:08 -0500 Subject: [PATCH 081/140] starting to debugg --- src/main.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main.py b/src/main.py index 20a116b9..9484f2bd 100644 --- a/src/main.py +++ b/src/main.py @@ -43,6 +43,9 @@ def main(): for code in mips.code: print(code) + + print(cv.code) + print(mips.code) # except: # pass From 28ed81ed78b278156ddaec8cbfb963dfbd21a546 Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Mon, 23 Nov 2020 22:39:10 -0500 Subject: [PATCH 082/140] seeking errors --- src/main.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main.py b/src/main.py index 9484f2bd..20a116b9 100644 --- a/src/main.py +++ b/src/main.py @@ -43,9 +43,6 @@ def main(): for code in mips.code: print(code) - - print(cv.code) - print(mips.code) # except: # pass From 1ef6f969657ee39fc6931e7f28b71aed1414dead Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Tue, 24 Nov 2020 08:47:57 -0500 Subject: [PATCH 083/140] correcting some bugs in code generation --- src/main.py | 5 ++--- src/visitors/to_mips.py | 10 +++++----- src/visitors/transpilator.py | 1 + 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main.py b/src/main.py index 20a116b9..2cc472e3 100644 --- a/src/main.py +++ b/src/main.py @@ -31,15 +31,14 @@ def main(): if pipeline.pipeline_errors: exit(1) - + print(ast) print('Done ast') cv = codeVisitor() cv.visit(ast) mips = MIPS(cv.code, cv.data) - for code in cv.code: - mips.visit(code) + mips.start() for code in mips.code: print(code) diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 91ce15f7..7827d25a 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -20,16 +20,16 @@ def start(self): code += ".space 65536\n" code += "\n" - for node in il_data: + for node in self.il_data: self.visit(node) code += "\n.globl main\n" code+= ".text\n" - code += _loadfrom(path.join('code_generation/statics', 'IO.s')) - code += _loadfrom(path.join('code_generation/statics', 'Object.s')) - code += _loadfrom(path.join('code_generation/statics', 'String.s')) - code += _loadfrom(path.join('code_generation/statics', 'inherit.s')) + code += self._loadfrom(os.path.join('code_generation/statics', 'IO.s')) + code += self._loadfrom(os.path.join('code_generation/statics', 'Object.s')) + code += self._loadfrom(os.path.join('code_generation/statics', 'String.s')) + code += self._loadfrom(os.path.join('code_generation/statics', 'inherit.s')) for c in self.code: code += (c + "\n") diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index e6338240..65f23c78 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -157,6 +157,7 @@ def visit(self, node): #declarations @visitor.when(ClassDeclarationNode) def visit(self, node): + print('ClassDeclarationNode') self.current_class = node.idx.value attributes = [] From 3540db541c85d0889cd0d1d785c413eb2a40e48c Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Tue, 24 Nov 2020 11:00:01 -0500 Subject: [PATCH 084/140] some bugs corrections in transpilator, missing some tests --- .../nodesIL/methods_node_il.py | 6 +- .../nodesIL/operation_node_il.py | 2 +- src/code_generation/variables.py | 4 + src/main.py | 6 +- src/visitors/to_mips.py | 2 +- src/visitors/transpilator.py | 84 ++++++++++--------- 6 files changed, 58 insertions(+), 46 deletions(-) diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index 70072506..21ec06ee 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -2,8 +2,8 @@ class LabelIL(NodeIL): - def __init__(self, first, second, func): - self.label = first + '_' + second + def __init__(self, first, second, func = False): + self.label = str(first) + '_' + str(second) self.first = first self.second = second self.func = func @@ -37,7 +37,7 @@ def __str__(self): class PopIL(NodeIL): - def __init__(self, size): + def __init__(self, size = 1): self.size = size def __str__(self): diff --git a/src/code_generation/nodesIL/operation_node_il.py b/src/code_generation/nodesIL/operation_node_il.py index 4c9f9316..37f20de6 100644 --- a/src/code_generation/nodesIL/operation_node_il.py +++ b/src/code_generation/nodesIL/operation_node_il.py @@ -13,7 +13,7 @@ def __str__(self): class UnaryOperationIL(NodeIL): - def __init__(self, var, op, symb): + def __init__(self, var, op, symbol): self.var = var self.op = op self.symbol = symbol diff --git a/src/code_generation/variables.py b/src/code_generation/variables.py index d1fbad32..31ab9ae4 100644 --- a/src/code_generation/variables.py +++ b/src/code_generation/variables.py @@ -18,8 +18,10 @@ def pop_var(self): def add_temp(self): name = len(self.stack) + 1 self.add_var('tmp_' + str(name)) + return str('tmp_' + str(name)) def peek_last(self): + print(self.vars) return self.vars[-1] def get_stack(self): @@ -32,5 +34,7 @@ def get_copy(self): vars_copy = Variables() vars_copy.stack = self.stack.copy() vars_copy.vars = self.vars.copy() + print('get copy') + print(vars_copy.vars) return vars_copy diff --git a/src/main.py b/src/main.py index 2cc472e3..d7adc9b0 100644 --- a/src/main.py +++ b/src/main.py @@ -36,10 +36,12 @@ def main(): cv = codeVisitor() cv.visit(ast) + print('Done transpilator') + print(len(cv.code)) mips = MIPS(cv.code, cv.data) - + mips.start() - + print('Done mips') for code in mips.code: print(code) # except: diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 7827d25a..9deb634d 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -48,7 +48,7 @@ def visit(self, node): @visitor.when(BinaryOperationIL) def visit(self, node): self.code.append("lw $a0, " + node.label + "\n") - self,code,append("lw $a1, {}($sp)".format(-4 * node.var)) + self.code.append("lw $a1, {}($sp)".format(-4 * node.var)) if node.symbol == '+': self.code.append("add $a0, $a0, $a1\n") diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 65f23c78..5de9ec8e 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -29,17 +29,17 @@ def collectTypes(self, classes): attr = dict([ (x, []) for x in types ]) for node in classes: - types[node.idx.value] = node.parent.value + types[node.idx] = node.parent.value for f in node.features: if type(f) == AttrDeclarationNode: - if not node.idx.value in attr: - attr[node.idx.value] = [] - attr[node.idx.value].append(f.name.value) + if not node.idx in attr: + attr[node.idx] = [] + attr[node.idx].append(f.name.value) else: - if not node.idx.value in methods: - methods[node.idx.value] = [] - methods[node.idx.value].append(f.name.value) + if not node.idx in methods: + methods[node.idx] = [] + methods[node.idx].append(f.name.value) for t in types.keys(): nodes = [t] @@ -137,7 +137,7 @@ def handleBinaryOps(self, node, variables, symbol): def handleUnaryOps(self, node, variables, symbol): self.code.append(CommentIL('Unary')) - res = variables.add_tmp() + res = variables.add_temp() self.code.append(PushIL()) self.visit(node.expr, variables) @@ -152,13 +152,15 @@ def visit(self, node): #program @visitor.when(ProgramNode) def visit(self, node): - self.visit(node.declarations) + print('ProgramNode') + for n in node.declarations: + self.visit(n) #declarations @visitor.when(ClassDeclarationNode) def visit(self, node): print('ClassDeclarationNode') - self.current_class = node.idx.value + self.current_class = node.id attributes = [] for f in node.features: @@ -176,13 +178,13 @@ def visit(self, node): @visitor.when(FuncDeclarationNode) def visit(self, node): - self.code.append(LabelIL(self.current_class, node.idx, True)) + self.code.append(LabelIL(self.current_class, node.id, True)) variables = Variables() variables.add_var('self') for p in node.params: - variables.add_var(p.name) + variables.add_var(p.id) variables.add_temp() @@ -192,7 +194,7 @@ def visit(self, node): @visitor.when(VarDeclarationNode) def visit(self, node, variables): self.code.append(PushIL()) - p = variables.add_var(node.idx.value) + p = variables.add_var(node.idx) if node.expr != None: self.visit(node.expr, variables) @@ -245,22 +247,22 @@ def visit(self, node, variables): def visit(self, node, variables): self.code.append(PushIL()) result = variables.add_temp() - - if node.id.value in variables.variables: - self.code.append(VarToVarIL(variables.id(result), variables.id(node.id.value))) + print(node.id) + if node.id in variables.stack: + self.code.append(VarToVarIL(variables.id(result), variables.id(node.id))) else: - self.code.append(MemoToVarIL(variables.id(result), variables.id('self'), self.virtual_table.get_attributes_id(self.current_class, node.id.value))) + self.code.append(MemoToVarIL(variables.id(result), variables.id('self'), self.virtual_table.get_attributes_id(self.current_class, node.id))) @visitor.when(NewNode) def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) - dispatch = variables.add_tmp() + dispatch = variables.add_temp() self.code.append(PushIL()) self.code.append(PushIL()) - p = variables.add_tmp() + p = variables.add_temp() size = self.virtual_table.get_index(node.type.value) self.code.append(AllocateIL(variables.id(p), size, node.type.value)) @@ -283,9 +285,9 @@ def visit(self, node, variables): p = variables.peek_last() IF = LabelIL('_if', self.getInt()) - FI = labelIL('_fi', IF.second) + FI = LabelIL('_fi', IF.second) - self.append(IfJumpIL(variables.id(p), IF.label)) + self.code.append(IfJumpIL(variables.id(p), IF.label)) self.visit(node.else_stm, variables) ELSE = variables.peek_last() @@ -299,7 +301,7 @@ def visit(self, node, variables): self.code.append(VarToVarIL(variables.id(result), variables.id(_if))) variables.pop_var() - self.code.append(LabelIL('_fi'), IF.second) + self.code.append(LabelIL('_fi', IF.second)) variables.pop_var() self.code.append(PopIL(2)) @@ -310,7 +312,7 @@ def visit(self, node, variables): self.code.append(CommentIL('loop')) self.code.append(PushIL()) - result = variables.add_tmp() + result = variables.add_temp() LOOP = LabelIL('_loop', self.getInt()) POOL = LabelIL('_pool', LOOP.second) @@ -340,7 +342,7 @@ def visit(self, node, variables): self.code.append(CommentIL('Let')) self.code.append(PushIL()) result = variables.add_temp() - + result1 = variables.add_temp() vars = variables.get_copy() for expr in node.init_list: @@ -351,14 +353,18 @@ def visit(self, node, variables): p = vars.peek_last() self.code.append(VarToVarIL(result, p)) - pop_times = len(node.expr) + 1 + pop_times = 2 + try: + pop_times = len(node.expr) + 1 + except: + pass self.code.append(PopIL(pop_times)) @visitor.when(LetDeclarationNode) - def visit(self, node): + def visit(self, node, variables): pass @visitor.when(BlockNode) @@ -372,8 +378,8 @@ def visit(self, node, variables): p = variables.peek_last() self.code.append(VarToVarIL(variables.id(result), variables.id(p))) - self.code.append(PopIL()) - for i in range(0, len(node.expr_list)): + self.code.append(PopIL(len(node.expr_list))) + for i in range(len(node.expr_list)): variables.pop_var() @visitor.when(CaseNode) @@ -426,7 +432,7 @@ def visit(self, node, variables): self.code.append(PopIL(3)) @visitor.when(OptionNode) - def visit(self, node): + def visit(self, node, variables): pass @visitor.when(AssignNode) @@ -435,10 +441,10 @@ def visit(self, node, variables): self.visit(node.expr, variables) p = variables.peek_last() - if node.idx.value in variables.variables: - self.code.append(VarToVarIL(variables.id(node.idx.value), variables.id(p))) + if node.id in variables.stack: + self.code.append(VarToVarIL(variables.id(node.id), variables.id(p))) else: - self.code.append(VarToMemoIL(variables.id('self'), variables.id(p), self.virtual_table.get_attributes_id(self.current_class, node.idx.value))) + self.code.append(VarToMemoIL(variables.id('self'), variables.id(p), self.virtual_table.get_attributes_id(self.current_class, node.id))) @visitor.when(IsVoidNode) def visit(self, node): @@ -452,7 +458,7 @@ def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) - index = self.virtual_table.get_method_id(node.obj.type, node.id.value) + index = self.virtual_table.get_method_id(node.obj, node.id) self.code.append(CommentIL('push object')) self.visit(node.obj, variables) @@ -479,7 +485,7 @@ def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) - index = self.virtual_table.get_method_id(self.current_class, node.id.value) + index = self.virtual_table.get_method_id(self.current_class, node.id) if self.current_class != 'Main': self.code.append(CommentIL('push self')) @@ -520,7 +526,7 @@ def visit(self, node, variables): i += 1 self.visit(p, variables) - method = node.idx.value + '.' + node.obj.idx.value + method = node.idx + '.' + node.obj.idx self.code.append(DispatchParentIL(variables.id(result), variables.id(name), method)) @@ -534,7 +540,7 @@ def visit(self, node, variables): def visit(self, node, variables): self.code.append(CommentIL('Integer')) variables.add_temp() - self.code.append(PushIL(int(self.lex))) + self.code.append(PushIL(int(node.lex))) @visitor.when(StringNode) def visit(self, node, variables): @@ -542,13 +548,13 @@ def visit(self, node, variables): self.data.append(StringIL(label, node.lex)) self.code.append(CommentIL('loading label')) self.code.append(PushIL()) - p = variables.add_tmp() + p = variables.add_temp() self.code.append(LoadLabelIL(variables.id(p), label)) @visitor.when(BoolNode) - def visit(self, node): - variables.add_tmp() + def visit(self, node, variables): + variables.add_temp() if node.lex: self.code.append(PushIL(1)) else: From 98f3fb0d65235e66fa83b1bea015446dddafd6ed Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Tue, 24 Nov 2020 11:53:46 -0500 Subject: [PATCH 085/140] some other corrections, and virtual table adding missing methods --- src/code_generation/virtual_table.py | 16 +++++++++++---- src/main.py | 8 ++++++-- src/visitors/to_mips.py | 29 +++++++++++++++------------- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index 55e57a0d..51f60dc1 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -9,7 +9,7 @@ def add_method(self, A, B, args): if not A in self.methods: self.methods[A] = [] - self.methos[A].append((B, args)) + self.methods[A].append((B, args)) else: add = True for name, arguments in self.methods[A]: @@ -35,14 +35,22 @@ def add_attr(self, claSS, args): self.attributes[claSS].append(a) def get_method_id(self, claSS, method): - pass + if claSS in self.methods.keys(): + for i in range(len(self.methods[claSS])): + b, args = self.methods[claSS][i] + if b == method: + return i + 1 + return -1 def get_attributes(self, claSS): return self.attributes[claSS] def get_attributes_id(self, claSS, attr): - pass - + attrs = self.attributes[claSS] + for i in range(len(attrs)): + if attr == attrs[i]: + return i + 1 + return -1 diff --git a/src/main.py b/src/main.py index d7adc9b0..38a4e653 100644 --- a/src/main.py +++ b/src/main.py @@ -38,11 +38,15 @@ def main(): cv.visit(ast) print('Done transpilator') print(len(cv.code)) + + # for c in cv.code: + # print(str(c)) + mips = MIPS(cv.code, cv.data) - mips.start() + code = mips.start() print('Done mips') - for code in mips.code: + for line in code: print(code) # except: # pass diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 9deb634d..6cf1c014 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -23,16 +23,19 @@ def start(self): for node in self.il_data: self.visit(node) + for c in self.data: + code += (c) + code += "\n.globl main\n" - code+= ".text\n" + code += ".text\n" code += self._loadfrom(os.path.join('code_generation/statics', 'IO.s')) code += self._loadfrom(os.path.join('code_generation/statics', 'Object.s')) code += self._loadfrom(os.path.join('code_generation/statics', 'String.s')) code += self._loadfrom(os.path.join('code_generation/statics', 'inherit.s')) - for c in self.code: - code += (c + "\n") + for c in self.il_code: + self.visit(c) code += "li $v0, 10\n" code += "syscall\n" @@ -47,8 +50,8 @@ def visit(self, node): @visitor.when(BinaryOperationIL) def visit(self, node): - self.code.append("lw $a0, " + node.label + "\n") - self.code.append("lw $a1, {}($sp)".format(-4 * node.var)) + self.code.append("lw $a0, " + str(node.leftOp) + "\n") + self.code.append("lw $a1, {}($sp)".format(-4 * node.rightOp)) if node.symbol == '+': self.code.append("add $a0, $a0, $a1\n") @@ -100,7 +103,7 @@ def visit(self, node): #assignment @visitor.when(VarToVarIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(-4 * node.rigth)) + self.code.append("lw $a0, {}($sp)\n".format(-4 * node.right)) self.code.append("sw $a0, {}($sp)\n".format(-4 * node.left)) @visitor.when(VarToMemoIL) @@ -145,16 +148,16 @@ def visit(self, node): @visitor.when(HierarchyIL) def visit(self, node): - self.code.append(node.node + "_INH:\n") - self.code.append(".word {}_INH\n".format(node.parent)) + self.data.append(node.node + "_INH:\n") + self.data.append(".word {}_INH\n".format(node.parent)) @visitor.when(VirtualTableIL) def visit(self, node): - self.code.append(node.name + "_VT:\n") - self.code.append(".word {}_INH\n".format(node.name)) + self.data.append(node.name + "_VT:\n") + self.data.append(".word {}_INH\n".format(node.name)) for m in node.methods: - self.code.append(".word " + str(m) + "\n") + self.data.append(".word " + str(m) + "\n") @visitor.when(PushIL) def visit(self, node): @@ -182,7 +185,7 @@ def visit(self, node): self.code.append("addiu $a0, $a0, {}\n".format(-4 * node.offset)) self.code.append("lw $v0, ($a0)\n") self.code.append("jalr $ra, $v0\n") - self.code.append("sw $v0, {}($sp)\n".format(-4 * node.res)) + self.code.append("sw $v0, {}($sp)\n".format(-4 * node.result)) @visitor.when(DispatchParentIL) @@ -201,7 +204,7 @@ def visit(self, node): @visitor.when(StringIL) def visit(self, node): - self.code.append("{}: .asciiz {}\n".format(node.label, node.string)) + self.data.append("{}: .asciiz {}\n".format(node.label, node.string)) @visitor.when(PrintIL) def visit(self, node): From 802c54d8886accc4794baaffca5856c09646938e Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Tue, 24 Nov 2020 21:23:11 -0500 Subject: [PATCH 086/140] some corrections, in transpilator for collecting types, virtual_table and bugs in to_mips visitor --- src/code_generation/variables.py | 6 +- src/code_generation/virtual_table.py | 7 +- src/main.py | 16 +++-- src/visitors/to_mips.py | 2 +- src/visitors/transpilator.py | 101 ++++++++++++--------------- 5 files changed, 63 insertions(+), 69 deletions(-) diff --git a/src/code_generation/variables.py b/src/code_generation/variables.py index 31ab9ae4..cf785f2e 100644 --- a/src/code_generation/variables.py +++ b/src/code_generation/variables.py @@ -21,7 +21,7 @@ def add_temp(self): return str('tmp_' + str(name)) def peek_last(self): - print(self.vars) + # print(self.vars) return self.vars[-1] def get_stack(self): @@ -34,7 +34,7 @@ def get_copy(self): vars_copy = Variables() vars_copy.stack = self.stack.copy() vars_copy.vars = self.vars.copy() - print('get copy') - print(vars_copy.vars) + # print('get copy') + # print(vars_copy.vars) return vars_copy diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index 51f60dc1..45c3c8b9 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -7,6 +7,10 @@ def __init__(self): def add_method(self, A, B, args): + if not A in self.classes: + self.classes[A] = [] + if not A in self.attributes: + self.attributes[A] = [] if not A in self.methods: self.methods[A] = [] self.methods[A].append((B, args)) @@ -26,7 +30,8 @@ def add_method(self, A, B, args): self.methods[A].append((B, args)) def get_index(self, c): - return len(self.attr[c]) + 1 + # print('classes', self.classes.keys()) + return len(self.attributes[c]) + 1 def add_attr(self, claSS, args): if not claSS in self.attributes: diff --git a/src/main.py b/src/main.py index 38a4e653..19c0c374 100644 --- a/src/main.py +++ b/src/main.py @@ -31,13 +31,15 @@ def main(): if pipeline.pipeline_errors: exit(1) - print(ast) - print('Done ast') - - cv = codeVisitor() + # print(ast) + # print('Done ast') + # for t in context.types: + # print(t) + # print('methods: ', context.types[t]) + cv = codeVisitor(context) cv.visit(ast) - print('Done transpilator') - print(len(cv.code)) + # print('Done transpilator') + # print(len(cv.code)) # for c in cv.code: # print(str(c)) @@ -45,7 +47,7 @@ def main(): mips = MIPS(cv.code, cv.data) code = mips.start() - print('Done mips') + # print('-------------------Done mips-------------------------------') for line in code: print(code) # except: diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 6cf1c014..b7b9d0ed 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -190,7 +190,7 @@ def visit(self, node): @visitor.when(DispatchParentIL) def visit(self, node): - self.code.append("la $v0, " + node.method + "\n") + self.code.append("la $v0, " + str(node.method) + "\n") self.code.append("jalr $ra, $v0\n") self.code.append("sw $v0, {}($sp)".format(-4 * node.result)) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 5de9ec8e..68f08447 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -6,7 +6,7 @@ class codeVisitor: - def __init__(self): + def __init__(self, context): #code IL self.code = [] self.data = [] @@ -18,75 +18,62 @@ def __init__(self): self.depth = {} + self.collectTypes(context) + self.setInitialCode() + def getInt(self): self.count = self.count + 1 return self.count - def collectTypes(self, classes): - types = {'Object' : None, 'IO' : 'Object', 'Int' : 'Object', 'Bool' : 'Object', 'String' : 'Object'} - methods = {'Object' : ['abort', 'type_name', 'copy'],'IO' : ['out_string', 'out_int', 'in_string', 'in_int'],'String' : ['length', 'concat', 'substr'],'Int' : [], 'Bool' : [] } - - attr = dict([ (x, []) for x in types ]) - - for node in classes: - types[node.idx] = node.parent.value - - for f in node.features: - if type(f) == AttrDeclarationNode: - if not node.idx in attr: - attr[node.idx] = [] - attr[node.idx].append(f.name.value) - else: - if not node.idx in methods: - methods[node.idx] = [] - methods[node.idx].append(f.name.value) - - for t in types.keys(): - nodes = [t] - x = t - - while types[x] != None: - x = types[x] - nodes.append(x) - - nodes.reverse() - - for n in nodes: - try: - self.virtual_table.add_method(t, n, methods[n]) - except: - pass - try: - self.virtual_table.add_attr(t, attr[n]) - except: - pass - + def collectTypes(self, context): + # print('collecting types') + types = {} + methods = {} + attr = {} + + for t in context.types: + t_str = str(t) + # print('----------------Typessssss-------------------------') + # print(t_str) + if context.types[t].parent is not None: + types[t_str] = context.types[t].parent + methods[t_str] = [] + attr[t_str] = context.types[t].attributes + if len(context.types[t].attributes): + for atr in context.types[t].attributes: + self.virtual_table.add_attr(t_str, atr) + else: + self.virtual_table.add_method(t_str, '-', []) + for m in context.types[t].methods.keys(): + methods[t_str] = (context.types[t].methods[m]) + self.virtual_table.add_method(t_str, (context.types[t].methods[m]).name, (context.types[t].methods[m]).param_names) + # print('-------------------------------') for t in types: self.data.append(HierarchyIL(t, types[t])) for m in self.virtual_table.methods: - self.data.append(VirtualTableIL(c, self.virtual_table.methods[m])) + self.data.append(VirtualTableIL(m, self.virtual_table.methods[m])) - depth = dict([(x, len(types) + 2) for x in types]) + depth = dict([(types[x].name, len(types) + 2) for x in types]) depth['Object'] = 0 - - for _ in types: - for c in types: - if c == 'Object': - continue - p = types[c] - depth[c] = min(depth[c], depth[p] + 1) - self.depth = depth + # TODO set some depth features for simplicity + # for _ in types: + # for c in types: + # if c is None: + # continue + # p = types[c] + # depth[c.name] = min(depth[c.name], depth[p] + 1) + # self.depth = depth def setInitialCode(self): self.code.append(CommentIL('--------------Initial Code---------------')) self.code.append(LabelIL("main", "")) - self.append(PushIL()) - self.append(PushIL()) - self.append(PushIL()) + self.code.append(PushIL()) + self.code.append(PushIL()) + self.code.append(PushIL()) - self.code.append(AllocateIL(1, self.vt.get_index('Main'), 'Main')) + self.code.append(AllocateIL(1, self.virtual_table.get_index('Main'), 'Main')) self.code.append(DispatchParentIL(2, 1, 'Main.Constructor')) self.code.append(DispatchIL(3,1,self.virtual_table.get_method_id('Main', 'main'))) @@ -152,14 +139,14 @@ def visit(self, node): #program @visitor.when(ProgramNode) def visit(self, node): - print('ProgramNode') + # print('ProgramNode') for n in node.declarations: self.visit(n) #declarations @visitor.when(ClassDeclarationNode) def visit(self, node): - print('ClassDeclarationNode') + # print('ClassDeclarationNode') self.current_class = node.id attributes = [] @@ -247,7 +234,7 @@ def visit(self, node, variables): def visit(self, node, variables): self.code.append(PushIL()) result = variables.add_temp() - print(node.id) + # print(node.id) if node.id in variables.stack: self.code.append(VarToVarIL(variables.id(result), variables.id(node.id))) else: From 1405248bdc60f3d545ed2e4aebd0424b80a61132 Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Wed, 25 Nov 2020 22:00:58 -0500 Subject: [PATCH 087/140] some fixxes for HierarchyIL and VirtualTableIL in transpilator, still getting errors --- .gitignore | 4 +++- src/visitors/to_mips.py | 38 +++++++++++++++++++----------------- src/visitors/transpilator.py | 11 ++++++----- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index 34f03568..b55bc700 100644 --- a/.gitignore +++ b/.gitignore @@ -412,5 +412,7 @@ dmypy.json # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) src/ast.txt +src/main.py .idea -venv \ No newline at end of file +venv +test \ No newline at end of file diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index b7b9d0ed..88ea19ad 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -14,33 +14,35 @@ def _loadfrom(self, file): return fd.read() def start(self): - code = "" - code += ".data\n" - code += "buffer:\n" - code += ".space 65536\n" - code += "\n" + self.code.append(".data\n") + self.code.append("buffer:\n") + self.code.append(".space 65536\n") + self.code.append("\n") for node in self.il_data: self.visit(node) for c in self.data: - code += (c) + self.code.append(c) - code += "\n.globl main\n" - code += ".text\n" + self.code.append("\n.globl main\n") + self.code.append(".text\n") - code += self._loadfrom(os.path.join('code_generation/statics', 'IO.s')) - code += self._loadfrom(os.path.join('code_generation/statics', 'Object.s')) - code += self._loadfrom(os.path.join('code_generation/statics', 'String.s')) - code += self._loadfrom(os.path.join('code_generation/statics', 'inherit.s')) + self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'IO.s')) + "\n") + self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'Object.s')) + "\n") + self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'String.s')) + "\n") + self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'inherit.s')) + "\n") + print('code_len', len(self.code)) for c in self.il_code: + # print(str(c)) self.visit(c) - code += "li $v0, 10\n" - code += "syscall\n" + print('code_len', len(self.code)) + self.code += "li $v0, 10\n" + self.code += "syscall\n" - return code + return self.code @visitor.on('node') def visit(self, node): @@ -139,7 +141,7 @@ def visit(self, node): @visitor.when(CommentIL) def visit(self, node): - self.code.append(str(node)) + self.code.append(str(node) + "\n") @visitor.when(IfJumpIL) def visit(self, node): @@ -156,8 +158,8 @@ def visit(self, node): self.data.append(node.name + "_VT:\n") self.data.append(".word {}_INH\n".format(node.name)) - for m in node.methods: - self.data.append(".word " + str(m) + "\n") + for n,m in node.methods: + self.data.append(".word " + n + "\n") @visitor.when(PushIL) def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 68f08447..36c46347 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -42,18 +42,19 @@ def collectTypes(self, context): if len(context.types[t].attributes): for atr in context.types[t].attributes: self.virtual_table.add_attr(t_str, atr) - else: - self.virtual_table.add_method(t_str, '-', []) + # else: + # self.virtual_table.add_method(t_str, '-', []) for m in context.types[t].methods.keys(): methods[t_str] = (context.types[t].methods[m]) + # print("class {} method_name {} params {}".format(t_str,(context.types[t].methods[m]).name, (context.types[t].methods[m]).param_names)) self.virtual_table.add_method(t_str, (context.types[t].methods[m]).name, (context.types[t].methods[m]).param_names) + # print(str(self.virtual_table)) # print('-------------------------------') for t in types: - self.data.append(HierarchyIL(t, types[t])) + self.data.append(HierarchyIL(t, types[t].name)) - for m in self.virtual_table.methods: + for m in self.virtual_table.methods.keys(): self.data.append(VirtualTableIL(m, self.virtual_table.methods[m])) - depth = dict([(types[x].name, len(types) + 2) for x in types]) depth['Object'] = 0 # TODO set some depth features for simplicity From 658b9abddff4208b02f5f5f544fe238ba83fc321 Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Thu, 26 Nov 2020 11:10:20 -0500 Subject: [PATCH 088/140] fixxing some structure mips final code --- .../nodesIL/methods_node_il.py | 5 +++- src/code_generation/statics/Object.s | 2 ++ src/main.py | 27 +++++++++++++---- src/visitors/to_mips.py | 29 ++++++++++++------- src/visitors/transpilator.py | 19 +++++++----- 5 files changed, 57 insertions(+), 25 deletions(-) diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index 21ec06ee..cfd713eb 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -3,7 +3,10 @@ class LabelIL(NodeIL): def __init__(self, first, second, func = False): - self.label = str(first) + '_' + str(second) + if not func: + self.label = str(first) + '_' + str(second) + else: + self.label = str(first) + '.' + str(second) self.first = first self.second = second self.func = func diff --git a/src/code_generation/statics/Object.s b/src/code_generation/statics/Object.s index a20adb37..fba85d50 100644 --- a/src/code_generation/statics/Object.s +++ b/src/code_generation/statics/Object.s @@ -20,3 +20,5 @@ jr $ra Object.abort: li $v0, 10 syscall + +Object.type_name: diff --git a/src/main.py b/src/main.py index 19c0c374..fe8d739d 100644 --- a/src/main.py +++ b/src/main.py @@ -36,20 +36,37 @@ def main(): # for t in context.types: # print(t) # print('methods: ', context.types[t]) - cv = codeVisitor(context) - cv.visit(ast) # print('Done transpilator') # print(len(cv.code)) # for c in cv.code: # print(str(c)) + + cv = codeVisitor(context) + cv.visit(ast) mips = MIPS(cv.code, cv.data) - code = mips.start() - # print('-------------------Done mips-------------------------------') + + path = program[:-1] + path = path[:-1] + path += 'mips' + print(path) + f = open(path, "w+") + for line in code: - print(code) + f.write(line) + + f.close() + + # except: + # pass + + + + # print('-------------------Done mips-------------------------------') + # for line in code: + # print(code) # except: # pass diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 88ea19ad..8dd139d9 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -14,33 +14,40 @@ def _loadfrom(self, file): return fd.read() def start(self): + self.code.append(".data\n") self.code.append("buffer:\n") self.code.append(".space 65536\n") + self.code.append("strsubstrexception: .asciiz \"{}\"\n".format("Substring index exception\n")) self.code.append("\n") - for node in self.il_data: - self.visit(node) - - for c in self.data: - self.code.append(c) - - self.code.append("\n.globl main\n") - self.code.append(".text\n") self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'IO.s')) + "\n") self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'Object.s')) + "\n") self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'String.s')) + "\n") self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'inherit.s')) + "\n") + for node in self.il_data: + self.visit(node) + + self.code.append("Object_INH: .word 0\n") + for c in self.data: + self.code.append(c) + + self.code.append("\n.globl main_\n") + self.code.append(".text\n") print('code_len', len(self.code)) for c in self.il_code: # print(str(c)) self.visit(c) + print('code_len', len(self.code)) self.code += "li $v0, 10\n" self.code += "syscall\n" + + + return self.code @@ -150,16 +157,16 @@ def visit(self, node): @visitor.when(HierarchyIL) def visit(self, node): - self.data.append(node.node + "_INH:\n") + self.data.append(node.node + "_INH: ") self.data.append(".word {}_INH\n".format(node.parent)) @visitor.when(VirtualTableIL) def visit(self, node): - self.data.append(node.name + "_VT:\n") + self.data.append(node.name + "_VT: ") self.data.append(".word {}_INH\n".format(node.name)) for n,m in node.methods: - self.data.append(".word " + n + "\n") + self.data.append(".word " + node.name + '.' + n + "\n") @visitor.when(PushIL) def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 36c46347..bd6f69cd 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -19,7 +19,9 @@ def __init__(self, context): self.depth = {} self.collectTypes(context) - self.setInitialCode() + self.setBuiltInTypes() + # self.setClassConstructor() + # self.setInitialCode() def getInt(self): self.count = self.count + 1 @@ -80,16 +82,17 @@ def setInitialCode(self): self.code.append(DispatchIL(3,1,self.virtual_table.get_method_id('Main', 'main'))) self.code.append(GotoIL("Object.abort")) + self.code.append(CommentIL('--------------End Initial Code---------------')) def setBuiltInTypes(self): built_in = ['Object', 'IO', 'Bool', 'String'] for t in built_in: self.code.append(LabelIL(t, 'Constructor', True)) self.code.append(PushIL()) - self.append(ReturnIL()) + self.code.append(ReturnIL()) def setClassConstructor(self, attributes): - self.code.append(LabelIL(self.current_class, 'Constructor', True)) + self.data.append(LabelIL(self.current_class, 'Constructor', True)) vars = Variables() vars.add_var('self') @@ -101,10 +104,10 @@ def setClassConstructor(self, attributes): self.visit(node.value, vars) p = vars.peek_last() index = self.virtual_table.get_attributes_id(self.current_class, node.name.value) - self.code.append(VarToMemoIL(vars.id('self'), vars.id(p), index)) + self.data.append(VarToMemoIL(vars.id('self'), vars.id(p), index)) - self.code.append(PushIL()) - self.code.append(ReturnIL()) + self.data.append(PushIL()) + self.data.append(ReturnIL()) def handleBinaryOps(self, node, variables, symbol): @@ -166,7 +169,7 @@ def visit(self, node): @visitor.when(FuncDeclarationNode) def visit(self, node): - self.code.append(LabelIL(self.current_class, node.id, True)) + self.data.append(LabelIL(self.current_class, node.id, True)) variables = Variables() variables.add_var('self') @@ -177,7 +180,7 @@ def visit(self, node): variables.add_temp() self.visit(node.body, variables) - self.code.append(ReturnIL()) + self.data.append(ReturnIL()) @visitor.when(VarDeclarationNode) def visit(self, node, variables): From a3246070d23c788588973929398efdba5515fc8d Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Thu, 26 Nov 2020 17:12:45 -0500 Subject: [PATCH 089/140] setting initial missing code --- .../nodesIL/methods_node_il.py | 4 ++- src/visitors/to_mips.py | 27 +++++++++++-------- src/visitors/transpilator.py | 14 +++++----- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index cfd713eb..fe88f641 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -3,7 +3,9 @@ class LabelIL(NodeIL): def __init__(self, first, second, func = False): - if not func: + if first == 'main': + self.label = 'main' + elif not func: self.label = str(first) + '_' + str(second) else: self.label = str(first) + '.' + str(second) diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 8dd139d9..d70f786a 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -16,9 +16,8 @@ def _loadfrom(self, file): def start(self): self.code.append(".data\n") - self.code.append("buffer:\n") - self.code.append(".space 65536\n") - self.code.append("strsubstrexception: .asciiz \"{}\"\n".format("Substring index exception\n")) + self.code.append("buffer: .space 65536\n") + self.code.append("strsubstrexception: .asciiz \"{}\"\n".format("Substring index exception")) self.code.append("\n") @@ -34,21 +33,27 @@ def start(self): for c in self.data: self.code.append(c) - self.code.append("\n.globl main_\n") + self.code.append("\n.globl main\n") self.code.append(".text\n") + # self.code.append("main:\n") + # self.code.append("addi $sp, $sp, -8\n") + # self.code.append("addi $sp, $sp, -4\n") + # self.code.append("sw $ra, 0($sp)\n") + # self.code.append("lw $a0, string_1\n") + # self.code.append("li $v0, 5\n") + # self.code.append("syscall\n") + # self.code.append('j Main.main\n') print('code_len', len(self.code)) for c in self.il_code: # print(str(c)) self.visit(c) - - print('code_len', len(self.code)) self.code += "li $v0, 10\n" self.code += "syscall\n" - + print('code_len', len(self.code)) + - return self.code @visitor.on('node') @@ -60,7 +65,7 @@ def visit(self, node): @visitor.when(BinaryOperationIL) def visit(self, node): self.code.append("lw $a0, " + str(node.leftOp) + "\n") - self.code.append("lw $a1, {}($sp)".format(-4 * node.rightOp)) + self.code.append("lw $a1, {}($sp)\n".format(-4 * node.rightOp)) if node.symbol == '+': self.code.append("add $a0, $a0, $a1\n") @@ -201,7 +206,7 @@ def visit(self, node): def visit(self, node): self.code.append("la $v0, " + str(node.method) + "\n") self.code.append("jalr $ra, $v0\n") - self.code.append("sw $v0, {}($sp)".format(-4 * node.result)) + self.code.append("sw $v0, {}($sp)\n".format(-4 * node.result)) @visitor.when(InheritIL) def visit(self, node): @@ -213,7 +218,7 @@ def visit(self, node): @visitor.when(StringIL) def visit(self, node): - self.data.append("{}: .asciiz {}\n".format(node.label, node.string)) + self.code.append("{}: .asciiz \"{}\"\n".format(node.label, node.string)) @visitor.when(PrintIL) def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index bd6f69cd..bc1e6d98 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -21,7 +21,7 @@ def __init__(self, context): self.collectTypes(context) self.setBuiltInTypes() # self.setClassConstructor() - # self.setInitialCode() + self.setInitialCode() def getInt(self): self.count = self.count + 1 @@ -92,7 +92,7 @@ def setBuiltInTypes(self): self.code.append(ReturnIL()) def setClassConstructor(self, attributes): - self.data.append(LabelIL(self.current_class, 'Constructor', True)) + self.code.append(LabelIL(self.current_class, 'Constructor', True)) vars = Variables() vars.add_var('self') @@ -104,10 +104,10 @@ def setClassConstructor(self, attributes): self.visit(node.value, vars) p = vars.peek_last() index = self.virtual_table.get_attributes_id(self.current_class, node.name.value) - self.data.append(VarToMemoIL(vars.id('self'), vars.id(p), index)) + self.code.append(VarToMemoIL(vars.id('self'), vars.id(p), index)) - self.data.append(PushIL()) - self.data.append(ReturnIL()) + self.code.append(PushIL()) + self.code.append(ReturnIL()) def handleBinaryOps(self, node, variables, symbol): @@ -169,7 +169,7 @@ def visit(self, node): @visitor.when(FuncDeclarationNode) def visit(self, node): - self.data.append(LabelIL(self.current_class, node.id, True)) + self.code.append(LabelIL(self.current_class, node.id, True)) variables = Variables() variables.add_var('self') @@ -180,7 +180,7 @@ def visit(self, node): variables.add_temp() self.visit(node.body, variables) - self.data.append(ReturnIL()) + self.code.append(ReturnIL()) @visitor.when(VarDeclarationNode) def visit(self, node, variables): From ac15d7c8e8f0d20eb7d789407aea1e29fe226eda Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Thu, 26 Nov 2020 21:28:45 -0500 Subject: [PATCH 090/140] some reviews in process --- .../nodesIL/methods_node_il.py | 4 + src/code_generation/statics/IO.s | 107 +++- src/code_generation/statics/Object.s | 45 +- src/code_generation/statics/String.s | 228 ++++++-- src/visitors/to_mips.py | 8 +- src/visitors/transpilator.py | 5 + tests/codegen/hello_world.mips | 518 ++++++++++++++++++ 7 files changed, 816 insertions(+), 99 deletions(-) create mode 100644 tests/codegen/hello_world.mips diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index fe88f641..11b66dd3 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -16,6 +16,10 @@ def __init__(self, first, second, func = False): def __str__(self): return 'label {}:'.format(self.label) +class CustomLineIL(NodeIL): + def __init__(self, statement): + self.statement = statement + class LoadLabelIL(NodeIL): def __init__(self, var, label): self.var = var diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s index 78440266..6822f43e 100644 --- a/src/code_generation/statics/IO.s +++ b/src/code_generation/statics/IO.s @@ -1,48 +1,99 @@ IO.out_int: -li $v0, 1 -lw $a0, -4($sp) +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 jr $ra IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) li $v0, 4 -lw $a0, -4($sp) syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 jr $ra IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 li $v0, 9 syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +# la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_VT +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_VT +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 jr $ra + IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) li $v0, 5 syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +# la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, IO_VT +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO.Constructor +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 jr $ra \ No newline at end of file diff --git a/src/code_generation/statics/Object.s b/src/code_generation/statics/Object.s index fba85d50..aeb9c242 100644 --- a/src/code_generation/statics/Object.s +++ b/src/code_generation/statics/Object.s @@ -1,24 +1,41 @@ Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) li $v0, 9 syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: +# bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +copy_object_word: +lw $t2, ($t0) +sw $t2, ($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 4 +lw $t3, 8($t0) +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 jr $ra Object.abort: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall li $v0, 10 syscall +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra Object.type_name: diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s index c3641f9f..7e6d48f2 100644 --- a/src/code_generation/statics/String.s +++ b/src/code_generation/statics/String.s @@ -1,76 +1,194 @@ String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +li $a0, 0 +count_char: +lb $t1, ($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, IO_VT +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_VT +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 jr $ra String.concat: -move $a2, $ra +addi $sp, $sp, -28 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 +sw $a1, 8($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 +sw $a1, 16($sp) +lw $a0, 8($sp) +lw $t0, 16($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 li $v0, 9 -move $a0, $v1 syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 +# bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_str1_char: +lb $t2, ($t0) +sb $t2, ($v0) +beqz $t2, concat_str2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_str1_char +concat_str2_char: +lb $t2, ($t0) +sb $t2, ($v0) +beqz $t2, finish_str2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_str2_char +finish_str2_concat: +sb $0, ($v0) +sw $v0, 20($sp) +li $a0, 20 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +# la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_VT +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.Constructor +sw $a1, 28($sp) +lw $a1, 24($sp) +lw $ra, 0($sp) +addi $sp, $sp, 40 jr $ra + String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) +# bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t2, 24($sp) +bltz $t0, strsubstrexception +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, strsubstrexception +j jump_str_char +finish_index_jump: +li $a0, 0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +lb $t0, ($t2) +sb $t0, ($v0) +addi $t2, $t2, 1 +beq $t2, $zero, strsubstrexception +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $v0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +# la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_VT +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.Constructor +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 jr $ra + _substrexception: la $a0, strsubstrexception li $v0, 4 diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index d70f786a..2e1968e4 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -59,7 +59,11 @@ def start(self): @visitor.on('node') def visit(self, node): pass - + + #custom + @visitor.when(CustomLineIL) + def visit(self, node): + self.code.append(node.statement) #operations @visitor.when(BinaryOperationIL) @@ -196,7 +200,7 @@ def visit(self, node): def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4 * node.obj)) self.code.append("lw $a0, ($a0)\n") - self.code.append("addiu $a0, $a0, {}\n".format(-4 * node.offset)) + self.code.append("addiu $a0, $a0, {}\n".format(4 * node.offset)) self.code.append("lw $v0, ($a0)\n") self.code.append("jalr $ra, $v0\n") self.code.append("sw $v0, {}($sp)\n".format(-4 * node.result)) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index bc1e6d98..5578a9f6 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -72,6 +72,11 @@ def setInitialCode(self): self.code.append(CommentIL('--------------Initial Code---------------')) self.code.append(LabelIL("main", "")) + self.code.append(CustomLineIL("sub $a0, $a0, $a0\n")) + self.code.append(CustomLineIL("sub $a1, $a1, $a1\n")) + self.code.append(CustomLineIL("sub $a2, $a2, $a2\n")) + self.code.append(CustomLineIL("sub $a3, $a3, $a3\n")) + self.code.append(PushIL()) self.code.append(PushIL()) self.code.append(PushIL()) diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips new file mode 100644 index 00000000..945fde8e --- /dev/null +++ b/tests/codegen/hello_world.mips @@ -0,0 +1,518 @@ +.data +buffer: .space 65536 +strsubstrexception: .asciiz "Substring index exception" + +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra + +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra + + +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +# la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_VT +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_VT +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra + + + +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +# la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, IO_VT +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO.Constructor +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +copy_object_word: +lw $t2, ($t0) +sw $t2, ($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 4 +lw $t3, 8($t0) +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra + +Object.abort: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra + +Object.type_name: + + +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +li $a0, 0 +count_char: +lb $t1, ($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, IO_VT +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_VT +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra + + +String.concat: +addi $sp, $sp, -28 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $a0, 8($sp) +lw $t0, 16($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_str1_char: +lb $t2, ($t0) +sb $t2, ($v0) +beqz $t2, concat_str2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_str1_char +concat_str2_char: +lb $t2, ($t0) +sb $t2, ($v0) +beqz $t2, finish_str2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_str2_char +finish_str2_concat: +sb $0, ($v0) +sw $v0, 20($sp) +li $a0, 20 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +# la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_VT +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.Constructor +sw $a1, 28($sp) +lw $a1, 24($sp) +lw $ra, 0($sp) +addi $sp, $sp, 40 +jr $ra + + +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t2, 24($sp) +bltz $t0, strsubstrexception +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, strsubstrexception +j jump_str_char +finish_index_jump: +li $a0, 0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +lb $t0, ($t2) +sb $t0, ($v0) +addi $t2, $t2, 1 +beq $t2, $zero, strsubstrexception +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $v0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +# bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +# la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_VT +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.Constructor +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra + + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit + +inherit_true: +li $v0, 1 +jr $ra + +inherit_false: +li $v0, 0 +jr $ra +string_1: .asciiz "Hello, World.\n" +Object_INH: .word 0 +String_INH: .word Object_INH +Int_INH: .word Object_INH +Bool_INH: .word Object_INH +IO_INH: .word Object_INH +SELF_TYPE_INH: .word Object_INH +Main_INH: .word IO_INH +String_VT: .word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: .word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: .word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_VT: .word Main_INH +.word Main.main + +.globl main +.text +Object.Constructor: +sw $ra, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +sub $a0, $a0, $a0 +sub $a1, $a1, $a1 +sub $a2, $a2, $a2 +sub $a3, $a3, $a3 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +la $v0, 1 +jalr $ra, $v0 +sw $v0, ($sp) +lw $a0, -12($sp) +lw $a0, ($a0) +addiu $a0, $a0, 4 +lw $v0, ($a0) +jalr $ra, $v0 +sw $v0, -4($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_1 +sw $a0, -4($sp) +lw $a0, -8($sp) +lw $a0, ($a0) +addiu $a0, $a0, 16 +lw $v0, ($a0) +jalr $ra, $v0 +sw $v0, 4($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall From 2bb06e79ef087fd314955eb9cb0ab3e81c3f0b1b Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Fri, 27 Nov 2020 10:33:44 -0500 Subject: [PATCH 091/140] fixxes in mips output, compiling correctly, still getting errors --- src/code_generation/statics/IO.s | 114 ++---- src/code_generation/statics/Object.s | 46 +-- src/code_generation/statics/String.s | 228 +++--------- src/code_generation/statics/inherit.s | 4 +- src/visitors/to_mips.py | 23 +- src/visitors/transpilator.py | 8 +- tests/codegen/hello_world.mips | 518 -------------------------- 7 files changed, 120 insertions(+), 821 deletions(-) delete mode 100644 tests/codegen/hello_world.mips diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s index 6822f43e..061f0623 100644 --- a/src/code_generation/statics/IO.s +++ b/src/code_generation/statics/IO.s @@ -1,99 +1,49 @@ -IO.out_int: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -li $v0 , 1 -lw $a0 , 4($sp) +IO.out_string: +li $v0, 4 +lw $a0, -4($sp) syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 jr $ra -IO.out_string: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $a0, 4($sp) -li $v0, 4 + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 jr $ra IO.in_string: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 li $v0, 9 syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -# la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_VT -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_VT -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 jr $ra - IO.in_int: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) li $v0, 5 syscall -sw $v0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -# la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, IO_VT -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal IO.Constructor -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 jr $ra \ No newline at end of file diff --git a/src/code_generation/statics/Object.s b/src/code_generation/statics/Object.s index aeb9c242..0ea77eaf 100644 --- a/src/code_generation/statics/Object.s +++ b/src/code_generation/statics/Object.s @@ -1,41 +1,25 @@ Object.copy: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $a0, 8($t0) +lw $a1, -4($sp) +lw $a0, -8($sp) li $v0, 9 syscall -# bge $v0, $sp heap_error -move $t1, $v0 -li $a0, 0 -copy_object_word: -lw $t2, ($t0) -sw $t2, ($t1) -addi $t0, $t0, 4 -addi $t1, $t1, 4 -addi $a0, $a0, 4 -lw $t3, 8($t0) -blt $a0, $t3, copy_object_word -sw $v0, 4($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: jr $ra + Object.abort: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_0 -sw $t0, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall li $v0, 10 syscall -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra Object.type_name: diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s index 7e6d48f2..c3641f9f 100644 --- a/src/code_generation/statics/String.s +++ b/src/code_generation/statics/String.s @@ -1,194 +1,76 @@ String.length: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -li $a0, 0 -count_char: -lb $t1, ($t0) -beqz $t1, finish_chars_count -addi $t0, $t0, 1 -addi $a0, $a0, 1 -j count_char -finish_chars_count: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, IO_VT -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal IO_VT -sw $a1, 12($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 jr $ra String.concat: -addi $sp, $sp, -28 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) +move $a2, $ra jal String.length -sw $a1, 8($sp) -lw $t0, 36($sp) -lw $t1, 16($t0) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) +move $v1, $v0 +addiu $sp, $sp, -4 jal String.length -sw $a1, 16($sp) -lw $a0, 8($sp) -lw $t0, 16($sp) -add $a0, $a0, $t0 -addi $a0, $a0, 1 +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 li $v0, 9 +move $a0, $v1 syscall -# bge $v0, $sp heap_error -lw $t0, 4($sp) -lw $t1, 12($sp) -copy_str1_char: -lb $t2, ($t0) -sb $t2, ($v0) -beqz $t2, concat_str2_char -addi $t0, $t0, 1 -addi $v0, $v0, 1 -j copy_str1_char -concat_str2_char: -lb $t2, ($t0) -sb $t2, ($v0) -beqz $t2, finish_str2_concat -addi $t1, $t1, 1 -addi $v0, $v0, 1 -j concat_str2_char -finish_str2_concat: -sb $0, ($v0) -sw $v0, 20($sp) -li $a0, 20 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -# la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_VT -sw $t1, 12($t0) -sw $t0, 24($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.Constructor -sw $a1, 28($sp) -lw $a1, 24($sp) -lw $ra, 0($sp) -addi $sp, $sp, 40 +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 jr $ra - String.substr: -addi $sp, $sp, -20 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -addi $a0, $a0, 1 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -lw $t0, 4($sp) -lw $t1, 8($sp) -lw $t2, 24($sp) -bltz $t0, strsubstrexception -li $a0, 0 -jump_str_char: -beq $a0, $t0, finish_index_jump -addi $a0, $a0, 1 -addi $t2, $t2, 1 -beq $t2, $zero, strsubstrexception -j jump_str_char -finish_index_jump: -li $a0, 0 -copy_substr_char: -beq $a0, $t1 finish_substr_copy -lb $t0, ($t2) -sb $t0, ($v0) -addi $t2, $t2, 1 -beq $t2, $zero, strsubstrexception -addi $v0, $v0, 1 -addi $a0, $a0, 1 -j copy_substr_char -finish_substr_copy: -sb $0, ($v0) -sw $v0, 12($sp) -li $a0, 20 +lw $a0, -12($sp) +addiu $a0, $a0, 1 li $v0, 9 syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -# la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_VT -sw $t1, 12($t0) -sw $t0, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.Constructor -sw $a1, 20($sp) -lw $a1, 16($sp) -lw $ra, 0($sp) -addi $sp, $sp, 36 +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) jr $ra - _substrexception: la $a0, strsubstrexception li $v0, 4 diff --git a/src/code_generation/statics/inherit.s b/src/code_generation/statics/inherit.s index 8e17e254..b322fb0a 100644 --- a/src/code_generation/statics/inherit.s +++ b/src/code_generation/statics/inherit.s @@ -3,11 +3,9 @@ beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false lw $a0, ($a0) j inherit - inherit_true: li $v0, 1 jr $ra - inherit_false: li $v0, 0 -jr $ra \ No newline at end of file +jr $ra diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 2e1968e4..99caf496 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -21,20 +21,22 @@ def start(self): self.code.append("\n") - self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'IO.s')) + "\n") - self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'Object.s')) + "\n") - self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'String.s')) + "\n") - self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'inherit.s')) + "\n") for node in self.il_data: self.visit(node) - self.code.append("Object_INH: .word 0\n") + self.code.append("Object_INH:\n") for c in self.data: self.code.append(c) self.code.append("\n.globl main\n") self.code.append(".text\n") + + self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'IO.s')) + "\n") + self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'Object.s')) + "\n") + self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'String.s')) + "\n") + self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'inherit.s')) + "\n") + # self.code.append("main:\n") # self.code.append("addi $sp, $sp, -8\n") # self.code.append("addi $sp, $sp, -4\n") @@ -43,6 +45,7 @@ def start(self): # self.code.append("li $v0, 5\n") # self.code.append("syscall\n") # self.code.append('j Main.main\n') + print('code_len', len(self.code)) for c in self.il_code: # print(str(c)) @@ -147,7 +150,7 @@ def visit(self, node): def visit(self, node): self.code.append(node.label + ':\n') if node.func: - self.code.append("sw $ra, ($sp)\n") + self.code.append("sw $ra, 0($sp)\n") self.code.append("addiu $sp, $sp, 4\n") @@ -166,12 +169,12 @@ def visit(self, node): @visitor.when(HierarchyIL) def visit(self, node): - self.data.append(node.node + "_INH: ") + self.data.append(node.node + "_INH:\n") self.data.append(".word {}_INH\n".format(node.parent)) @visitor.when(VirtualTableIL) def visit(self, node): - self.data.append(node.name + "_VT: ") + self.data.append(node.name + "_VT:\n") self.data.append(".word {}_INH\n".format(node.name)) for n,m in node.methods: @@ -202,14 +205,14 @@ def visit(self, node): self.code.append("lw $a0, ($a0)\n") self.code.append("addiu $a0, $a0, {}\n".format(4 * node.offset)) self.code.append("lw $v0, ($a0)\n") - self.code.append("jalr $ra, $v0\n") + self.code.append("jalr $ra\n") self.code.append("sw $v0, {}($sp)\n".format(-4 * node.result)) @visitor.when(DispatchParentIL) def visit(self, node): self.code.append("la $v0, " + str(node.method) + "\n") - self.code.append("jalr $ra, $v0\n") + self.code.append("jalr $ra\n") self.code.append("sw $v0, {}($sp)\n".format(-4 * node.result)) @visitor.when(InheritIL) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 5578a9f6..390a3280 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -72,10 +72,10 @@ def setInitialCode(self): self.code.append(CommentIL('--------------Initial Code---------------')) self.code.append(LabelIL("main", "")) - self.code.append(CustomLineIL("sub $a0, $a0, $a0\n")) - self.code.append(CustomLineIL("sub $a1, $a1, $a1\n")) - self.code.append(CustomLineIL("sub $a2, $a2, $a2\n")) - self.code.append(CustomLineIL("sub $a3, $a3, $a3\n")) + # self.code.append(CustomLineIL("sub $a0, $a0, $a0\n")) + # self.code.append(CustomLineIL("sub $a1, $a1, $a1\n")) + # self.code.append(CustomLineIL("sub $a2, $a2, $a2\n")) + # self.code.append(CustomLineIL("sub $a3, $a3, $a3\n")) self.code.append(PushIL()) self.code.append(PushIL()) diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips deleted file mode 100644 index 945fde8e..00000000 --- a/tests/codegen/hello_world.mips +++ /dev/null @@ -1,518 +0,0 @@ -.data -buffer: .space 65536 -strsubstrexception: .asciiz "Substring index exception" - -IO.out_int: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -li $v0 , 1 -lw $a0 , 4($sp) -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra - -IO.out_string: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra - - -IO.in_string: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -# la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_VT -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_VT -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra - - - -IO.in_int: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $v0, 5 -syscall -sw $v0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -# la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, IO_VT -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal IO.Constructor -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -Object.copy: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $a0, 8($t0) -li $v0, 9 -syscall -# bge $v0, $sp heap_error -move $t1, $v0 -li $a0, 0 -copy_object_word: -lw $t2, ($t0) -sw $t2, ($t1) -addi $t0, $t0, 4 -addi $t1, $t1, 4 -addi $a0, $a0, 4 -lw $t3, 8($t0) -blt $a0, $t3, copy_object_word -sw $v0, 4($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra - -Object.abort: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_0 -sw $t0, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -li $v0, 10 -syscall -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra - -Object.type_name: - - -String.length: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -li $a0, 0 -count_char: -lb $t1, ($t0) -beqz $t1, finish_chars_count -addi $t0, $t0, 1 -addi $a0, $a0, 1 -j count_char -finish_chars_count: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, IO_VT -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal IO_VT -sw $a1, 12($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra - - -String.concat: -addi $sp, $sp, -28 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 8($sp) -lw $t0, 36($sp) -lw $t1, 16($t0) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 16($sp) -lw $a0, 8($sp) -lw $t0, 16($sp) -add $a0, $a0, $t0 -addi $a0, $a0, 1 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -lw $t0, 4($sp) -lw $t1, 12($sp) -copy_str1_char: -lb $t2, ($t0) -sb $t2, ($v0) -beqz $t2, concat_str2_char -addi $t0, $t0, 1 -addi $v0, $v0, 1 -j copy_str1_char -concat_str2_char: -lb $t2, ($t0) -sb $t2, ($v0) -beqz $t2, finish_str2_concat -addi $t1, $t1, 1 -addi $v0, $v0, 1 -j concat_str2_char -finish_str2_concat: -sb $0, ($v0) -sw $v0, 20($sp) -li $a0, 20 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -# la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_VT -sw $t1, 12($t0) -sw $t0, 24($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.Constructor -sw $a1, 28($sp) -lw $a1, 24($sp) -lw $ra, 0($sp) -addi $sp, $sp, 40 -jr $ra - - -String.substr: -addi $sp, $sp, -20 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -addi $a0, $a0, 1 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -lw $t0, 4($sp) -lw $t1, 8($sp) -lw $t2, 24($sp) -bltz $t0, strsubstrexception -li $a0, 0 -jump_str_char: -beq $a0, $t0, finish_index_jump -addi $a0, $a0, 1 -addi $t2, $t2, 1 -beq $t2, $zero, strsubstrexception -j jump_str_char -finish_index_jump: -li $a0, 0 -copy_substr_char: -beq $a0, $t1 finish_substr_copy -lb $t0, ($t2) -sb $t0, ($v0) -addi $t2, $t2, 1 -beq $t2, $zero, strsubstrexception -addi $v0, $v0, 1 -addi $a0, $a0, 1 -j copy_substr_char -finish_substr_copy: -sb $0, ($v0) -sw $v0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -# bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -# la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_VT -sw $t1, 12($t0) -sw $t0, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.Constructor -sw $a1, 20($sp) -lw $a1, 16($sp) -lw $ra, 0($sp) -addi $sp, $sp, 36 -jr $ra - - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit - -inherit_true: -li $v0, 1 -jr $ra - -inherit_false: -li $v0, 0 -jr $ra -string_1: .asciiz "Hello, World.\n" -Object_INH: .word 0 -String_INH: .word Object_INH -Int_INH: .word Object_INH -Bool_INH: .word Object_INH -IO_INH: .word Object_INH -SELF_TYPE_INH: .word Object_INH -Main_INH: .word IO_INH -String_VT: .word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: .word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: .word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_VT: .word Main_INH -.word Main.main - -.globl main -.text -Object.Constructor: -sw $ra, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -sub $a0, $a0, $a0 -sub $a1, $a1, $a1 -sub $a2, $a2, $a2 -sub $a3, $a3, $a3 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -la $v0, 1 -jalr $ra, $v0 -sw $v0, ($sp) -lw $a0, -12($sp) -lw $a0, ($a0) -addiu $a0, $a0, 4 -lw $v0, ($a0) -jalr $ra, $v0 -sw $v0, -4($sp) -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_1 -sw $a0, -4($sp) -lw $a0, -8($sp) -lw $a0, ($a0) -addiu $a0, $a0, 16 -lw $v0, ($a0) -jalr $ra, $v0 -sw $v0, 4($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall From c018eb411eb7ae1acf62ba059f6e009d5bc74851 Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Sat, 28 Nov 2020 08:57:22 -0500 Subject: [PATCH 092/140] first code gen test passed, still debuggin --- .../nodesIL/methods_node_il.py | 4 +- src/code_generation/statics/IO.s | 1 - src/code_generation/virtual_table.py | 3 +- src/main.py | 5 + src/visitors/to_mips.py | 51 +- src/visitors/transpilator.py | 8 +- tests/codegen/atoi.mips | 2186 +++++++++++++++++ tests/codegen/hello_world.mips | 355 +++ 8 files changed, 2588 insertions(+), 25 deletions(-) create mode 100644 tests/codegen/atoi.mips create mode 100644 tests/codegen/hello_world.mips diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index 11b66dd3..fd475233 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -121,8 +121,8 @@ def __str__(self): to_return = '' to_return += 'VirtualTable: ' + self.name + '\n' to_return += '------Methods---------\n' - for m in self.methods: - to_return += m + '\n' + for n,m in self.methods: + to_return += n + '\n' return to_return class DispatchIL(NodeIL): diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s index 061f0623..0491d7f8 100644 --- a/src/code_generation/statics/IO.s +++ b/src/code_generation/statics/IO.s @@ -1,6 +1,5 @@ IO.out_string: li $v0, 4 -lw $a0, -4($sp) syscall jr $ra diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index 45c3c8b9..f6bd3bfd 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -44,7 +44,8 @@ def get_method_id(self, claSS, method): for i in range(len(self.methods[claSS])): b, args = self.methods[claSS][i] if b == method: - return i + 1 + return claSS + '.' + method + print('VT: class: {} method: {}'.format(claSS, method)) return -1 def get_attributes(self, claSS): diff --git a/src/main.py b/src/main.py index fe8d739d..33338726 100644 --- a/src/main.py +++ b/src/main.py @@ -48,6 +48,11 @@ def main(): mips = MIPS(cv.code, cv.data) code = mips.start() + for c in cv.data: + print(str(c)) + for c in cv.code: + print(str(c)) + path = program[:-1] path = path[:-1] path += 'mips' diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 99caf496..be52de21 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -16,7 +16,7 @@ def _loadfrom(self, file): def start(self): self.code.append(".data\n") - self.code.append("buffer: .space 65536\n") + self.code.append("buffer: .space 80\n") self.code.append("strsubstrexception: .asciiz \"{}\"\n".format("Substring index exception")) self.code.append("\n") @@ -87,16 +87,16 @@ def visit(self, node): elif node.symbol == '=': self.code.append("seq $a0, $a0, $a1\n") elif node.symbol == '>': - self.code.append("li $a2, 1\n") - self.code.append("add $a1, $a1, $a2\n") + self.code.append("li $t0, 1\n") + self.code.append("add $a1, $a1, $t0\n") self.code.append("sge $a0, $a0, $a1\n") elif node.symbol == '>=': self.code.append("sge $a0, $a0, $a1\n") elif node.symbol == '<=': self.code.append("add $a0, $a1, $a0\n") elif node.symbol == '<': - self.code.append("li $a2, 1\n") - self.code.append("add $a0, $a0, $a2\n") + self.code.append("li $t0, 1\n") + self.code.append("add $a0, $a0, $t0\n") self.code.append("sge $a0, $a1, $a0\n") self.code.append("sw $a0, {}($sp)\n".format(-4*node.var)) @@ -135,15 +135,15 @@ def visit(self, node): @visitor.when(MemoToVarIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(-4 * node.right)) - self.code.append("lw $a1, {}($a0)\n".format(4*node.offset)) + self.code.append("lw $t0, {}($sp)\n".format(-4 * node.right)) + self.code.append("lw $a1, {}($t0)\n".format(4*node.offset)) self.code.append("sw $a1, {}($sp)\n".format(-4*node.left)) @visitor.when(ConstToMemoIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(-4 * node.left)) + self.code.append("lw $t0, {}($sp)\n".format(-4 * node.left)) self.code.append("li $a1, {}\n".format(node.right)) - self.code.append("sw $a1, {}($a0)\n".format(4*node.offset)) + self.code.append("sw $a1, {}($t0)\n".format(4*node.offset)) #methods @visitor.when(LabelIL) @@ -201,19 +201,36 @@ def visit(self, node): @visitor.when(DispatchIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(-4 * node.obj)) - self.code.append("lw $a0, ($a0)\n") - self.code.append("addiu $a0, $a0, {}\n".format(4 * node.offset)) - self.code.append("lw $v0, ($a0)\n") - self.code.append("jalr $ra\n") - self.code.append("sw $v0, {}($sp)\n".format(-4 * node.result)) + self.code.append("#Dispatch in place\n") + self.code.append("#obj {} offset {} result {}\n".format(node.obj, node.offset, node.result)) +# move $t0, $sp + # lw $t1, 4($t0) + # addi $sp, $sp, -4 + # sw $t1, 0($sp) +# jal Main_init + self.code.append("move $t0, $sp\n") + self.code.append("lw $t1, 4($t0)\n") + self.code.append("addi $sp, $sp, {}\n".format(4)) + self.code.append("sw $t1, 0($sp)\n") + if node.result == -1: + # self.code.append("jalr $ra, $v0\n") + self.code.append("jal IO.out_string\n") + else: + self.code.append("jal {}\n".format(node.result)) + self.code.append("sw $a1, {}($sp)\n".format(-4 * node.result)) @visitor.when(DispatchParentIL) def visit(self, node): + self.code.append("#DispatchParent in place\n") + self.code.append("#obj {} offset {} result {}\n".format(node.obj, node.method, node.result)) self.code.append("la $v0, " + str(node.method) + "\n") - self.code.append("jalr $ra\n") - self.code.append("sw $v0, {}($sp)\n".format(-4 * node.result)) + if node.result == -1: + # self.code.append("jalr $ra, $v0\n") + self.code.append("jal IO.out_string\n") + else: + self.code.append("jal {}\n".format(node.result)) + self.code.append("sw $a1, {}($sp)\n".format(-4 * node.result)) @visitor.when(InheritIL) def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 390a3280..b004869f 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -90,7 +90,7 @@ def setInitialCode(self): self.code.append(CommentIL('--------------End Initial Code---------------')) def setBuiltInTypes(self): - built_in = ['Object', 'IO', 'Bool', 'String'] + built_in = ['Object','Int', 'IO', 'Bool', 'String'] for t in built_in: self.code.append(LabelIL(t, 'Constructor', True)) self.code.append(PushIL()) @@ -157,7 +157,7 @@ def visit(self, node): def visit(self, node): # print('ClassDeclarationNode') self.current_class = node.id - + print('--current_class {}\n'.format(node.id)) attributes = [] for f in node.features: if type(f) == AttrDeclarationNode: @@ -453,7 +453,7 @@ def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) - + print('----------node {}---------'.format(node)) index = self.virtual_table.get_method_id(node.obj, node.id) self.code.append(CommentIL('push object')) @@ -480,7 +480,7 @@ def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) - + print('----------node {}---------'.format(node)) index = self.virtual_table.get_method_id(self.current_class, node.id) if self.current_class != 'Main': diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips new file mode 100644 index 00000000..db6a844a --- /dev/null +++ b/tests/codegen/atoi.mips @@ -0,0 +1,2186 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "0" +string_3: .asciiz "1" +string_5: .asciiz "2" +string_7: .asciiz "3" +string_9: .asciiz "4" +string_11: .asciiz "5" +string_13: .asciiz "6" +string_15: .asciiz "7" +string_17: .asciiz "8" +string_19: .asciiz "9" +string_31: .asciiz "" +string_32: .asciiz "9" +string_33: .asciiz "8" +string_34: .asciiz "7" +string_35: .asciiz "6" +string_36: .asciiz "5" +string_37: .asciiz "4" +string_38: .asciiz "3" +string_39: .asciiz "2" +string_40: .asciiz "1" +string_41: .asciiz "0" +string_43: .asciiz "-" +string_45: .asciiz "+" +string_50: .asciiz "-" +string_51: .asciiz "0" +string_53: .asciiz "" +string_54: .asciiz " == " +string_55: .asciiz "\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +A2I_INH: +.word Object_INH +Main_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A2I_VT: +.word A2I_INH +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +A2I.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.c2i: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_1 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_2 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_3 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_5 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_6 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_7 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_9 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_10 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_11 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_12 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -68($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_13 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_14 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -76($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_15 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_16 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_17 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_18 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -92($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_19 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_20 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -104($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 26 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_20 +_if_20: +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_20: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_18 +_if_18: +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_18: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_16 +_if_16: +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_16: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +j _fi_14 +_if_14: +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -32($sp) +_fi_14: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +j _fi_12 +_if_12: +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_12: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +j _fi_10 +_if_10: +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -40($sp) +_fi_10: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -40($sp) +j _fi_8 +_if_8: +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -44($sp) +_fi_8: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -44($sp) +j _fi_6 +_if_6: +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -48($sp) +_fi_6: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -48($sp) +j _fi_4 +_if_4: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -52($sp) +_fi_4: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -52($sp) +j _fi_2 +_if_2: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -56($sp) +_fi_2: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.i2c: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_21 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_22 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_23 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_24 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_25 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_26 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -68($sp) +sw $a0, -4($sp) +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_27 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -76($sp) +sw $a0, -4($sp) +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_28 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_29 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -92($sp) +sw $a0, -4($sp) +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_30 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -104($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 26 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_31 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_30 +_if_30: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_32 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_30: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_29 +_if_29: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_33 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_29: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_28 +_if_28: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_34 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_28: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +j _fi_27 +_if_27: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_35 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -32($sp) +_fi_27: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +j _fi_26 +_if_26: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_36 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_26: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +j _fi_25 +_if_25: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_37 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -40($sp) +_fi_25: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -40($sp) +j _fi_24 +_if_24: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_38 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -44($sp) +_fi_24: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -44($sp) +j _fi_23 +_if_23: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_39 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -48($sp) +_fi_23: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -48($sp) +j _fi_22 +_if_22: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_40 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -52($sp) +_fi_22: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -52($sp) +j _fi_21 +_if_21: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_41 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -56($sp) +_fi_21: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.a2i: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_42 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_43 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_44 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_45 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_46 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 12 result A2I.a2i_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.a2i_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_46 +_if_46: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -72($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 3 offset 14 result A2I.a2i_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.a2i_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_46: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_44 +_if_44: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -76($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 3 offset 15 result A2I.a2i_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.a2i_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -12($sp) +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_44: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +j _fi_42 +_if_42: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -40($sp) +_fi_42: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.a2i_aux: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_47: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_47 +j _pool_47 +_body_47: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -68($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -72($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -80($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 3 offset 18 result A2I.c2i +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.c2i +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, 3 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -60($sp) +sw $a0, -4($a1) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -64($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_47 +_pool_47: +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.i2a: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_48 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_49 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_50 +sw $a0, -4($sp) +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +lw $a0, 3 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 13 result A2I.i2a_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.i2a_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 4 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_49 +_if_49: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 13 result A2I.i2a_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.i2a_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_49: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +j _fi_48 +_if_48: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_51 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -32($sp) +_fi_48: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.i2a_aux: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_52 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 11 result A2I.i2a_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.i2a_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 13 result A2I.i2c +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.i2c +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_52 +_if_52: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_53 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_52: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 7 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_54 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 7 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 7 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_55 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 7 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -4($sp) +addiu $sp, $sp, -16 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips new file mode 100644 index 00000000..4180a9da --- /dev/null +++ b/tests/codegen/hello_world.mips @@ -0,0 +1,355 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "Hello, World.\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_1 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 4 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall From 307699a3e20972f7d7a1e3fdc91acd882940808b Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Sat, 28 Nov 2020 09:46:26 -0500 Subject: [PATCH 093/140] fixxes for complete tests compilation --- src/code_generation/variables.py | 2 + src/code_generation/virtual_table.py | 5 +- src/visitors/transpilator.py | 32 +- tests/codegen/book_list.mips | 1376 +++++++ tests/codegen/cells.mips | 1395 +++++++ tests/codegen/complex.mips | 870 ++++ tests/codegen/fib.mips | 564 +++ tests/codegen/graph.mips | 3755 +++++++++++++++++ tests/codegen/life.mips | 5675 ++++++++++++++++++++++++++ tests/codegen/list.mips | 971 +++++ tests/codegen/primes.mips | 800 ++++ tests/codegen/print-cool.mips | 490 +++ tests/codegen/sort-list.mips | 1652 ++++++++ 13 files changed, 17570 insertions(+), 17 deletions(-) create mode 100644 tests/codegen/book_list.mips create mode 100644 tests/codegen/cells.mips create mode 100644 tests/codegen/complex.mips create mode 100644 tests/codegen/fib.mips create mode 100644 tests/codegen/graph.mips create mode 100644 tests/codegen/life.mips create mode 100644 tests/codegen/list.mips create mode 100644 tests/codegen/primes.mips create mode 100644 tests/codegen/print-cool.mips create mode 100644 tests/codegen/sort-list.mips diff --git a/src/code_generation/variables.py b/src/code_generation/variables.py index cf785f2e..b1a50a4f 100644 --- a/src/code_generation/variables.py +++ b/src/code_generation/variables.py @@ -9,6 +9,8 @@ def add_var(self, name): self.vars.append(name) def id(self, name): + if not name in self.stack: + self.add_var(name) return len(self.stack) - self.stack[name] + 1 def pop_var(self): diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index f6bd3bfd..b33e3ae7 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -31,13 +31,14 @@ def add_method(self, A, B, args): def get_index(self, c): # print('classes', self.classes.keys()) + if not c in self.attributes: + return 90000 return len(self.attributes[c]) + 1 def add_attr(self, claSS, args): if not claSS in self.attributes: self.attributes[claSS] = [] - for arg in args: - self.attributes[claSS].append(a) + self.attributes[claSS].append(args.name) def get_method_id(self, claSS, method): if claSS in self.methods.keys(): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index b004869f..8810eee0 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -104,11 +104,11 @@ def setClassConstructor(self, attributes): vars.add_temp() for node in attributes: - if node.value == None: + if node.expr == None: continue - self.visit(node.value, vars) + self.visit(node.expr, vars) p = vars.peek_last() - index = self.virtual_table.get_attributes_id(self.current_class, node.name.value) + index = self.virtual_table.get_attributes_id(self.current_class, node.id) self.code.append(VarToMemoIL(vars.id('self'), vars.id(p), index)) self.code.append(PushIL()) @@ -260,11 +260,11 @@ def visit(self, node, variables): self.code.append(PushIL()) p = variables.add_temp() - size = self.virtual_table.get_index(node.type.value) - self.code.append(AllocateIL(variables.id(p), size, node.type.value)) + size = self.virtual_table.get_index(node.type) + self.code.append(AllocateIL(variables.id(p), size, node.type)) self.code.append(VarToVarIL(variables.id(result), variables.id(p))) - self.code.append(DispatchParentIL(variables.id(dispatch), variables.id(p), node.type.value + '.Constructor')) + self.code.append(DispatchParentIL(variables.id(dispatch), variables.id(p), node.type + '.Constructor')) self.code.append(PopIL(2)) variables.pop_var() @@ -380,7 +380,8 @@ def visit(self, node, variables): @visitor.when(CaseNode) def visit(self, node, variables): - node.case_list.sort(key = lambda x : self.depth[x.type], reverse = True) + print(node.case_list) + # node.case_list.sort(key = lambda x : self.depth[x.typex], reverse = True) result = variables.add_temp() self.code.append(PushIL()) @@ -389,24 +390,24 @@ def visit(self, node, variables): p = variables.peek_last() labels = [] - for b in node.branches: + for b in node.case_list: labels.append(LabelIL('branch', self.getInt())) index = 0 - for b in node.branches: + for b in node.case_list: tmp = variables.add_temp() - self.code.apppend(PushIL()) + self.code.append(PushIL()) self.code.append(InheritIL(variables.id(p), b.typex, variables.id(tmp))) - self.code.append(IfJumpIL(variables.id(tmp), labels[i].label)) + self.code.append(IfJumpIL(variables.id(tmp), labels[index].label)) self.code.append(PopIL(1)) variables.pop_var() - i += 1 + index += 1 end_label = LabelIL('esac', self.getInt()) i = 0 - for b in node.branches: + for b in node.case_list: self.code.append(labels[i]) i += 1 variables.pop_var() @@ -443,7 +444,7 @@ def visit(self, node, variables): self.code.append(VarToMemoIL(variables.id('self'), variables.id(p), self.virtual_table.get_attributes_id(self.current_class, node.id))) @visitor.when(IsVoidNode) - def visit(self, node): + def visit(self, node, vars): pass #expression: complex->dispatch @@ -457,6 +458,7 @@ def visit(self, node, variables): index = self.virtual_table.get_method_id(node.obj, node.id) self.code.append(CommentIL('push object')) + # print('-------obj-------- ',node.obj) self.visit(node.obj, variables) name = variables.peek_last() @@ -522,7 +524,7 @@ def visit(self, node, variables): i += 1 self.visit(p, variables) - method = node.idx + '.' + node.obj.idx + method = node.id + '.' + node.obj.id self.code.append(DispatchParentIL(variables.id(result), variables.id(name), method)) diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips new file mode 100644 index 00000000..6e4055a9 --- /dev/null +++ b/tests/codegen/book_list.mips @@ -0,0 +1,1376 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "title: " +string_2: .asciiz "\n" +string_3: .asciiz "author: " +string_4: .asciiz "\n" +string_5: .asciiz "periodical: " +string_6: .asciiz "\n" +string_10: .asciiz "- dynamic type was Book -\n" +string_11: .asciiz "- dynamic type was Article -\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Book_INH: +.word IO_INH +Article_INH: +.word Book_INH +BookList_INH: +.word IO_INH +Cons_INH: +.word BookList_INH +Nil_INH: +.word BookList_INH +Main_INH: +.word Object_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Book_VT: +.word Book_INH +.word Book.initBook +.word Book.print +Article_VT: +.word Article_INH +.word Article.initArticle +.word Article.print +BookList_VT: +.word BookList_INH +.word BookList.isNil +.word BookList.cons +.word BookList.car +.word BookList.cdr +.word BookList.print_list +Cons_VT: +.word Cons_INH +.word Cons.isNil +.word Cons.init +.word Cons.car +.word Cons.cdr +.word Cons.print_list +Nil_VT: +.word Nil_INH +.word Nil.isNil +.word Nil.print_list +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Book.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Book.initBook: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, 4($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Book.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_1 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_2 +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_3 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_4 +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Article.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Article.initArticle: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -36($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Article.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#DispatchParent in place +#obj 2 offset 1 result print.self +la $v0, 1 +jal print.self +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_5 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 9 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_6 +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +BookList.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +BookList.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +BookList.cons: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +BookList.car: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Book_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Book.Constructor +la $v0, 1 +jal Book.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +BookList.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, BookList_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result BookList.Constructor +la $v0, 1 +jal BookList.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +BookList.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 4 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, 4($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.car: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Book +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_7 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Article +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_8 +addiu $sp, $sp, -4 +branch_7: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_10 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +branch_8: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_11 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, Nil_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Nil.Constructor +la $v0, 1 +jal Nil.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -32($sp) +sw $a0, 4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips new file mode 100644 index 00000000..bfcde165 --- /dev/null +++ b/tests/codegen/cells.mips @@ -0,0 +1,1395 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "\n" +string_4: .asciiz "X" +string_6: .asciiz "X" +string_8: .asciiz "X" +string_11: .asciiz "." +string_12: .asciiz "X" +string_14: .asciiz " X " +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +CellularAutomaton_INH: +.word IO_INH +Main_INH: +.word Object_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +CellularAutomaton_VT: +.word CellularAutomaton_INH +.word CellularAutomaton.init +.word CellularAutomaton.print +.word CellularAutomaton.num_cells +.word CellularAutomaton.cell +.word CellularAutomaton.cell_left_neighbor +.word CellularAutomaton.cell_right_neighbor +.word CellularAutomaton.cell_at_next_evolution +.word CellularAutomaton.evolve +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +CellularAutomaton.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_1 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 6 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.num_cells: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -16($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell_left_neighbor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_2 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 8 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_2 +_if_2: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 12 result CellularAutomaton.num_cells +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.num_cells +sw $a1, ($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 11 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_2: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell_right_neighbor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 9 result CellularAutomaton.num_cells +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.num_cells +sw $a1, ($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, 3 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_3 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 9 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_3 +_if_3: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 11 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_3: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell_at_next_evolution: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 12 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_4 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_5 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_5 +_if_5: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_5: +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 15 result CellularAutomaton.cell_left_neighbor +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell_left_neighbor +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_6 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_7 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_7 +_if_7: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_7: +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -28($sp) +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 16 result CellularAutomaton.cell_right_neighbor +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell_right_neighbor +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_8 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_9 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_9 +_if_9: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_9: +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -36($sp) +addiu $sp, $sp, -8 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -36($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_10 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_11 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -36($sp) +j _fi_10 +_if_10: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_12 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -40($sp) +_fi_10: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.evolve: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_13: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -48($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_13 +j _pool_13 +_body_13: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 17 result CellularAutomaton.cell_at_next_evolution +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell_at_next_evolution +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -56($sp) +sw $a0, -4($a1) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -60($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_13 +_pool_13: +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -48($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -48($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -12 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, CellularAutomaton_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result CellularAutomaton.Constructor +la $v0, 1 +jal CellularAutomaton.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_14 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -16($sp) +sw $a0, 4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_15: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_15 +j _pool_15 +_body_15: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -48($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -52($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +addiu $sp, $sp, -8 +j _loop_15 +_pool_15: +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +addiu $sp, $sp, -16 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips new file mode 100644 index 00000000..57a35e40 --- /dev/null +++ b/tests/codegen/complex.mips @@ -0,0 +1,870 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_2: .asciiz "=(\n" +string_3: .asciiz "=)\n" +string_5: .asciiz "+" +string_6: .asciiz "I" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Complex_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_VT: +.word Main_INH +.word Main.main +Complex_VT: +.word Complex_INH +.word Complex.init +.word Complex.print +.word Complex.reflect_0 +.word Complex.reflect_X +.word Complex.reflect_Y + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_1 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_2 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -8($sp) +j _fi_1 +_if_1: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_3 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -8($sp) +_fi_1: +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Complex.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Complex.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Complex.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_5 +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_6 +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_4 +_if_4: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 9 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_4: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Complex.reflect_0: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +lw $a0, 3 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +lw $a0, 3 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Complex.reflect_X: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +lw $a0, 3 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Complex.reflect_Y: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +lw $a0, 3 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips new file mode 100644 index 00000000..5f6b5b83 --- /dev/null +++ b/tests/codegen/fib.mips @@ -0,0 +1,564 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "Enter n to find nth fibonacci number!\n" +string_2: .asciiz "\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_VT: +.word Main_INH +.word Main.main +.word Main.fib + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_1 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 6 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 5 result Main.fib +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.fib +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 1 offset 4 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_2 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 4 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -8($sp) +sw $a0, -4($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.fib: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_3: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +li $a1, 1 +sub $a0, $a1, $a0 +sw $a0, -8($sp) +lw $a0, -4($sp) +bnez $a0, _body_3 +j _pool_3 +_body_3: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -48($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -44($sp) +sw $a0, -4($a1) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -44($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -52($sp) +sw $a0, -4($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -56($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -16 +addiu $sp, $sp, -8 +j _loop_3 +_pool_3: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips new file mode 100644 index 00000000..90ba2b86 --- /dev/null +++ b/tests/codegen/graph.mips @@ -0,0 +1,3755 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz " (" +string_2: .asciiz "," +string_3: .asciiz ")" +string_5: .asciiz "\n" +string_6: .asciiz "\n" +string_8: .asciiz "\n" +string_9: .asciiz "" +string_11: .asciiz "0" +string_13: .asciiz "1" +string_15: .asciiz "2" +string_17: .asciiz "3" +string_19: .asciiz "4" +string_21: .asciiz "5" +string_23: .asciiz "6" +string_25: .asciiz "7" +string_27: .asciiz "8" +string_29: .asciiz "9" +string_32: .asciiz "-" +string_34: .asciiz " " +string_37: .asciiz " " +string_39: .asciiz "," +string_42: .asciiz "" +string_43: .asciiz "" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Graph_INH: +.word Object_INH +Vertice_INH: +.word IO_INH +Edge_INH: +.word IO_INH +EList_INH: +.word IO_INH +ECons_INH: +.word EList_INH +VList_INH: +.word IO_INH +VCons_INH: +.word VList_INH +Parse_INH: +.word IO_INH +Main_INH: +.word Parse_INH +BoolOp_INH: +.word Object_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Graph_VT: +.word Graph_INH +.word Graph.add_vertice +.word Graph.print_E +.word Graph.print_V +Vertice_VT: +.word Vertice_INH +.word Vertice.outgoing +.word Vertice.number +.word Vertice.init +.word Vertice.add_out +.word Vertice.print +Edge_VT: +.word Edge_INH +.word Edge.init +.word Edge.print +EList_VT: +.word EList_INH +.word EList.isNil +.word EList.head +.word EList.tail +.word EList.cons +.word EList.append +.word EList.print +ECons_VT: +.word ECons_INH +.word ECons.isNil +.word ECons.head +.word ECons.tail +.word ECons.init +.word ECons.print +VList_VT: +.word VList_INH +.word VList.isNil +.word VList.head +.word VList.tail +.word VList.cons +.word VList.print +VCons_VT: +.word VCons_INH +.word VCons.isNil +.word VCons.head +.word VCons.tail +.word VCons.init +.word VCons.print +Parse_VT: +.word Parse_INH +.word Parse.read_input +.word Parse.parse_line +.word Parse.c2i +.word Parse.a2i +.word Parse.a2i_aux +Main_VT: +.word Main_INH +.word Main.main +BoolOp_VT: +.word BoolOp_INH +.word BoolOp.and +.word BoolOp.or + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Graph.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, VList_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result VList.Constructor +la $v0, 1 +jal VList.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -12($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, EList_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result EList.Constructor +la $v0, 1 +jal EList.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -16($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Graph.add_vertice: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 8($a1) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, 4($a1) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Graph.print_E: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -16($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Graph.print_V: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -16($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Vertice.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, EList_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result EList.Constructor +la $v0, 1 +jal EList.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -12($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Vertice.outgoing: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Vertice.number: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Vertice.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Vertice.add_out: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Vertice.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 6 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Edge.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Edge.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 4($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -32($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -36($sp) +sw $a0, 12($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -16 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Edge.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_1 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 6 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_2 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -48($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 12 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_3 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 14 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 16 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -52($sp) +addiu $sp, $sp, -24 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +EList.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +EList.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +EList.head: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +EList.tail: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +EList.cons: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, ECons_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result ECons.Constructor +la $v0, 1 +jal ECons.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +EList.append: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +bnez $a0, _if_4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 9 result EList.tail +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal EList.tail +sw $a1, ($sp) +addiu $sp, $sp, 0 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 10 result EList.head +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal EList.head +sw $a1, ($sp) +addiu $sp, $sp, 0 +#Dispatch in place +#obj 5 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_4 +_if_4: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_4: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +EList.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_5 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +ECons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +ECons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +ECons.head: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +ECons.tail: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +ECons.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, -4($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +ECons.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VList.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VList.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VList.head: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VList.tail: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VList.cons: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, VCons_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result VCons.Constructor +la $v0, 1 +jal VCons.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VList.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_6 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VCons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VCons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VCons.head: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VCons.tail: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VCons.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, -4($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +VCons.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Parse.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, BoolOp_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result BoolOp.Constructor +la $v0, 1 +jal BoolOp.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -12($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Parse.read_input: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_7: +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Args: 0 +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_8 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +li $a1, 1 +sub $a0, $a1, $a0 +sw $a0, -8($sp) +#Args: 1 +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -60($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_9 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +li $a1, 1 +sub $a0, $a1, $a0 +sw $a0, -8($sp) +#Dispatch in place +#obj 6 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +bnez $a0, _body_7 +j _pool_7 +_body_7: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 17 result Parse.parse_line +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Parse.parse_line +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 16 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $a0, -4($sp) +lw $a1, -64($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_7 +_pool_7: +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Parse.parse_line: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_10: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +li $a1, 1 +sub $a0, $a1, $a0 +sw $a0, -8($sp) +lw $a0, -4($sp) +bnez $a0, _body_10 +j _pool_10 +_body_10: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 16 +syscall +sw $v0, -4($sp) +la $a1, Edge_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Edge.Constructor +la $v0, 1 +jal Edge.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -80($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -80($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 2 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -84($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 4 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -16 +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -8 +j _loop_10 +_pool_10: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Parse.c2i: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_11 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_12 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_13 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_14 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_15 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_16 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_17 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_18 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_19 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_20 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_21 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_22 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -68($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_23 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_24 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -76($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_25 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_26 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_27 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_28 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -92($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_29 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_30 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -104($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 26 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_30 +_if_30: +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_30: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_28 +_if_28: +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_28: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_26 +_if_26: +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_26: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +j _fi_24 +_if_24: +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -32($sp) +_fi_24: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +j _fi_22 +_if_22: +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_22: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +j _fi_20 +_if_20: +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -40($sp) +_fi_20: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -40($sp) +j _fi_18 +_if_18: +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -44($sp) +_fi_18: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -44($sp) +j _fi_16 +_if_16: +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -48($sp) +_fi_16: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -48($sp) +j _fi_14 +_if_14: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -52($sp) +_fi_14: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -52($sp) +j _fi_12 +_if_12: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -56($sp) +_fi_12: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Parse.a2i: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_31 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_32 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_33 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_34 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_35 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 12 result Parse.a2i_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Parse.a2i_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_35 +_if_35: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -72($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 3 offset 14 result Parse.a2i +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Parse.a2i +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_35: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_33 +_if_33: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -76($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 3 offset 15 result Parse.a2i_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Parse.a2i_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -12($sp) +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_33: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +j _fi_31 +_if_31: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -40($sp) +_fi_31: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Parse.a2i_aux: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_36: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_36 +j _pool_36 +_body_36: +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_37 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_38 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -76($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_39 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_40 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -88($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -92($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -96($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -104($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 3 offset 24 result Parse.c2i +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Parse.c2i +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, 3 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -84($sp) +sw $a0, -4($a1) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -92($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -88($sp) +sw $a0, -4($a1) +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -100($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -104($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_41 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_42 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_41 +_if_41: +#Assignment +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_43 +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -104($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_41: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_40 +_if_40: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -92($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -104($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -112($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -116($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +lw $a1, -92($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -96($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -96($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_40: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_38 +_if_38: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -88($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -100($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -108($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -112($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +lw $a1, -88($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -92($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -92($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_38: +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_36 +_pool_36: +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +lw $a1, -8($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +BoolOp.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +BoolOp.and: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +bnez $a0, _if_44 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_44 +_if_44: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_44: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +BoolOp.or: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +bnez $a0, _if_45 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_45 +_if_45: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_45: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips new file mode 100644 index 00000000..0769a746 --- /dev/null +++ b/tests/codegen/life.mips @@ -0,0 +1,5675 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_7: .asciiz "\n" +string_9: .asciiz "\n" +string_10: .asciiz "\n" +string_12: .asciiz " " +string_14: .asciiz " " +string_16: .asciiz " " +string_18: .asciiz " " +string_21: .asciiz " " +string_22: .asciiz " " +string_25: .asciiz " " +string_26: .asciiz " " +string_29: .asciiz " " +string_30: .asciiz " " +string_33: .asciiz " " +string_34: .asciiz " " +string_37: .asciiz " " +string_38: .asciiz " " +string_39: .asciiz "X" +string_41: .asciiz "X" +string_43: .asciiz "X" +string_45: .asciiz "X" +string_47: .asciiz "X" +string_49: .asciiz "X" +string_51: .asciiz "X" +string_53: .asciiz "X" +string_57: .asciiz "-" +string_58: .asciiz "X" +string_60: .asciiz "-" +string_61: .asciiz "X" +string_62: .asciiz "X" +string_64: .asciiz "\nPlease chose a number:\n" +string_65: .asciiz "\t1: A cross\n" +string_66: .asciiz "\t2: A slash from the upper left to lower right\n" +string_67: .asciiz "\t3: A slash from the upper right to lower left\n" +string_68: .asciiz "\t4: An X\n" +string_69: .asciiz "\t5: A greater than sign \n" +string_70: .asciiz "\t6: A less than sign\n" +string_71: .asciiz "\t7: Two greater than signs\n" +string_72: .asciiz "\t8: Two less than signs\n" +string_73: .asciiz "\t9: A 'V'\n" +string_74: .asciiz "\t10: An inverse 'V'\n" +string_75: .asciiz "\t11: Numbers 9 and 10 combined\n" +string_76: .asciiz "\t12: A full grid\n" +string_77: .asciiz "\t13: A 'T'\n" +string_78: .asciiz "\t14: A plus '+'\n" +string_79: .asciiz "\t15: A 'W'\n" +string_80: .asciiz "\t16: An 'M'\n" +string_81: .asciiz "\t17: An 'E'\n" +string_82: .asciiz "\t18: A '3'\n" +string_83: .asciiz "\t19: An 'O'\n" +string_84: .asciiz "\t20: An '8'\n" +string_85: .asciiz "\t21: An 'S'\n" +string_86: .asciiz "Your choice => " +string_87: .asciiz "\n" +string_109: .asciiz " " +string_110: .asciiz " XXXX X XX X XXXX " +string_111: .asciiz " XX X XX X XX X XX X XX " +string_112: .asciiz " XX X XX X XX " +string_113: .asciiz "XXX X X X X XXXX " +string_114: .asciiz "XXXXX X XXXXX X XXXX" +string_115: .asciiz " X X X X X X X" +string_116: .asciiz "X X X X X X X " +string_117: .asciiz " X X XXXXX X X " +string_118: .asciiz "XXXXX X X X X " +string_119: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" +string_120: .asciiz "X X X X X X X X" +string_121: .asciiz " X X X X X" +string_122: .asciiz "X X X X X " +string_123: .asciiz " X XX X X X " +string_124: .asciiz "X X X XX X " +string_125: .asciiz " X X X X X" +string_126: .asciiz "X X X X X " +string_127: .asciiz "X X X X X X X X X" +string_128: .asciiz "X X X X X" +string_129: .asciiz " X X X X X " +string_130: .asciiz " XX XXXX XXXX XX " +string_131: .asciiz "Would you like to continue with the next generation? \n" +string_132: .asciiz "Please use lowercase y or n for your answer [y]: " +string_133: .asciiz "\n" +string_134: .asciiz "n" +string_136: .asciiz "\n\n" +string_137: .asciiz "Would you like to choose a background pattern? \n" +string_138: .asciiz "Please use lowercase y or n for your answer [n]: " +string_139: .asciiz "y" +string_141: .asciiz "Welcome to the Game of Life.\n" +string_142: .asciiz "There are many initial states to choose from. \n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Board_INH: +.word IO_INH +CellularAutomaton_INH: +.word Board_INH +Main_INH: +.word CellularAutomaton_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Board_VT: +.word Board_INH +.word Board.size_of_board +.word Board.board_init +CellularAutomaton_VT: +.word CellularAutomaton_INH +.word CellularAutomaton.init +.word CellularAutomaton.print +.word CellularAutomaton.num_cells +.word CellularAutomaton.cell +.word CellularAutomaton.north +.word CellularAutomaton.south +.word CellularAutomaton.east +.word CellularAutomaton.west +.word CellularAutomaton.northwest +.word CellularAutomaton.northeast +.word CellularAutomaton.southeast +.word CellularAutomaton.southwest +.word CellularAutomaton.neighbors +.word CellularAutomaton.cell_at_next_evolution +.word CellularAutomaton.evolve +.word CellularAutomaton.option +.word CellularAutomaton.prompt +.word CellularAutomaton.prompt2 +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Board.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Board.size_of_board: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Board.board_init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 15 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_1 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 16 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_2 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 20 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_3 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -60($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 21 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 25 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_5 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -76($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 28 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_6 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -80($sp) +sw $a0, 4($a1) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -84($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -88($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -88($sp) +sw $a0, 12($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_6 +_if_6: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -84($sp) +sw $a0, 4($a1) +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -88($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -92($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -92($sp) +sw $a0, 12($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_6: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_5 +_if_5: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -80($sp) +sw $a0, 4($a1) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -84($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -88($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -88($sp) +sw $a0, 12($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_5: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_4 +_if_4: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -76($sp) +sw $a0, 4($a1) +#Assignment +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -80($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -84($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -84($sp) +sw $a0, 12($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_4: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_3 +_if_3: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -72($sp) +sw $a0, 4($a1) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -76($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -80($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -80($sp) +sw $a0, 12($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_3: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +j _fi_2 +_if_2: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -68($sp) +sw $a0, 4($a1) +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -72($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -76($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -76($sp) +sw $a0, 12($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -32($sp) +_fi_2: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +j _fi_1 +_if_1: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -64($sp) +sw $a0, 4($a1) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -68($sp) +sw $a0, 8($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -72($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -72($sp) +sw $a0, 12($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_1: +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -36($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 4($a1) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_7 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_8: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -48($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_8 +j _pool_8 +_body_8: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -72($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 3 offset 15 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_9 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 17 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -72($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -76($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -68($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -24($sp) +addiu $sp, $sp, -12 +addiu $sp, $sp, -8 +j _loop_8 +_pool_8: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_10 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 15 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -36($sp) +addiu $sp, $sp, -16 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.num_cells: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -16($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_11 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_11 +_if_11: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_12 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_11: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.north: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_13 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 8 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_13 +_if_13: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_14 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_13: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.south: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_15 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 8 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_15 +_if_15: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_16 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_15: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.east: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +div $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_17 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 8 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_17 +_if_17: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_18 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_17: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.west: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_19 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +div $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_20 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 10 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_20 +_if_20: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_21 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_20: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_19 +_if_19: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_22 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_19: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.northwest: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_23 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +div $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_24 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 10 result CellularAutomaton.north +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.north +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_24 +_if_24: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_25 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_24: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_23 +_if_23: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_26 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_23: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.northeast: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_27 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +div $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_28 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 10 result CellularAutomaton.north +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.north +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_28 +_if_28: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_29 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_28: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_27 +_if_27: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_30 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_27: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.southeast: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_31 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +div $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_32 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 10 result CellularAutomaton.south +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.south +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_32 +_if_32: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_33 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_32: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_31 +_if_31: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_34 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_31: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.southwest: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_35 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +div $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_36 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 3 offset 10 result CellularAutomaton.south +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.south +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_36 +_if_36: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_37 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_36: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_35 +_if_35: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_38 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_35: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.neighbors: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 16 result CellularAutomaton.north +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.north +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_39 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_40 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_40 +_if_40: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_40: +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -72($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -72($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 19 result CellularAutomaton.south +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.south +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_41 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_42 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_42 +_if_42: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_42: +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -28($sp) +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -76($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -76($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 20 result CellularAutomaton.east +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.east +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_43 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_44 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_44 +_if_44: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_44: +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -36($sp) +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -80($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -80($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 21 result CellularAutomaton.west +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.west +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_45 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_46 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_46 +_if_46: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_46: +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -44($sp) +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 22 result CellularAutomaton.northeast +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.northeast +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_47 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_48 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_48 +_if_48: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_48: +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -52($sp) +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -88($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -88($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 23 result CellularAutomaton.northwest +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.northwest +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_49 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_50 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_50 +_if_50: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_50: +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -60($sp) +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -92($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -92($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 24 result CellularAutomaton.southeast +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.southeast +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_51 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_52 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_52 +_if_52: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_52: +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -68($sp) +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -96($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -96($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 25 result CellularAutomaton.southwest +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.southwest +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_53 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_54 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_54 +_if_54: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_54: +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -76($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -72($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell_at_next_evolution: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 8 result CellularAutomaton.neighbors +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.neighbors +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_55 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 11 result CellularAutomaton.neighbors +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.neighbors +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_56 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_57 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_56 +_if_56: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 15 result CellularAutomaton.cell +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell +sw $a1, ($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_58 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_59 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_60 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_59 +_if_59: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_61 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_59: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_56: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +j _fi_55 +_if_55: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_62 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_55: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.evolve: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_63: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -48($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_63 +j _pool_63 +_body_63: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 17 result CellularAutomaton.cell_at_next_evolution +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal CellularAutomaton.cell_at_next_evolution +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -56($sp) +sw $a0, -4($a1) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -60($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_63 +_pool_63: +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -48($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -48($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -12 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.option: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_64 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 9 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_65 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 11 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_66 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 13 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_67 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 15 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_68 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 17 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -72($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_69 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 19 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -80($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_70 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 21 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -88($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_71 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 23 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -96($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_72 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 25 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -104($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_73 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 27 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -112($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_74 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 29 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -120($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_75 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 31 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -128($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_76 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 33 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -136($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_77 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 35 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -144($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_78 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 37 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -152($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_79 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 39 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -160($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_80 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 41 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -168($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_81 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 43 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -176($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_82 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 45 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -184($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_83 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 47 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -192($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_84 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 49 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -200($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_85 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 51 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -208($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_86 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 53 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -216($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 54 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $a0, -4($sp) +lw $a1, -216($sp) +sw $a0, -4($a1) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -224($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_87 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 57 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -236($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_88 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -244($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_89 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -252($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_90 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -260($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_91 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -268($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_92 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -276($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_93 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -284($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_94 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -292($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_95 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -300($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_96 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -308($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_97 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -316($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 11 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_98 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -324($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 12 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_99 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -332($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 13 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_100 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -340($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 14 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_101 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -348($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 15 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_102 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -356($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 16 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_103 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -364($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 17 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_104 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -372($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 18 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_105 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -380($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 19 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_106 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -388($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 20 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_107 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -396($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 21 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_108 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_109 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_108 +_if_108: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_110 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_108: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_107 +_if_107: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_111 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_107: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -20($sp) +j _fi_106 +_if_106: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_112 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -24($sp) +_fi_106: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_105 +_if_105: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_113 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_105: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +j _fi_104 +_if_104: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_114 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -32($sp) +_fi_104: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +j _fi_103 +_if_103: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_115 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_103: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +j _fi_102 +_if_102: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_116 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -40($sp) +_fi_102: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -40($sp) +j _fi_101 +_if_101: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_117 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -44($sp) +_fi_101: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -44($sp) +j _fi_100 +_if_100: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_118 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -48($sp) +_fi_100: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -48($sp) +j _fi_99 +_if_99: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_119 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -52($sp) +_fi_99: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -52($sp) +j _fi_98 +_if_98: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_120 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -56($sp) +_fi_98: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -56($sp) +j _fi_97 +_if_97: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_121 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -60($sp) +_fi_97: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -60($sp) +j _fi_96 +_if_96: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_122 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -64($sp) +_fi_96: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -64($sp) +j _fi_95 +_if_95: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_123 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -68($sp) +_fi_95: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -68($sp) +j _fi_94 +_if_94: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_124 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -72($sp) +_fi_94: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -72($sp) +j _fi_93 +_if_93: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_125 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -76($sp) +_fi_93: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -76($sp) +j _fi_92 +_if_92: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_126 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -80($sp) +_fi_92: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -80($sp) +j _fi_91 +_if_91: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_127 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -84($sp) +_fi_91: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -84($sp) +j _fi_90 +_if_90: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_128 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -88($sp) +_fi_90: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -88($sp) +j _fi_89 +_if_89: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_129 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -92($sp) +_fi_89: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -92($sp) +j _fi_88 +_if_88: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_130 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -96($sp) +_fi_88: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -292($sp) +addiu $sp, $sp, -104 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.prompt: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_131 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 9 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_132 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 11 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 12 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $a0, -4($sp) +lw $a1, -48($sp) +sw $a0, -4($a1) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_133 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 15 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_134 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_135 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_135 +_if_135: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_135: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -44($sp) +addiu $sp, $sp, -20 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.prompt2: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_136 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_137 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_138 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 12 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 13 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $a0, -4($sp) +lw $a1, -52($sp) +sw $a0, -4($a1) +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_139 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_140 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_140 +_if_140: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_140: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -44($sp) +addiu $sp, $sp, -20 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_141 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_142 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_143: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 10 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +bnez $a0, _body_143 +j _pool_143 +_body_143: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -44($sp) +sw $a0, -4($a1) +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 12 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +lw $a1, -44($sp) +sw $a0, -4($a1) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, CellularAutomaton_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result CellularAutomaton.Constructor +la $v0, 1 +jal CellularAutomaton.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -48($sp) +sw $a0, 4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_144: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -60($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +bnez $a0, _body_144 +j _pool_144 +_body_144: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 17 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +bnez $a0, _if_145 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -68($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -8($sp) +j _fi_145 +_if_145: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -80($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -84($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +_fi_145: +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_144 +_pool_144: +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -20 +addiu $sp, $sp, -8 +j _loop_143 +_pool_143: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -4($sp) +addiu $sp, $sp, -16 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips new file mode 100644 index 00000000..98f9f81f --- /dev/null +++ b/tests/codegen/list.mips @@ -0,0 +1,971 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_2: .asciiz " " +string_3: .asciiz "\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +List_INH: +.word Object_INH +Cons_INH: +.word List_INH +Main_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +List_VT: +.word List_INH +.word List.isNil +.word List.head +.word List.tail +.word List.cons +Cons_VT: +.word Cons_INH +.word Cons.isNil +.word Cons.head +.word Cons.tail +.word Cons.init +Main_VT: +.word Main_INH +.word Main.print_list +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +List.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.head: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.tail: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.cons: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.head: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.tail: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, 4($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +bnez $a0, _if_1 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_2 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 8 result Main.print_list +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print_list +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -4($sp) +addiu $sp, $sp, -12 +lw $a0, -8($sp) +sw $a0, -4($sp) +j _fi_1 +_if_1: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_3 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 6 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -4($sp) +_fi_1: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, List_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result List.Constructor +la $v0, 1 +jal List.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -16($sp) +sw $a0, 4($a1) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_4: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +li $a1, 1 +sub $a0, $a1, $a0 +sw $a0, -8($sp) +lw $a0, -4($sp) +bnez $a0, _body_4 +j _pool_4 +_body_4: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 10 result Main.print_list +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print_list +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +lw $a1, -36($sp) +sw $a0, 4($a1) +lw $a0, -4($sp) +sw $a0, -8($sp) +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_4 +_pool_4: +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips new file mode 100644 index 00000000..26e07d2a --- /dev/null +++ b/tests/codegen/primes.mips @@ -0,0 +1,800 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "2 is trivially prime.\n" +string_7: .asciiz " is prime.\n" +string_9: .asciiz "continue" +string_10: .asciiz "halt" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 24 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_1 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -8($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -8($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -12($sp) +sw $a0, 8($a1) +#Integer +li $a0, 500 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -16($sp) +sw $a0, 16($a1) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_2: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +bnez $a0, _body_2 +j _pool_2 +_body_2: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -32($sp) +sw $a0, 8($a1) +#Assignment +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -36($sp) +sw $a0, 12($a1) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_3: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -60($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -72($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -80($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -84($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +div $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_5 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_5 +_if_5: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_5: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_4 +_if_4: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_4: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_3 +j _pool_3 +_body_3: +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -60($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -56($sp) +sw $a0, 12($a1) +addiu $sp, $sp, -8 +j _loop_3 +_pool_3: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -60($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -72($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_6 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_6 +_if_6: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -68($sp) +sw $a0, 4($a1) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -76($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 19 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_7 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 19 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -8($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -8($sp) +_fi_6: +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -60($sp) +lw $a1, 16($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_8 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_9 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_8 +_if_8: +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_10 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_8: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +addiu $sp, $sp, -20 +addiu $sp, $sp, -8 +j _loop_2 +_pool_2: +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 20($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips new file mode 100644 index 00000000..67d7d3d3 --- /dev/null +++ b/tests/codegen/print-cool.mips @@ -0,0 +1,490 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, Object_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Object.Constructor +la $v0, 1 +jal Object.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 2 offset 6 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Dispatch in place +#obj 1 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 1 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_1 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 4 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -8($sp) +sw $a0, -4($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips new file mode 100644 index 00000000..7707e438 --- /dev/null +++ b/tests/codegen/sort-list.mips @@ -0,0 +1,1652 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_2: .asciiz "\n" +string_4: .asciiz "How many numbers to sort? " +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +List_INH: +.word IO_INH +Cons_INH: +.word List_INH +Nil_INH: +.word List_INH +Main_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +List_VT: +.word List_INH +.word List.isNil +.word List.cons +.word List.car +.word List.cdr +.word List.rev +.word List.sort +.word List.insert +.word List.rcons +.word List.print_list +Cons_VT: +.word Cons_INH +.word Cons.isNil +.word Cons.init +.word Cons.car +.word Cons.cdr +.word Cons.rev +.word Cons.sort +.word Cons.insert +.word Cons.rcons +.word Cons.print_list +Nil_VT: +.word Nil_INH +.word Nil.isNil +.word Nil.rev +.word Nil.sort +.word Nil.insert +.word Nil.rcons +.word Nil.print_list +Main_VT: +.word Main_INH +.word Main.iota +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +List.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.cons: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.car: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 360000 +syscall +sw $v0, -4($sp) +la $a1, Int_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Int.Constructor +la $v0, 1 +jal Int.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, List_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result List.Constructor +la $v0, 1 +jal List.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.rev: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 4 result List.cdr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal List.cdr +sw $a1, ($sp) +addiu $sp, $sp, 0 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.sort: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 4 result List.cdr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal List.cdr +sw $a1, ($sp) +addiu $sp, $sp, 0 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.insert: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result List.cdr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal List.cdr +sw $a1, ($sp) +addiu $sp, $sp, 0 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.rcons: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result List.cdr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal List.cdr +sw $a1, ($sp) +addiu $sp, $sp, 0 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +List.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 4 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.init: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, 4($a1) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.car: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.rev: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.sort: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -20($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.insert: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_1 +_if_1: +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_1: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.rcons: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Cons.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 6 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_2 +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -24($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.rev: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -12($sp) +sw $a0, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.sort: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -12($sp) +sw $a0, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.insert: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 6 result Nil.rcons +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Nil.rcons +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.rcons: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Nil.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.iota: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, Nil_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Nil.Constructor +la $v0, 1 +jal Nil.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 4($a1) +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_3: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_3 +j _pool_3 +_body_3: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +lw $a1, -44($sp) +sw $a0, 4($a1) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -48($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_3 +_pool_3: +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_4 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 8 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 7 result Main.iota +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.iota +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 1 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -4($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall From 4370228326e623c1b4ed87c6063a4aa2bf9eb80b Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Sat, 28 Nov 2020 10:35:44 -0500 Subject: [PATCH 094/140] main.py fixxes for tests PASSING --- src/code_generation/virtual_table.py | 2 +- src/main.py | 67 +++++++++++++--------------- src/visitors/to_mips.py | 4 +- src/visitors/transpilator.py | 8 ++-- 4 files changed, 37 insertions(+), 44 deletions(-) diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index b33e3ae7..63a57c05 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -46,7 +46,7 @@ def get_method_id(self, claSS, method): b, args = self.methods[claSS][i] if b == method: return claSS + '.' + method - print('VT: class: {} method: {}'.format(claSS, method)) + # print('VT: class: {} method: {}'.format(claSS, method)) return -1 def get_attributes(self, claSS): diff --git a/src/main.py b/src/main.py index 33338726..ea4a4c59 100644 --- a/src/main.py +++ b/src/main.py @@ -25,47 +25,40 @@ def main(): pipeline.submit_state(TypeChecker('TChecker')) #temporal - ast, context, scope = pipeline.run_pipeline(program) - + try: + ast, context, scope = pipeline.run_pipeline(program) + except Exception as e: + pass + pipeline.report_errors() if pipeline.pipeline_errors: exit(1) - # print(ast) - # print('Done ast') - # for t in context.types: - # print(t) - # print('methods: ', context.types[t]) - # print('Done transpilator') - # print(len(cv.code)) - - # for c in cv.code: - # print(str(c)) - - cv = codeVisitor(context) - cv.visit(ast) - - mips = MIPS(cv.code, cv.data) - code = mips.start() - - for c in cv.data: - print(str(c)) - for c in cv.code: - print(str(c)) - - path = program[:-1] - path = path[:-1] - path += 'mips' - print(path) - f = open(path, "w+") - - for line in code: - f.write(line) - - f.close() - - # except: - # pass + else: + cv = codeVisitor(context) + cv.visit(ast) + + mips = MIPS(cv.code, cv.data) + code = mips.start() + + # for c in cv.data: + # print(str(c)) + # for c in cv.code: + # print(str(c)) + + path = program[:-1] + path = path[:-1] + path += 'mips' + # print(path) + f = open(path, "w+") + + for line in code: + f.write(line) + + f.close() + + # except: + # pass diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index be52de21..69d99c60 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -46,7 +46,7 @@ def start(self): # self.code.append("syscall\n") # self.code.append('j Main.main\n') - print('code_len', len(self.code)) + # print('code_len', len(self.code)) for c in self.il_code: # print(str(c)) self.visit(c) @@ -54,7 +54,7 @@ def start(self): self.code += "li $v0, 10\n" self.code += "syscall\n" - print('code_len', len(self.code)) + # print('code_len', len(self.code)) return self.code diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 8810eee0..8c3c5dc1 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -157,7 +157,7 @@ def visit(self, node): def visit(self, node): # print('ClassDeclarationNode') self.current_class = node.id - print('--current_class {}\n'.format(node.id)) + # print('--current_class {}\n'.format(node.id)) attributes = [] for f in node.features: if type(f) == AttrDeclarationNode: @@ -380,7 +380,7 @@ def visit(self, node, variables): @visitor.when(CaseNode) def visit(self, node, variables): - print(node.case_list) + # print(node.case_list) # node.case_list.sort(key = lambda x : self.depth[x.typex], reverse = True) result = variables.add_temp() @@ -454,7 +454,7 @@ def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) - print('----------node {}---------'.format(node)) + # print('----------node {}---------'.format(node)) index = self.virtual_table.get_method_id(node.obj, node.id) self.code.append(CommentIL('push object')) @@ -482,7 +482,7 @@ def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) - print('----------node {}---------'.format(node)) + # print('----------node {}---------'.format(node)) index = self.virtual_table.get_method_id(self.current_class, node.id) if self.current_class != 'Main': From 3ec1c7edb0e9cc70ac062f738464fb2b820c5ad7 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sat, 28 Nov 2020 11:34:21 -0500 Subject: [PATCH 095/140] resolving case node problem --- src/main.py | 2 +- src/visitors/var_collector.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.py b/src/main.py index ea4a4c59..0eb8cf5b 100644 --- a/src/main.py +++ b/src/main.py @@ -27,7 +27,7 @@ def main(): #temporal try: ast, context, scope = pipeline.run_pipeline(program) - except Exception as e: + except: pass pipeline.report_errors() diff --git a/src/visitors/var_collector.py b/src/visitors/var_collector.py index 4fcf90ce..68aebb02 100644 --- a/src/visitors/var_collector.py +++ b/src/visitors/var_collector.py @@ -141,8 +141,8 @@ def visit(self, node, scope): self.errors.append(CTypeError( node.row, node.col, e.text)) typex = ErrorType() - self.visit(node.expr, scope) scope.define_variable(node.id, typex) + self.visit(node.expr, scope) @visitor.when(BinaryOperationNode) def visit(self, node, scope): From ce6debf3d8d15b8fb49ba7dd5460f7b947f5d09f Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Sat, 28 Nov 2020 11:34:28 -0500 Subject: [PATCH 096/140] some corrections in virtual table for inheritance methods display in mips --- src/code_generation/virtual_table.py | 9 +- tests/codegen/atoi.mips | 90 ++-- tests/codegen/book_list.mips | 68 +-- tests/codegen/cells.mips | 28 +- tests/codegen/complex.mips | 34 +- tests/codegen/fib.mips | 20 +- tests/codegen/graph.mips | 158 +++--- tests/codegen/hello_world.mips | 4 +- tests/codegen/life.mips | 192 +++---- tests/codegen/list.mips | 26 +- tests/codegen/palindrome.mips | 750 +++++++++++++++++++++++++++ tests/codegen/primes.mips | 20 +- tests/codegen/print-cool.mips | 36 +- tests/codegen/sort-list.mips | 44 +- 14 files changed, 1117 insertions(+), 362 deletions(-) create mode 100644 tests/codegen/palindrome.mips diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index 63a57c05..10a7fa15 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -40,13 +40,18 @@ def add_attr(self, claSS, args): self.attributes[claSS] = [] self.attributes[claSS].append(args.name) - def get_method_id(self, claSS, method): + def get_method_id(self, claSS, method, rec = False): if claSS in self.methods.keys(): for i in range(len(self.methods[claSS])): b, args = self.methods[claSS][i] if b == method: return claSS + '.' + method - # print('VT: class: {} method: {}'.format(claSS, method)) + built_in = ['Object','Int', 'IO', 'Bool', 'String'] + if not rec: + for t in built_in: + ret = self.get_method_id(t, method, rec=True) + if ret != -1: + return ret return -1 def get_attributes(self, claSS): diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index db6a844a..6fb9fe8f 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -638,13 +638,13 @@ addiu $sp, $sp, 4 lw $a0, -104($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 26 result -1 +#obj 2 offset 26 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 #Integer li $a0, 0 @@ -1036,13 +1036,13 @@ addiu $sp, $sp, 4 lw $a0, -104($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 26 result -1 +#obj 2 offset 26 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 #loading label li $a0, 0 @@ -1220,13 +1220,13 @@ addiu $sp, $sp, 4 lw $a0, -24($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 #Integer li $a0, 0 @@ -1268,13 +1268,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #loading label li $a0, 0 @@ -1318,13 +1318,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #loading label li $a0, 0 @@ -1410,13 +1410,13 @@ addiu $sp, $sp, 4 lw $a0, -72($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 #Integer li $a0, 1 @@ -1428,13 +1428,13 @@ sub $a0, $a0, $a1 sw $a0, -12($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place #obj 3 offset 14 result A2I.a2i_aux @@ -1499,13 +1499,13 @@ addiu $sp, $sp, 4 lw $a0, -76($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 #Integer li $a0, 1 @@ -1517,13 +1517,13 @@ sub $a0, $a0, $a1 sw $a0, -12($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place #obj 3 offset 15 result A2I.a2i_aux @@ -1672,13 +1672,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place #obj 3 offset 18 result A2I.c2i @@ -1861,13 +1861,13 @@ jal A2I.i2a_aux sw $a1, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 5 offset 4 result -1 +#obj 5 offset 4 result String.concat move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.concat +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -4($sp) sw $a0, -20($sp) @@ -2039,13 +2039,13 @@ jal A2I.i2c sw $a1, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 5 offset 3 result -1 +#obj 5 offset 3 result String.concat move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.concat +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, ($sp) sw $a0, ($sp) @@ -2103,13 +2103,13 @@ lw $t0, -28($sp) lw $a1, -4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 2 offset 7 result -1 +#obj 2 offset 7 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -2123,13 +2123,13 @@ addiu $sp, $sp, 4 la $a0, string_54 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 7 result -1 +#obj 2 offset 7 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -2143,13 +2143,13 @@ lw $t0, -28($sp) lw $a1, -4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 2 offset 7 result -1 +#obj 2 offset 7 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -2163,13 +2163,13 @@ addiu $sp, $sp, 4 la $a0, string_55 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 7 result -1 +#obj 2 offset 7 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -4($sp) sw $a0, -4($sp) diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index 6e4055a9..b7270f7e 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -439,13 +439,13 @@ addiu $sp, $sp, 4 la $a0, string_1 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 8 result -1 +#obj 3 offset 8 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Args: 0 li $a0, 0 @@ -455,13 +455,13 @@ lw $t0, -32($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 2 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Args: 0 #loading label @@ -471,13 +471,13 @@ addiu $sp, $sp, 4 la $a0, string_2 sw $a0, -4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 2 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Point-Dispatch li $a0, 0 @@ -507,13 +507,13 @@ addiu $sp, $sp, 4 la $a0, string_3 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 10 result -1 +#obj 3 offset 10 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Args: 0 li $a0, 0 @@ -523,13 +523,13 @@ lw $t0, -40($sp) lw $a1, 8($t0) sw $a1, -4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 2 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Args: 0 #loading label @@ -539,13 +539,13 @@ addiu $sp, $sp, 4 la $a0, string_4 sw $a0, -4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 2 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 li $a0, 0 sw $a0, ($sp) @@ -681,13 +681,13 @@ addiu $sp, $sp, 4 la $a0, string_5 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 9 result -1 +#obj 3 offset 9 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Args: 0 li $a0, 0 @@ -697,13 +697,13 @@ lw $t0, -36($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 2 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Args: 0 #loading label @@ -713,13 +713,13 @@ addiu $sp, $sp, 4 la $a0, string_6 sw $a0, -4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 2 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 li $a0, 0 sw $a0, ($sp) @@ -763,13 +763,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 1 sw $a0, ($sp) @@ -847,13 +847,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -904,13 +904,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -957,13 +957,13 @@ addiu $sp, $sp, 4 lw $a0, -16($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 4 result -1 +#obj 2 offset 4 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 lw $v0, -4($sp) addiu $sp, $sp, -4 @@ -1135,13 +1135,13 @@ addiu $sp, $sp, 4 la $a0, string_10 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 10 result -1 +#obj 3 offset 10 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 lw $a0, -4($sp) sw $a0, -16($sp) @@ -1171,13 +1171,13 @@ addiu $sp, $sp, 4 la $a0, string_11 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 10 result -1 +#obj 3 offset 10 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 lw $a0, -4($sp) sw $a0, -16($sp) diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index bfcde165..fd0e5b2f 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -407,22 +407,22 @@ addiu $sp, $sp, 4 la $a0, string_1 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 2 result -1 +#obj 3 offset 2 result String.concat move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.concat +sw $a1, ($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 3 offset 6 result -1 +#obj 3 offset 6 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) @@ -452,13 +452,13 @@ lw $t0, -16($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 lw $v0, -4($sp) addiu $sp, $sp, -4 @@ -491,13 +491,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 lw $v0, -4($sp) addiu $sp, $sp, -4 @@ -1110,13 +1110,13 @@ jal CellularAutomaton.cell_at_next_evolution sw $a1, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.concat move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.concat +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -4($sp) lw $a1, -56($sp) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 57a35e40..a22959cd 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -423,13 +423,13 @@ addiu $sp, $sp, 4 la $a0, string_2 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 8 result -1 +#obj 2 offset 8 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -4($sp) sw $a0, -8($sp) @@ -447,13 +447,13 @@ addiu $sp, $sp, 4 la $a0, string_3 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 8 result -1 +#obj 2 offset 8 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -4($sp) sw $a0, -8($sp) @@ -599,13 +599,13 @@ lw $t0, -40($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 3 offset 10 result -1 +#obj 3 offset 10 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -4 #Args: 0 #loading label @@ -615,13 +615,13 @@ addiu $sp, $sp, 4 la $a0, string_5 sw $a0, -4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 2 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Args: 0 li $a0, 0 @@ -631,13 +631,13 @@ lw $t0, -36($sp) lw $a1, 8($t0) sw $a1, -4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 2 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -8 #Args: 0 #loading label @@ -647,13 +647,13 @@ addiu $sp, $sp, 4 la $a0, string_6 sw $a0, -4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 2 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -4($sp) sw $a0, -16($sp) @@ -677,13 +677,13 @@ lw $t0, -36($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 3 offset 9 result -1 +#obj 3 offset 9 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -4 lw $a0, -4($sp) sw $a0, -24($sp) diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index 5f6b5b83..a2aa33ff 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -344,13 +344,13 @@ addiu $sp, $sp, 4 la $a0, string_1 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -367,13 +367,13 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 1 offset 6 result -1 +#obj 1 offset 6 result IO.in_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.in_int +sw $a1, ($sp) addiu $sp, $sp, -4 #Dispatch in place #obj 1 offset 5 result Main.fib @@ -385,13 +385,13 @@ jal Main.fib sw $a1, ($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 1 offset 4 result -1 +#obj 1 offset 4 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -405,13 +405,13 @@ addiu $sp, $sp, 4 la $a0, string_2 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 4 result -1 +#obj 2 offset 4 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -8($sp) sw $a0, -4($sp) diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index 90ba2b86..4cfbc2c8 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -785,13 +785,13 @@ lw $t0, -24($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 3 offset 6 result -1 +#obj 3 offset 6 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -4 #Point-Dispatch li $a0, 0 @@ -904,13 +904,13 @@ addiu $sp, $sp, 4 la $a0, string_1 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 6 result -1 +#obj 3 offset 6 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -930,13 +930,13 @@ lw $t0, -32($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 3 offset 8 result -1 +#obj 3 offset 8 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -956,13 +956,13 @@ addiu $sp, $sp, 4 la $a0, string_2 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 10 result -1 +#obj 3 offset 10 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -982,13 +982,13 @@ lw $t0, -48($sp) lw $a1, 8($t0) sw $a1, -4($sp) #Dispatch in place -#obj 3 offset 12 result -1 +#obj 3 offset 12 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -1008,13 +1008,13 @@ addiu $sp, $sp, 4 la $a0, string_3 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 14 result -1 +#obj 3 offset 14 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -1034,13 +1034,13 @@ lw $t0, -64($sp) lw $a1, 12($t0) sw $a1, -4($sp) #Dispatch in place -#obj 3 offset 16 result -1 +#obj 3 offset 16 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -4 lw $a0, -4($sp) sw $a0, -52($sp) @@ -1090,13 +1090,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -1130,13 +1130,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -1348,13 +1348,13 @@ addiu $sp, $sp, 4 la $a0, string_5 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 5 result -1 +#obj 3 offset 5 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 lw $v0, -4($sp) addiu $sp, $sp, -4 @@ -1544,13 +1544,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -1584,13 +1584,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -1683,13 +1683,13 @@ addiu $sp, $sp, 4 la $a0, string_6 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 5 result -1 +#obj 3 offset 5 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 lw $v0, -4($sp) addiu $sp, $sp, -4 @@ -2043,13 +2043,13 @@ addiu $sp, $sp, 4 lw $a0, -64($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 16 result -1 +#obj 2 offset 16 result IO.in_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.in_string +sw $a1, ($sp) addiu $sp, $sp, 0 lw $a0, -4($sp) lw $a1, -64($sp) @@ -2116,13 +2116,13 @@ lw $t0, -44($sp) lw $a1, 8($t0) sw $a1, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 #Integer li $a0, 0 @@ -2553,13 +2553,13 @@ addiu $sp, $sp, 4 lw $a0, -104($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 26 result -1 +#obj 2 offset 26 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 #Integer li $a0, 0 @@ -2715,13 +2715,13 @@ addiu $sp, $sp, 4 lw $a0, -24($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 #Integer li $a0, 0 @@ -2763,13 +2763,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #loading label li $a0, 0 @@ -2813,13 +2813,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #loading label li $a0, 0 @@ -2905,13 +2905,13 @@ addiu $sp, $sp, 4 lw $a0, -72($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 #Integer li $a0, 1 @@ -2923,13 +2923,13 @@ sub $a0, $a0, $a1 sw $a0, -12($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place #obj 3 offset 14 result Parse.a2i @@ -2994,13 +2994,13 @@ addiu $sp, $sp, 4 lw $a0, -76($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 #Integer li $a0, 1 @@ -3012,13 +3012,13 @@ sub $a0, $a0, $a1 sw $a0, -12($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place #obj 3 offset 15 result Parse.a2i_aux @@ -3225,13 +3225,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place #obj 3 offset 24 result Parse.c2i @@ -3386,13 +3386,13 @@ addiu $sp, $sp, 4 lw $a0, -112($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) @@ -3415,13 +3415,13 @@ sub $a0, $a0, $a1 sw $a0, -12($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 lw $a0, -4($sp) lw $a1, -92($sp) @@ -3502,13 +3502,13 @@ addiu $sp, $sp, 4 lw $a0, -108($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) @@ -3531,13 +3531,13 @@ sub $a0, $a0, $a1 sw $a0, -12($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 lw $a0, -4($sp) lw $a1, -88($sp) diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index 4180a9da..c432f6db 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -338,13 +338,13 @@ addiu $sp, $sp, 4 la $a0, string_1 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 4 result -1 +#obj 2 offset 4 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 lw $v0, -4($sp) addiu $sp, $sp, -4 diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 0769a746..9adbdd3a 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -450,13 +450,13 @@ addiu $sp, $sp, 4 lw $a0, -16($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 lw $v0, -4($sp) addiu $sp, $sp, -4 @@ -1017,13 +1017,13 @@ addiu $sp, $sp, 4 la $a0, string_7 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 10 result -1 +#obj 3 offset 10 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #loop li $a0, 0 @@ -1098,22 +1098,22 @@ lw $t0, -72($sp) lw $a1, -4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place -#obj 3 offset 15 result -1 +#obj 3 offset 15 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -1133,13 +1133,13 @@ addiu $sp, $sp, 4 la $a0, string_9 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 17 result -1 +#obj 3 offset 17 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Assignment #Binary @@ -1190,13 +1190,13 @@ addiu $sp, $sp, 4 la $a0, string_10 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 15 result -1 +#obj 3 offset 15 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) @@ -1232,13 +1232,13 @@ lw $t0, -16($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result String.length move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.length +sw $a1, ($sp) addiu $sp, $sp, -4 lw $v0, -4($sp) addiu $sp, $sp, -4 @@ -1312,13 +1312,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 lw $a0, -4($sp) sw $a0, -12($sp) @@ -3448,13 +3448,13 @@ jal CellularAutomaton.cell_at_next_evolution sw $a1, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.concat move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.concat +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -4($sp) lw $a1, -56($sp) @@ -3553,13 +3553,13 @@ addiu $sp, $sp, 4 la $a0, string_64 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 9 result -1 +#obj 3 offset 9 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3579,13 +3579,13 @@ addiu $sp, $sp, 4 la $a0, string_65 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 11 result -1 +#obj 3 offset 11 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3605,13 +3605,13 @@ addiu $sp, $sp, 4 la $a0, string_66 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 13 result -1 +#obj 3 offset 13 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3631,13 +3631,13 @@ addiu $sp, $sp, 4 la $a0, string_67 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 15 result -1 +#obj 3 offset 15 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3657,13 +3657,13 @@ addiu $sp, $sp, 4 la $a0, string_68 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 17 result -1 +#obj 3 offset 17 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3683,13 +3683,13 @@ addiu $sp, $sp, 4 la $a0, string_69 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 19 result -1 +#obj 3 offset 19 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3709,13 +3709,13 @@ addiu $sp, $sp, 4 la $a0, string_70 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 21 result -1 +#obj 3 offset 21 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3735,13 +3735,13 @@ addiu $sp, $sp, 4 la $a0, string_71 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 23 result -1 +#obj 3 offset 23 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3761,13 +3761,13 @@ addiu $sp, $sp, 4 la $a0, string_72 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 25 result -1 +#obj 3 offset 25 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3787,13 +3787,13 @@ addiu $sp, $sp, 4 la $a0, string_73 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 27 result -1 +#obj 3 offset 27 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3813,13 +3813,13 @@ addiu $sp, $sp, 4 la $a0, string_74 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 29 result -1 +#obj 3 offset 29 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3839,13 +3839,13 @@ addiu $sp, $sp, 4 la $a0, string_75 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 31 result -1 +#obj 3 offset 31 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3865,13 +3865,13 @@ addiu $sp, $sp, 4 la $a0, string_76 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 33 result -1 +#obj 3 offset 33 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3891,13 +3891,13 @@ addiu $sp, $sp, 4 la $a0, string_77 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 35 result -1 +#obj 3 offset 35 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3917,13 +3917,13 @@ addiu $sp, $sp, 4 la $a0, string_78 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 37 result -1 +#obj 3 offset 37 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3943,13 +3943,13 @@ addiu $sp, $sp, 4 la $a0, string_79 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 39 result -1 +#obj 3 offset 39 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3969,13 +3969,13 @@ addiu $sp, $sp, 4 la $a0, string_80 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 41 result -1 +#obj 3 offset 41 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -3995,13 +3995,13 @@ addiu $sp, $sp, 4 la $a0, string_81 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 43 result -1 +#obj 3 offset 43 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -4021,13 +4021,13 @@ addiu $sp, $sp, 4 la $a0, string_82 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 45 result -1 +#obj 3 offset 45 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -4047,13 +4047,13 @@ addiu $sp, $sp, 4 la $a0, string_83 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 47 result -1 +#obj 3 offset 47 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -4073,13 +4073,13 @@ addiu $sp, $sp, 4 la $a0, string_84 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 49 result -1 +#obj 3 offset 49 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -4099,13 +4099,13 @@ addiu $sp, $sp, 4 la $a0, string_85 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 51 result -1 +#obj 3 offset 51 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -4125,13 +4125,13 @@ addiu $sp, $sp, 4 la $a0, string_86 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 53 result -1 +#obj 3 offset 53 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Assignment #Self-Dispatch @@ -4145,13 +4145,13 @@ addiu $sp, $sp, 4 lw $a0, -216($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 54 result -1 +#obj 2 offset 54 result IO.in_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.in_int +sw $a1, ($sp) addiu $sp, $sp, 0 lw $a0, -4($sp) lw $a1, -216($sp) @@ -4174,13 +4174,13 @@ addiu $sp, $sp, 4 la $a0, string_87 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 57 result -1 +#obj 3 offset 57 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Condition li $a0, 0 @@ -5054,13 +5054,13 @@ addiu $sp, $sp, 4 la $a0, string_131 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 9 result -1 +#obj 3 offset 9 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -5080,13 +5080,13 @@ addiu $sp, $sp, 4 la $a0, string_132 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 11 result -1 +#obj 3 offset 11 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Assignment #Self-Dispatch @@ -5100,13 +5100,13 @@ addiu $sp, $sp, 4 lw $a0, -48($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 12 result -1 +#obj 2 offset 12 result IO.in_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.in_string +sw $a1, ($sp) addiu $sp, $sp, 0 lw $a0, -4($sp) lw $a1, -48($sp) @@ -5129,13 +5129,13 @@ addiu $sp, $sp, 4 la $a0, string_133 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 15 result -1 +#obj 3 offset 15 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Condition li $a0, 0 @@ -5221,13 +5221,13 @@ addiu $sp, $sp, 4 la $a0, string_136 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 8 result -1 +#obj 3 offset 8 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -5247,13 +5247,13 @@ addiu $sp, $sp, 4 la $a0, string_137 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 10 result -1 +#obj 3 offset 10 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -5273,13 +5273,13 @@ addiu $sp, $sp, 4 la $a0, string_138 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 12 result -1 +#obj 3 offset 12 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Assignment #Self-Dispatch @@ -5293,13 +5293,13 @@ addiu $sp, $sp, 4 lw $a0, -52($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 13 result -1 +#obj 2 offset 13 result IO.in_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.in_string +sw $a1, ($sp) addiu $sp, $sp, 0 lw $a0, -4($sp) lw $a1, -52($sp) @@ -5398,13 +5398,13 @@ addiu $sp, $sp, 4 la $a0, string_141 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 10 result -1 +#obj 2 offset 10 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -5418,13 +5418,13 @@ addiu $sp, $sp, 4 la $a0, string_142 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 10 result -1 +#obj 2 offset 10 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #loop li $a0, 0 diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 98f9f81f..5afb9a9e 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -370,13 +370,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 #Integer li $a0, 0 @@ -408,13 +408,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -642,13 +642,13 @@ jal IO.out_string sw $a1, 4($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 2 offset 8 result -1 +#obj 2 offset 8 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -662,13 +662,13 @@ addiu $sp, $sp, 4 la $a0, string_2 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 8 result -1 +#obj 2 offset 8 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -722,13 +722,13 @@ addiu $sp, $sp, 4 la $a0, string_3 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 6 result -1 +#obj 2 offset 6 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -4($sp) sw $a0, -4($sp) diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips new file mode 100644 index 00000000..773ba45a --- /dev/null +++ b/tests/codegen/palindrome.mips @@ -0,0 +1,750 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_4: .asciiz "enter a string\n" +string_6: .asciiz "that was not a palindrome\n" +string_7: .asciiz "that was a palindrome\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_VT: +.word Main_INH +.word Main.pal +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.pal: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.length +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_1 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.length +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_2 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result String.substr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.substr +sw $a1, ($sp) +addiu $sp, $sp, -12 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.length +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result String.substr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.substr +sw $a1, ($sp) +addiu $sp, $sp, -12 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_3 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_3 +_if_3: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.length +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 3 result String.substr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.substr +sw $a1, ($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 2 offset 12 result Main.pal +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.pal +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +_fi_3: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +j _fi_2 +_if_2: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +_fi_2: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -16($sp) +j _fi_1 +_if_1: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +_fi_1: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 4($a1) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_4 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 7 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 8 result IO.in_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.in_string +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 7 result Main.pal +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.pal +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_5 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_6 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 7 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -8($sp) +sw $a0, -4($sp) +j _fi_5 +_if_5: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_7 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 8 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -4($sp) +_fi_5: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -8($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 26e07d2a..e8f885aa 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -334,13 +334,13 @@ addiu $sp, $sp, 4 la $a0, string_1 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Integer li $a0, 2 @@ -671,13 +671,13 @@ lw $t0, -76($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 2 offset 19 result -1 +#obj 2 offset 19 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -691,13 +691,13 @@ addiu $sp, $sp, 4 la $a0, string_7 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 19 result -1 +#obj 2 offset 19 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -4($sp) sw $a0, -8($sp) @@ -755,13 +755,13 @@ addiu $sp, $sp, 4 la $a0, string_10 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, -4 lw $a0, -4($sp) sw $a0, -16($sp) diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 67d7d3d3..1dd3d59b 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -374,13 +374,13 @@ jal Object.Constructor sw $a1, ($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 2 offset 1 result -1 +#obj 2 offset 1 result Object.type_name move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.type_name +sw $a1, ($sp) addiu $sp, $sp, -4 #Args: 0 #Integer @@ -393,22 +393,22 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place -#obj 2 offset 6 result -1 +#obj 2 offset 6 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Args: 0 #Point-Dispatch @@ -422,13 +422,13 @@ sw $a0, ($sp) addiu $sp, $sp, 4 #push object #Dispatch in place -#obj 1 offset 1 result -1 +#obj 1 offset 1 result Object.type_name move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.type_name +sw $a1, ($sp) addiu $sp, $sp, -4 #Args: 0 #Integer @@ -441,22 +441,22 @@ li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 3 offset 3 result -1 +#obj 3 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal String.substr +sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place -#obj 1 offset 1 result -1 +#obj 1 offset 1 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Self-Dispatch li $a0, 0 @@ -470,13 +470,13 @@ addiu $sp, $sp, 4 la $a0, string_1 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 4 result -1 +#obj 2 offset 4 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 lw $a0, -8($sp) sw $a0, -4($sp) diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 7707e438..5087f82d 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -379,13 +379,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 1 sw $a0, ($sp) @@ -463,13 +463,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -520,13 +520,13 @@ addiu $sp, $sp, 4 lw $a0, -20($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -681,13 +681,13 @@ addiu $sp, $sp, 4 lw $a0, -16($sp) sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 4 result -1 +#obj 2 offset 4 result Object.abort move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal Object.abort +sw $a1, ($sp) addiu $sp, $sp, 0 lw $v0, -4($sp) addiu $sp, $sp, -4 @@ -1148,13 +1148,13 @@ lw $t0, -24($sp) lw $a1, 4($t0) sw $a1, -4($sp) #Dispatch in place -#obj 3 offset 6 result -1 +#obj 3 offset 6 result IO.out_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.out_int +sw $a1, ($sp) addiu $sp, $sp, -4 #Self-Dispatch li $a0, 0 @@ -1174,13 +1174,13 @@ addiu $sp, $sp, 4 la $a0, string_2 sw $a0, -4($sp) #Dispatch in place -#obj 3 offset 8 result -1 +#obj 3 offset 8 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -4 #Point-Dispatch li $a0, 0 @@ -1563,13 +1563,13 @@ addiu $sp, $sp, 4 la $a0, string_4 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 5 result -1 +#obj 2 offset 5 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) jal IO.out_string -sw $a1, 4($sp) +sw $a1, ($sp) addiu $sp, $sp, -8 #Point-Dispatch li $a0, 0 @@ -1596,13 +1596,13 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 1 offset 8 result -1 +#obj 1 offset 8 result IO.in_int move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) +jal IO.in_int +sw $a1, ($sp) addiu $sp, $sp, -4 #Dispatch in place #obj 1 offset 7 result Main.iota From 102677504d5cfc73f1701968d855314f42ad0f5c Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Sat, 28 Nov 2020 11:52:07 -0500 Subject: [PATCH 097/140] some bugs corrected in transpilator --- src/code_generation/variables.py | 5 +- src/visitors/transpilator.py | 2 +- tests/codegen/arith.mips | 6463 ++++++++++++++++++++++++++++++ tests/codegen/hairyscary.mips | 1340 +++++++ 4 files changed, 7807 insertions(+), 3 deletions(-) create mode 100644 tests/codegen/arith.mips create mode 100644 tests/codegen/hairyscary.mips diff --git a/src/code_generation/variables.py b/src/code_generation/variables.py index b1a50a4f..1d6750a9 100644 --- a/src/code_generation/variables.py +++ b/src/code_generation/variables.py @@ -14,8 +14,9 @@ def id(self, name): return len(self.stack) - self.stack[name] + 1 def pop_var(self): - self.stack.pop(self.vars[-1]) - self.vars.pop() + if not len(self.vars): + self.stack.pop(self.vars[-1]) + self.vars.pop() def add_temp(self): name = len(self.stack) + 1 diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 8c3c5dc1..23ba047a 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -524,7 +524,7 @@ def visit(self, node, variables): i += 1 self.visit(p, variables) - method = node.id + '.' + node.obj.id + method = node.id + '.' + node.obj.type self.code.append(DispatchParentIL(variables.id(result), variables.id(name), method)) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips new file mode 100644 index 00000000..543bb9a1 --- /dev/null +++ b/tests/codegen/arith.mips @@ -0,0 +1,6463 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_7: .asciiz "0" +string_9: .asciiz "1" +string_11: .asciiz "2" +string_13: .asciiz "3" +string_15: .asciiz "4" +string_17: .asciiz "5" +string_19: .asciiz "6" +string_21: .asciiz "7" +string_23: .asciiz "8" +string_25: .asciiz "9" +string_37: .asciiz "" +string_38: .asciiz "9" +string_39: .asciiz "8" +string_40: .asciiz "7" +string_41: .asciiz "6" +string_42: .asciiz "5" +string_43: .asciiz "4" +string_44: .asciiz "3" +string_45: .asciiz "2" +string_46: .asciiz "1" +string_47: .asciiz "0" +string_49: .asciiz "-" +string_51: .asciiz "+" +string_56: .asciiz "-" +string_57: .asciiz "0" +string_59: .asciiz "" +string_60: .asciiz "\n\tTo add a number to " +string_61: .asciiz "...enter a:\n" +string_62: .asciiz "\tTo negate " +string_63: .asciiz "...enter b:\n" +string_64: .asciiz "\tTo find the difference between " +string_65: .asciiz "and another number...enter c:\n" +string_66: .asciiz "\tTo find the factorial of " +string_67: .asciiz "...enter d:\n" +string_68: .asciiz "\tTo square " +string_69: .asciiz "...enter e:\n" +string_70: .asciiz "\tTo cube " +string_71: .asciiz "...enter f:\n" +string_72: .asciiz "\tTo find out if " +string_73: .asciiz "is a multiple of 3...enter g:\n" +string_74: .asciiz "\tTo divide " +string_75: .asciiz "by 8...enter h:\n" +string_76: .asciiz "\tTo get a new number...enter j:\n" +string_77: .asciiz "\tTo quit...enter q:\n\n" +string_78: .asciiz "\n" +string_79: .asciiz "Please enter a number... " +string_90: .asciiz "Class type is now A\n" +string_91: .asciiz "Class type is now B\n" +string_92: .asciiz "Class type is now C\n" +string_93: .asciiz "Class type is now D\n" +string_94: .asciiz "Class type is now E\n" +string_95: .asciiz "Oooops\n" +string_96: .asciiz " " +string_98: .asciiz "number " +string_100: .asciiz "is odd!\n" +string_101: .asciiz "is even!\n" +string_102: .asciiz "a" +string_104: .asciiz "b" +string_106: .asciiz "c" +string_108: .asciiz "d" +string_110: .asciiz "e" +string_112: .asciiz "f" +string_114: .asciiz "g" +string_116: .asciiz "h" +string_118: .asciiz "j" +string_120: .asciiz "q" +string_122: .asciiz "number " +string_123: .asciiz "is equal to " +string_124: .asciiz "times 8 with a remainder of " +string_125: .asciiz "\n" +string_127: .asciiz "number " +string_128: .asciiz "is not divisible by 3.\n" +string_129: .asciiz "number " +string_130: .asciiz "is divisible by 3.\n" +string_135: .asciiz "Oooops\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +A_INH: +.word Object_INH +B_INH: +.word A_INH +C_INH: +.word B_INH +D_INH: +.word B_INH +E_INH: +.word D_INH +A2I_INH: +.word Object_INH +Main_INH: +.word IO_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A_VT: +.word A_INH +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word A.method5 +B_VT: +.word B_INH +.word B.method5 +C_VT: +.word C_INH +.word C.method6 +.word C.method5 +D_VT: +.word D_INH +.word D.method7 +E_VT: +.word E_INH +.word E.method6 +A2I_VT: +.word A2I_INH +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_VT: +.word Main_INH +.word Main.menu +.word Main.prompt +.word Main.get_int +.word Main.is_even +.word Main.class_type +.word Main.print +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 20 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +A.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -12($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A.value: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -12($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A.set_var: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A.method1: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A.method2: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -40($sp) +sw $a0, -4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, B_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result B.Constructor +la $v0, 1 +jal B.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -60($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A.method3: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +lw $a0, -4($sp) +lw $a1, -32($sp) +sw $a0, -4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, C_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result C.Constructor +la $v0, 1 +jal C.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A.method4: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_1 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -56($sp) +sw $a0, -4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, D_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result D.Constructor +la $v0, 1 +jal D.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -76($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_1 +_if_1: +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -56($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -64($sp) +sw $a0, -4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, D_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result D.Constructor +la $v0, 1 +jal D.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -84($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +_fi_1: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A.method5: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_2: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_2 +j _pool_2 +_body_2: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -60($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -64($sp) +sw $a0, -4($a1) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -72($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -76($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -28($sp) +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_2 +_pool_2: +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, E_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result E.Constructor +la $v0, 1 +jal E.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +B.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +B.method5: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -36($sp) +sw $a0, -4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, E_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result E.Constructor +la $v0, 1 +jal E.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +C.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +C.method6: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +lw $a0, -4($sp) +lw $a1, -32($sp) +sw $a0, -4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +C.method5: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -32($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -20($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -44($sp) +sw $a0, -4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, E_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result E.Constructor +la $v0, 1 +jal E.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -64($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -44($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +D.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +D.method7: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_3 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_5 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -84($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_6 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -92($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -100($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 5 offset 26 result D.method7 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal D.method7 +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -36($sp) +j _fi_6 +_if_6: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -40($sp) +_fi_6: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -56($sp) +j _fi_5 +_if_5: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -60($sp) +_fi_5: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -76($sp) +j _fi_4 +_if_4: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -80($sp) +_fi_4: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -96($sp) +j _fi_3 +_if_3: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -124($sp) +sw $a0, -4($sp) +#Args: 0 +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -132($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +#Dispatch in place +#obj 4 offset 33 result D.method7 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal D.method7 +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -112($sp) +_fi_3: +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +E.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +E.method6: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +div $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -36($sp) +sw $a0, -4($a1) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.c2i: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_7 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_9 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_10 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_11 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_12 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -68($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_13 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_14 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_15 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_16 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -100($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_17 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_18 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -116($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_19 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_20 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -132($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_21 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_22 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -148($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_23 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_24 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -164($sp) +sw $a0, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_25 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_26 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -184($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 46 result Object.abort +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Object.abort +sw $a1, ($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +j _fi_26 +_if_26: +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_26: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -52($sp) +j _fi_24 +_if_24: +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -56($sp) +_fi_24: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -72($sp) +j _fi_22 +_if_22: +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -76($sp) +_fi_22: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -92($sp) +j _fi_20 +_if_20: +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -96($sp) +_fi_20: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -112($sp) +j _fi_18 +_if_18: +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -116($sp) +_fi_18: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -132($sp) +j _fi_16 +_if_16: +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -136($sp) +_fi_16: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -152($sp) +j _fi_14 +_if_14: +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -156($sp) +_fi_14: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -172($sp) +j _fi_12 +_if_12: +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -176($sp) +_fi_12: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -192($sp) +j _fi_10 +_if_10: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -196($sp) +_fi_10: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -212($sp) +j _fi_8 +_if_8: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -216($sp) +_fi_8: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.i2c: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_27 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_28 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -52($sp) +sw $a0, -4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_29 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -68($sp) +sw $a0, -4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_30 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_31 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -100($sp) +sw $a0, -4($sp) +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_32 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -116($sp) +sw $a0, -4($sp) +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_33 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -132($sp) +sw $a0, -4($sp) +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_34 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -148($sp) +sw $a0, -4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_35 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -164($sp) +sw $a0, -4($sp) +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_36 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -184($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 46 result Object.abort +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Object.abort +sw $a1, ($sp) +addiu $sp, $sp, 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_37 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +j _fi_36 +_if_36: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_38 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_36: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -52($sp) +j _fi_35 +_if_35: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_39 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -56($sp) +_fi_35: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -72($sp) +j _fi_34 +_if_34: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_40 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -76($sp) +_fi_34: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -92($sp) +j _fi_33 +_if_33: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_41 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -96($sp) +_fi_33: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -112($sp) +j _fi_32 +_if_32: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_42 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -116($sp) +_fi_32: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -132($sp) +j _fi_31 +_if_31: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_43 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -136($sp) +_fi_31: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -152($sp) +j _fi_30 +_if_30: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_44 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -156($sp) +_fi_30: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -172($sp) +j _fi_29 +_if_29: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_45 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -176($sp) +_fi_29: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -192($sp) +j _fi_28 +_if_28: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_46 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -196($sp) +_fi_28: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -212($sp) +j _fi_27 +_if_27: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_47 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -216($sp) +_fi_27: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.a2i: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.length +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_48 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result String.substr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.substr +sw $a1, ($sp) +addiu $sp, $sp, -12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_49 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -24($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_50 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -72($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result String.substr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.substr +sw $a1, ($sp) +addiu $sp, $sp, -12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_51 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -24($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_52 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -96($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -96($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 25 result A2I.a2i_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.a2i_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -40($sp) +j _fi_52 +_if_52: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -108($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -112($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -128($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.length +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 7 offset 6 result String.substr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.substr +sw $a1, ($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 9 offset 34 result A2I.a2i_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.a2i_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -76($sp) +_fi_52: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -104($sp) +j _fi_50 +_if_50: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -148($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -152($sp) +sw $a0, -4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -168($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.length +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 7 offset 6 result String.substr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.substr +sw $a1, ($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 9 offset 44 result A2I.a2i_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.a2i_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -40($sp) +lw $a0, -4($sp) +sw $a0, -144($sp) +_fi_50: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -164($sp) +j _fi_48 +_if_48: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -168($sp) +_fi_48: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.a2i_aux: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_53: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -56($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _body_53 +j _pool_53 +_body_53: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -72($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -88($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -96($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result String.substr +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.substr +sw $a1, ($sp) +addiu $sp, $sp, -12 +#Dispatch in place +#obj 6 offset 25 result A2I.c2i +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.c2i +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, 7 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -40($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -100($sp) +sw $a0, -4($a1) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -108($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -112($sp) +sw $a0, -4($a1) +lw $a0, -4($sp) +sw $a0, -56($sp) +addiu $sp, $sp, -8 +addiu $sp, $sp, -8 +j _loop_53 +_pool_53: +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.i2a: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_54 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_55 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_56 +sw $a0, -4($sp) +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +lw $a0, 3 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 6 offset 19 result A2I.i2a_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.i2a_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 8 offset 7 result String.concat +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.concat +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -48($sp) +j _fi_55 +_if_55: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 3 offset 22 result A2I.i2a_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.i2a_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -60($sp) +_fi_55: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -76($sp) +j _fi_54 +_if_54: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_57 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -80($sp) +_fi_54: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +A2I.i2a_aux: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_58 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 13 result A2I.i2a_aux +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.i2a_aux +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -76($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +mult $a0, $a1 +mflo $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, 4 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -20($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 7 offset 20 result A2I.i2c +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal A2I.i2c +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 11 offset 8 result String.concat +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal String.concat +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_58 +_if_58: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_59 +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -28($sp) +_fi_58: +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -12($sp) +sw $a0, 16($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.menu: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_60 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 7 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_61 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 9 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_62 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 11 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 13 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_63 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 15 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_64 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 17 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -76($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 19 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_65 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 21 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_66 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 23 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -100($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 25 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_67 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 27 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_68 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 29 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -124($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 31 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_69 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 33 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_70 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 35 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -148($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 37 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_71 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 39 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_72 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 41 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -172($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 43 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_73 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 45 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_74 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 47 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -196($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 49 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_75 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 51 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_76 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 53 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_77 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 55 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 56 result IO.in_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.in_string +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -216($sp) +addiu $sp, $sp, -108 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.prompt: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_78 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 5 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_79 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 7 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 8 result IO.in_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.in_string +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +sw $a0, -24($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.get_int: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.is_even: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $a1, $a0 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_80 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_81 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_82 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -80($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +sub $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 21 result Main.is_even +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.is_even +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +j _fi_82 +_if_82: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -36($sp) +_fi_82: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -52($sp) +j _fi_81 +_if_81: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -56($sp) +_fi_81: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -72($sp) +j _fi_80 +_if_80: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -104($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +not $a0, $a0 +sw $a0, -8($sp) +#Dispatch in place +#obj 3 offset 26 result Main.is_even +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.is_even +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -84($sp) +_fi_80: +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.class_type: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, A +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_83 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -12($sp) +la $a1, B +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_84 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +la $a1, C +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_85 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +la $a1, D +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_86 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +la $a1, E +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_87 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +la $a1, Object +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_88 +addiu $sp, $sp, -4 +branch_83: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_90 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 15 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +branch_84: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -48($sp) +sw $a0, -16($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_91 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 18 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +addiu $sp, $sp, -12 +branch_85: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -60($sp) +sw $a0, -28($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_92 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 21 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -36($sp) +addiu $sp, $sp, -12 +branch_86: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -72($sp) +sw $a0, -40($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_93 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 24 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -48($sp) +addiu $sp, $sp, -12 +branch_87: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -84($sp) +sw $a0, -52($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_94 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 27 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -60($sp) +addiu $sp, $sp, -12 +branch_88: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -96($sp) +sw $a0, -64($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_95 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 30 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -72($sp) +addiu $sp, $sp, -12 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.print: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -40($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 5 offset 11 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_96 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 13 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, 8($a1) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +_loop_97: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -32($sp) +lw $a1, 16($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +bnez $a0, _body_97 +j _pool_97 +_body_97: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_98 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 11 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -52($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 13 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -68($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 17 result Main.is_even +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.is_even +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_99 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_100 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 19 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -24($sp) +j _fi_99 +_if_99: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_101 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 21 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -32($sp) +_fi_99: +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -92($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 23 result Main.class_type +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.class_type +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 24 result Main.menu +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.menu +sw $a1, ($sp) +addiu $sp, $sp, -4 +lw $a0, -4($sp) +lw $a1, -96($sp) +sw $a0, 4($a1) +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -108($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_102 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_103 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -124($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_104 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_105 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -140($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_106 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_107 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -156($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_108 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_109 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -172($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_110 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_111 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -188($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_112 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_113 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -204($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_114 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_115 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -220($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_116 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_117 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -236($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_118 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_119 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -252($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_120 +sw $a0, -4($sp) +lw $a0, 2 +lw $a1, -4($sp) +seq $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_121 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -280($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 6 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -280($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -40($sp) +j _fi_121 +_if_121: +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -284($sp) +sw $a0, 16($a1) +lw $a0, -4($sp) +sw $a0, -44($sp) +_fi_121: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -60($sp) +j _fi_119 +_if_119: +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -296($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -72($sp) +_fi_119: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -88($sp) +j _fi_117 +_if_117: +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, E_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result E.Constructor +la $v0, 1 +jal E.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -332($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 6 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -332($sp) +sw $a0, -4($a1) +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_122 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 88 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -360($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 90 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_123 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 92 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -376($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 94 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_124 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 96 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -408($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -412($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +#Dispatch in place +#obj 4 offset 103 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_125 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 105 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -52($sp) +addiu $sp, $sp, -24 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -344($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +lw $a1, -344($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -40($sp) +addiu $sp, $sp, -12 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -96($sp) +_fi_117: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -112($sp) +j _fi_115 +_if_115: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, D_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result D.Constructor +la $v0, 1 +jal D.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -332($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 6 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +bnez $a0, _if_126 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_127 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 86 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -352($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 88 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_128 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 90 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -56($sp) +j _fi_126 +_if_126: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_129 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 93 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -380($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 95 result Main.print +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.print +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_130 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 97 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -28($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -84($sp) +_fi_126: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -196($sp) +_fi_115: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -212($sp) +j _fi_113 +_if_113: +#Assignment +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, C_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result C.Constructor +la $v0, 1 +jal C.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -412($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#DispatchParent in place +#obj 6 offset 3 result method5.C +la $v0, 3 +jal method5.C +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -412($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -236($sp) +_fi_113: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -252($sp) +j _fi_111 +_if_111: +#Assignment +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, C_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result C.Constructor +la $v0, 1 +jal C.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -436($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#DispatchParent in place +#obj 6 offset 3 result method5.C +la $v0, 3 +jal method5.C +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -436($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -276($sp) +_fi_111: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -292($sp) +j _fi_109 +_if_109: +#Assignment +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, C_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result C.Constructor +la $v0, 1 +jal C.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -460($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#DispatchParent in place +#obj 6 offset 3 result method5.C +la $v0, 3 +jal method5.C +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -460($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -316($sp) +_fi_109: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -332($sp) +j _fi_107 +_if_107: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 121 result Main.get_int +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.get_int +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -484($sp) +sw $a0, 12($a1) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, D_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result D.Constructor +la $v0, 1 +jal D.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -508($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -516($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 8 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +lw $a1, -516($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -56($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -388($sp) +_fi_107: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -404($sp) +j _fi_105 +_if_105: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -524($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, C +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_131 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -12($sp) +la $a1, A +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_132 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +la $a1, Object +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_133 +addiu $sp, $sp, -4 +branch_131: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -560($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -12 +branch_132: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -44($sp) +sw $a0, -24($sp) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -12($sp) +sw $a0, -4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -580($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -40($sp) +addiu $sp, $sp, -12 +branch_133: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -64($sp) +sw $a0, -44($sp) +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_135 +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 149 result IO.out_string +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 150 result Object.abort +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Object.abort +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -20($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -64($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +sw $a0, -492($sp) +_fi_105: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -508($sp) +j _fi_103 +_if_103: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, -4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 1 offset 157 result Main.get_int +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.get_int +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 2 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -628($sp) +sw $a0, 12($a1) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, -4($sp) +la $a1, B_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result B.Constructor +la $v0, 1 +jal B.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -652($sp) +lw $a1, 8($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -660($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 8 offset 5 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +lw $a1, -660($sp) +sw $a0, 8($a1) +lw $a0, -4($sp) +sw $a0, -56($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -564($sp) +_fi_103: +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -628($sp) +addiu $sp, $sp, -24 +addiu $sp, $sp, -8 +j _loop_97 +_pool_97: +lw $a0, -4($sp) +sw $a0, -652($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips new file mode 100644 index 00000000..e0431041 --- /dev/null +++ b/tests/codegen/hairyscary.mips @@ -0,0 +1,1340 @@ +.data +buffer: .space 80 +strsubstrexception: .asciiz "Substring index exception" + +string_13: .asciiz "do nothing" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Foo_INH: +.word Bazz_INH +Bar_INH: +.word Razz_INH +Razz_INH: +.word Foo_INH +Bazz_INH: +.word IO_INH +Main_INH: +.word Object_INH +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Foo_VT: +.word Foo_INH +.word Foo.doh +Bazz_VT: +.word Bazz_INH +.word Bazz.printh +.word Bazz.doh +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +li $v0, 4 +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + +Object.type_name: + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 20 +syscall +sw $v0, -4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, ($sp) +#Dispatch in place +#obj 3 offset 1 result Main.main +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Main.main +sw $a1, ($sp) +j Object.abort +#--------------End Initial Code--------------- +Foo.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Razz +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_1 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Foo +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_2 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Bar +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_3 +addiu $sp, $sp, -4 +branch_1: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Bar_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bar.Constructor +la $v0, 1 +jal Bar.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +branch_2: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Razz_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Razz.Constructor +la $v0, 1 +jal Razz.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +branch_3: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +lw $a1, -16($sp) +sw $a0, 4($a1) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -36($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 9 result Foo.doh +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Foo.doh +sw $a1, ($sp) +addiu $sp, $sp, 0 +lw $a0, 3 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 9 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $a0, 3 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -20($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Foo.doh: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, -4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bar.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 4 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $a0, -4($sp) +lw $a1, -16($sp) +sw $a0, 4($a1) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -24($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 6 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Razz.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Razz +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_5 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Bar +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_6 +addiu $sp, $sp, -4 +branch_5: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Bar_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bar.Constructor +la $v0, 1 +jal Bar.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +branch_6: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +lw $a1, -16($sp) +sw $a0, 4($a1) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#DispatchParent in place +#obj 2 offset 1 result doh.a +la $v0, 1 +jal doh.a +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -44($sp) +lw $a1, -4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -40($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, -4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 9 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $a0, 3 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -16($sp) +addiu $sp, $sp, -8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -36($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 9 result -1 +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_string +sw $a1, 4($sp) +addiu $sp, $sp, 0 +lw $a0, 3 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -20($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bazz.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +lw $a1, -12($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Bazz +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_8 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Razz +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_9 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Foo +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_10 +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -8($sp) +la $a1, Bar +la $t0, inherit +jalr $ra, $t0 +sw $v0, -4($sp) +lw $a0, -4($sp) +bnez $a0, branch_11 +addiu $sp, $sp, -4 +branch_8: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Foo_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Foo.Constructor +la $v0, 1 +jal Foo.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +branch_9: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Bar_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bar.Constructor +la $v0, 1 +jal Bar.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +branch_10: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Razz_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Razz.Constructor +la $v0, 1 +jal Razz.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +branch_11: +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -16($sp) +sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -12 +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 8($a1) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -28($sp) +sw $a0, -4($sp) +#Dispatch in place +#obj 2 offset 7 result Bazz.printh +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal Bazz.printh +sw $a1, ($sp) +addiu $sp, $sp, 0 +lw $a0, -4($sp) +lw $a1, -28($sp) +sw $a0, 12($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bazz.printh: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -20($sp) +sw $a0, -4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -24($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Dispatch in place +#obj 3 offset 6 result IO.out_int +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, 4 +sw $t1, 0($sp) +jal IO.out_int +sw $a1, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, -4($sp) +sw $a0, -16($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Bazz.doh: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 4($t0) +sw $a1, -4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $a0, 2 +lw $a1, -4($sp) +add $a0, $a0, $a1 +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $t0, -28($sp) +lw $a1, 12($t0) +sw $a1, -4($sp) +lw $a0, -4($sp) +sw $a0, -12($sp) +addiu $sp, $sp, -8 +lw $a0, ($sp) +sw $a0, ($sp) +addiu $sp, $sp, -8 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 16 +syscall +sw $v0, -4($sp) +la $a1, Bazz_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bazz.Constructor +la $v0, 1 +jal Bazz.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -12($sp) +sw $a0, 4($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Foo_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Foo.Constructor +la $v0, 1 +jal Foo.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -16($sp) +sw $a0, 8($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Razz_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Razz.Constructor +la $v0, 1 +jal Razz.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -20($sp) +sw $a0, 12($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, -4($sp) +la $a1, Bar_VT +sw $a1, ($v0) +lw $a0, -4($sp) +sw $a0, -12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bar.Constructor +la $v0, 1 +jal Bar.Constructor +sw $a1, ($sp) +addiu $sp, $sp, -8 +lw $a0, -4($sp) +lw $a1, -24($sp) +sw $a0, 16($a1) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, 4 +la $a0, string_13 +sw $a0, -4($sp) +lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $ra, -4($sp) +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall From 708583a625e0ff7cde77db3fd8a702a6ed8ee504 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sat, 28 Nov 2020 18:07:03 -0500 Subject: [PATCH 098/140] anoting dynamic types in context --- src/visitors/type_checker.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py index f1f4ad3a..fa383841 100644 --- a/src/visitors/type_checker.py +++ b/src/visitors/type_checker.py @@ -14,6 +14,7 @@ def __init__(self, name): def run(self, inputx): ast, context, scope = inputx self.context = context + self.context.exprs_dict = {} self.visit(ast, scope) return ast, context, scope @@ -94,6 +95,7 @@ def visit(self, node, scope): vinfo = scope.get_attribute(node.id) if node.expr: etype = self.visit(node.expr, ascope) + self.context.exprs_dict[node.expr] = etype if not etype.conforms_to(vinfo.type): self.errors.append(CTypeError(node.expr.row, node.expr.col, INCOMPATIBLE_TYPES %(etype.name, vinfo.type.name))) return ErrorType() @@ -108,21 +110,9 @@ def visit(self, node, scope): def visit(self, node, scope): fscope = scope.func_scopes[node.id] parent = self.current_type.parent - # ptypes = [param[1] for param in node.params] - + self.current_method = meth = self.current_type.get_method(node.id) - # while parent: - # try: - # old_meth = parent.get_method(node.id) - # if old_meth.return_type.name != meth.return_type.name and node.type != 'SELF_TYPE': - # self.errors.append(CSemanticError(node.row, node.col, WRONG_SIGNATURE % (node.id, parent.name))) - # elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, meth.param_types, old_meth.param_types)): - # self.errors.append(CSemanticError(node.row, node.col, WRONG_SIGNATURE % (node.id, parent.name))) - # break - # except SemanticError: - # parent = parent.parent - res = self.visit(node.body, fscope) if not res.conforms_to(meth.return_type): @@ -135,6 +125,7 @@ def visit(self, node, scope): if node.expr: etype = self.visit(node.expr, scope) + self.context.exprs_dict[node.expr] = etype if not etype.conforms_to(vtype): self.errors.append(CTypeError(node.row, node.col, INCOMPATIBLE_TYPES %(vtype.name, etype.name))) return etype @@ -147,6 +138,7 @@ def visit(self, node, scope): vtype = vinfo.type rtype = self.visit(node.expr, scope) + self.context.exprs_dict[node.expr] = rtype if not rtype.conforms_to(vtype): self.errors.append(CTypeError(node.expr.row, node.expr.col, INCOMPATIBLE_TYPES %(vtype.name, rtype.name))) @@ -156,6 +148,7 @@ def visit(self, node, scope): @visitor.when(ExprCallNode) def visit(self, node, scope): otype = self.visit(node.obj, scope) + self.context.exprs_dict[node.obj] = otype meth = self._get_method(node, otype, node.id) self._check_args(node, meth, scope, node.args) @@ -185,7 +178,7 @@ def visit(self, node, scope): @visitor.when(WhileNode) def visit(self, node, scope): ctype = self.visit(node.cond, scope) - + if ctype.name != 'Bool': self.errors.append(CTypeError(node.cond.row, node.cond.col, INCORRECT_TYPE %(ctype.name, 'Bool'))) @@ -217,6 +210,7 @@ def visit(self, node, scope): @visitor.when(CaseNode) def visit(self, node, scope): etype = self.visit(node.expr, scope) + self.context.exprs_dict[node.expr] = etype new_scope = scope.expr_dict[node] types = [] @@ -236,6 +230,7 @@ def visit(self, node, scope): var_info = scope.find_variable(node.id) typex = self.visit(node.expr, scope) + self.context.exprs_dict[node.expr] = typex return typex, var_info.type @visitor.when(LetNode) @@ -248,7 +243,9 @@ def visit(self, node, scope): self.visit(init, iscope) iscope = iscope.children[0] - return self.visit(node.expr, iscope) + etype = self.visit(node.expr, iscope) + self.context.exprs_dict[node.expr] = etype + return etype @visitor.when(LetDeclarationNode) def visit(self, node, scope): @@ -257,6 +254,7 @@ def visit(self, node, scope): if node.expr: etype = self.visit(node.expr, scope) + self.context.exprs_dict[node.expr] = etype if not etype.conforms_to(vtype): self.errors.append(CTypeError(node.expr.row, node.expr.col, INCOMPATIBLE_TYPES %(vtype.name, etype.name))) return etype From 3908a287afb14903a86d9659d380b9ca62b90abe Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sat, 28 Nov 2020 18:13:18 -0500 Subject: [PATCH 099/140] isvoid expr anoting --- src/visitors/type_checker.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py index fa383841..aaa92511 100644 --- a/src/visitors/type_checker.py +++ b/src/visitors/type_checker.py @@ -321,7 +321,8 @@ def visit(self, node, scope): @visitor.when(IsVoidNode) def visit(self, node, scope): - self.visit(node.expr, scope) + etype = self.visit(node.expr, scope) + self.context.exprs_dict[node.expr] = etype return BoolType() @visitor.when(VariableNode) From ba8d18bd0e52d6d0717cc01a184458b3cca4472b Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Sat, 28 Nov 2020 21:48:02 -0500 Subject: [PATCH 100/140] some changes in logic, for some dispatch --- src/code_generation/statics/Object.s | 2 - src/code_generation/virtual_table.py | 5 + src/visitors/to_mips.py | 5 +- src/visitors/transpilator.py | 21 +- tests/codegen/arith.mips | 6463 -------------------------- tests/codegen/atoi.mips | 2186 --------- tests/codegen/book_list.mips | 1376 ------ tests/codegen/cells.mips | 1395 ------ tests/codegen/complex.mips | 870 ---- tests/codegen/fib.mips | 564 --- tests/codegen/graph.mips | 3755 --------------- tests/codegen/hairyscary.mips | 1340 ------ tests/codegen/hello_world.mips | 355 -- tests/codegen/life.mips | 5675 ---------------------- tests/codegen/list.mips | 971 ---- tests/codegen/palindrome.mips | 750 --- tests/codegen/primes.mips | 800 ---- tests/codegen/print-cool.mips | 75 +- tests/codegen/sort-list.mips | 1652 ------- 19 files changed, 81 insertions(+), 28179 deletions(-) delete mode 100644 tests/codegen/arith.mips delete mode 100644 tests/codegen/atoi.mips delete mode 100644 tests/codegen/book_list.mips delete mode 100644 tests/codegen/cells.mips delete mode 100644 tests/codegen/complex.mips delete mode 100644 tests/codegen/fib.mips delete mode 100644 tests/codegen/graph.mips delete mode 100644 tests/codegen/hairyscary.mips delete mode 100644 tests/codegen/hello_world.mips delete mode 100644 tests/codegen/life.mips delete mode 100644 tests/codegen/list.mips delete mode 100644 tests/codegen/palindrome.mips delete mode 100644 tests/codegen/primes.mips delete mode 100644 tests/codegen/sort-list.mips diff --git a/src/code_generation/statics/Object.s b/src/code_generation/statics/Object.s index 0ea77eaf..0e1bf28a 100644 --- a/src/code_generation/statics/Object.s +++ b/src/code_generation/statics/Object.s @@ -21,5 +21,3 @@ jr $ra Object.abort: li $v0, 10 syscall - -Object.type_name: diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index 10a7fa15..f922b1f7 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -48,6 +48,11 @@ def get_method_id(self, claSS, method, rec = False): return claSS + '.' + method built_in = ['Object','Int', 'IO', 'Bool', 'String'] if not rec: + if method == 'type_name': + try: + return claSS.type + '.type_name' + except: + return claSS.expr.id + '.type_name' for t in built_in: ret = self.get_method_id(t, method, rec=True) if ret != -1: diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 69d99c60..e8ba2d58 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -174,6 +174,7 @@ def visit(self, node): @visitor.when(VirtualTableIL) def visit(self, node): + self.data.append(node.name + "_name: .asciiz " +'"'+ node.name + '"\n') self.data.append(node.name + "_VT:\n") self.data.append(".word {}_INH\n".format(node.name)) @@ -195,7 +196,7 @@ def visit(self, node): def visit(self, node): self.code.append("lw $v0, -4($sp)\n") self.code.append("addiu $sp, $sp, -4\n") - self.code.append("lw $ra, -4($sp)\n") + # self.code.append("lw $ra, -4($sp)\n") self.code.append("addiu $sp, $sp, -4\n") self.code.append("jr $ra\n") @@ -235,7 +236,7 @@ def visit(self, node): @visitor.when(InheritIL) def visit(self, node): self.code.append("lw $a0, {}($sp)\n".format(-4 * node.child)) - self.code.append("la $a1, " + node.parent + "\n") + self.code.append("la $a1, " + node.parent + "_VT\n") self.code.append("la $t0, inherit\n") self.code.append("jalr $ra, $t0\n") self.code.append("sw $v0, {}($sp)\n".format(-4*node.result)) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 23ba047a..40ff28cf 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -10,6 +10,7 @@ def __init__(self, context): #code IL self.code = [] self.data = [] + self.context = context self.count = 0 self.current_class = 'Main' @@ -55,6 +56,9 @@ def collectTypes(self, context): for t in types: self.data.append(HierarchyIL(t, types[t].name)) + self.data.append(VirtualTableIL('Int', [])) + self.data.append(VirtualTableIL('Bool', [])) + for m in self.virtual_table.methods.keys(): self.data.append(VirtualTableIL(m, self.virtual_table.methods[m])) depth = dict([(types[x].name, len(types) + 2) for x in types]) @@ -95,6 +99,7 @@ def setBuiltInTypes(self): self.code.append(LabelIL(t, 'Constructor', True)) self.code.append(PushIL()) self.code.append(ReturnIL()) + self.setClassTypeName(t) def setClassConstructor(self, attributes): self.code.append(LabelIL(self.current_class, 'Constructor', True)) @@ -114,6 +119,12 @@ def setClassConstructor(self, attributes): self.code.append(PushIL()) self.code.append(ReturnIL()) + def setClassTypeName(self, claSS): + self.code.append(LabelIL(claSS, 'type_name', True)) + self.code.append(CustomLineIL("sw $a1, ($sp)\n")) + self.code.append(CustomLineIL("la $a0, " + claSS + '_name\n' )) + self.code.append(CustomLineIL("jr $ra\n")) + def handleBinaryOps(self, node, variables, symbol): self.code.append(CommentIL('Binary')) @@ -164,6 +175,7 @@ def visit(self, node): attributes.append(f) self.setClassConstructor(attributes) + self.setClassTypeName(self.current_class) for f in node.features: self.visit(f) @@ -445,7 +457,8 @@ def visit(self, node, variables): @visitor.when(IsVoidNode) def visit(self, node, vars): - pass + print('is_void: ', node.expr.id) + print('type: ', self.context.get_type(node)) #expression: complex->dispatch @visitor.when(ExprCallNode) @@ -454,7 +467,7 @@ def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) - # print('----------node {}---------'.format(node)) + print('----------node {}---------'.format(node.id)) index = self.virtual_table.get_method_id(node.obj, node.id) self.code.append(CommentIL('push object')) @@ -524,8 +537,8 @@ def visit(self, node, variables): i += 1 self.visit(p, variables) - method = node.id + '.' + node.obj.type - + method = node.obj.type + '.' + node.id + # print('--method: ', method) self.code.append(DispatchParentIL(variables.id(result), variables.id(name), method)) for i in range((len(node.args) + 1)): diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips deleted file mode 100644 index 543bb9a1..00000000 --- a/tests/codegen/arith.mips +++ /dev/null @@ -1,6463 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_7: .asciiz "0" -string_9: .asciiz "1" -string_11: .asciiz "2" -string_13: .asciiz "3" -string_15: .asciiz "4" -string_17: .asciiz "5" -string_19: .asciiz "6" -string_21: .asciiz "7" -string_23: .asciiz "8" -string_25: .asciiz "9" -string_37: .asciiz "" -string_38: .asciiz "9" -string_39: .asciiz "8" -string_40: .asciiz "7" -string_41: .asciiz "6" -string_42: .asciiz "5" -string_43: .asciiz "4" -string_44: .asciiz "3" -string_45: .asciiz "2" -string_46: .asciiz "1" -string_47: .asciiz "0" -string_49: .asciiz "-" -string_51: .asciiz "+" -string_56: .asciiz "-" -string_57: .asciiz "0" -string_59: .asciiz "" -string_60: .asciiz "\n\tTo add a number to " -string_61: .asciiz "...enter a:\n" -string_62: .asciiz "\tTo negate " -string_63: .asciiz "...enter b:\n" -string_64: .asciiz "\tTo find the difference between " -string_65: .asciiz "and another number...enter c:\n" -string_66: .asciiz "\tTo find the factorial of " -string_67: .asciiz "...enter d:\n" -string_68: .asciiz "\tTo square " -string_69: .asciiz "...enter e:\n" -string_70: .asciiz "\tTo cube " -string_71: .asciiz "...enter f:\n" -string_72: .asciiz "\tTo find out if " -string_73: .asciiz "is a multiple of 3...enter g:\n" -string_74: .asciiz "\tTo divide " -string_75: .asciiz "by 8...enter h:\n" -string_76: .asciiz "\tTo get a new number...enter j:\n" -string_77: .asciiz "\tTo quit...enter q:\n\n" -string_78: .asciiz "\n" -string_79: .asciiz "Please enter a number... " -string_90: .asciiz "Class type is now A\n" -string_91: .asciiz "Class type is now B\n" -string_92: .asciiz "Class type is now C\n" -string_93: .asciiz "Class type is now D\n" -string_94: .asciiz "Class type is now E\n" -string_95: .asciiz "Oooops\n" -string_96: .asciiz " " -string_98: .asciiz "number " -string_100: .asciiz "is odd!\n" -string_101: .asciiz "is even!\n" -string_102: .asciiz "a" -string_104: .asciiz "b" -string_106: .asciiz "c" -string_108: .asciiz "d" -string_110: .asciiz "e" -string_112: .asciiz "f" -string_114: .asciiz "g" -string_116: .asciiz "h" -string_118: .asciiz "j" -string_120: .asciiz "q" -string_122: .asciiz "number " -string_123: .asciiz "is equal to " -string_124: .asciiz "times 8 with a remainder of " -string_125: .asciiz "\n" -string_127: .asciiz "number " -string_128: .asciiz "is not divisible by 3.\n" -string_129: .asciiz "number " -string_130: .asciiz "is divisible by 3.\n" -string_135: .asciiz "Oooops\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -A_INH: -.word Object_INH -B_INH: -.word A_INH -C_INH: -.word B_INH -D_INH: -.word B_INH -E_INH: -.word D_INH -A2I_INH: -.word Object_INH -Main_INH: -.word IO_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -A_VT: -.word A_INH -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word A.method5 -B_VT: -.word B_INH -.word B.method5 -C_VT: -.word C_INH -.word C.method6 -.word C.method5 -D_VT: -.word D_INH -.word D.method7 -E_VT: -.word E_INH -.word E.method6 -A2I_VT: -.word A2I_INH -.word A2I.c2i -.word A2I.i2c -.word A2I.a2i -.word A2I.a2i_aux -.word A2I.i2a -.word A2I.i2a_aux -Main_VT: -.word Main_INH -.word Main.menu -.word Main.prompt -.word Main.get_int -.word Main.is_even -.word Main.class_type -.word Main.print -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 20 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -A.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -12($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A.value: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A.set_var: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A.method1: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A.method2: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -40($sp) -sw $a0, -4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, B_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result B.Constructor -la $v0, 1 -jal B.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -60($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A.method3: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -lw $a0, -4($sp) -lw $a1, -32($sp) -sw $a0, -4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, C_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result C.Constructor -la $v0, 1 -jal C.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A.method4: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_1 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -56($sp) -sw $a0, -4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, D_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result D.Constructor -la $v0, 1 -jal D.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -76($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_1 -_if_1: -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -64($sp) -sw $a0, -4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, D_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result D.Constructor -la $v0, 1 -jal D.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -84($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -_fi_1: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A.method5: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_2: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_2 -j _pool_2 -_body_2: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -60($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -64($sp) -sw $a0, -4($a1) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -72($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -76($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -28($sp) -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_2 -_pool_2: -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, E_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result E.Constructor -la $v0, 1 -jal E.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -B.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -B.method5: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -36($sp) -sw $a0, -4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, E_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result E.Constructor -la $v0, 1 -jal E.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -C.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -C.method6: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -lw $a0, -4($sp) -lw $a1, -32($sp) -sw $a0, -4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -C.method5: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -20($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -44($sp) -sw $a0, -4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, E_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result E.Constructor -la $v0, 1 -jal E.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -44($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -D.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -D.method7: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_3 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_5 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -84($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_6 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -92($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -100($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 5 offset 26 result D.method7 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal D.method7 -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -36($sp) -j _fi_6 -_if_6: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -40($sp) -_fi_6: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -56($sp) -j _fi_5 -_if_5: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -60($sp) -_fi_5: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -76($sp) -j _fi_4 -_if_4: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -80($sp) -_fi_4: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -96($sp) -j _fi_3 -_if_3: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -124($sp) -sw $a0, -4($sp) -#Args: 0 -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -132($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -#Dispatch in place -#obj 4 offset 33 result D.method7 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal D.method7 -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -112($sp) -_fi_3: -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -E.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -E.method6: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -div $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -36($sp) -sw $a0, -4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.c2i: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_7 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_9 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_10 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_11 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_12 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -68($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_13 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_14 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_15 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_16 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -100($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_17 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_18 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -116($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_19 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_20 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -132($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_21 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_22 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -148($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_23 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_24 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -164($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_25 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_26 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -184($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 46 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -j _fi_26 -_if_26: -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_26: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -52($sp) -j _fi_24 -_if_24: -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -56($sp) -_fi_24: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -72($sp) -j _fi_22 -_if_22: -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -76($sp) -_fi_22: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -92($sp) -j _fi_20 -_if_20: -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -96($sp) -_fi_20: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -112($sp) -j _fi_18 -_if_18: -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -116($sp) -_fi_18: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -132($sp) -j _fi_16 -_if_16: -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -136($sp) -_fi_16: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -152($sp) -j _fi_14 -_if_14: -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -156($sp) -_fi_14: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -172($sp) -j _fi_12 -_if_12: -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -176($sp) -_fi_12: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -192($sp) -j _fi_10 -_if_10: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -196($sp) -_fi_10: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -212($sp) -j _fi_8 -_if_8: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -216($sp) -_fi_8: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.i2c: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_27 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_28 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_29 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -68($sp) -sw $a0, -4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_30 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_31 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -100($sp) -sw $a0, -4($sp) -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_32 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -116($sp) -sw $a0, -4($sp) -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_33 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -132($sp) -sw $a0, -4($sp) -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_34 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -148($sp) -sw $a0, -4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_35 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -164($sp) -sw $a0, -4($sp) -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_36 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -184($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 46 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_37 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -j _fi_36 -_if_36: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_38 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_36: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -52($sp) -j _fi_35 -_if_35: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_39 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -56($sp) -_fi_35: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -72($sp) -j _fi_34 -_if_34: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_40 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -76($sp) -_fi_34: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -92($sp) -j _fi_33 -_if_33: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_41 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -96($sp) -_fi_33: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -112($sp) -j _fi_32 -_if_32: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_42 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -116($sp) -_fi_32: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -132($sp) -j _fi_31 -_if_31: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_43 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -136($sp) -_fi_31: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -152($sp) -j _fi_30 -_if_30: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_44 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -156($sp) -_fi_30: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -172($sp) -j _fi_29 -_if_29: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_45 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -176($sp) -_fi_29: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -192($sp) -j _fi_28 -_if_28: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_46 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -196($sp) -_fi_28: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -212($sp) -j _fi_27 -_if_27: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_47 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -216($sp) -_fi_27: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.a2i: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_48 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_49 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -24($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_50 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -72($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_51 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -24($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_52 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -96($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -96($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 25 result A2I.a2i_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.a2i_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -40($sp) -j _fi_52 -_if_52: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -108($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -112($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -128($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 7 offset 6 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 9 offset 34 result A2I.a2i_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.a2i_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -76($sp) -_fi_52: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -104($sp) -j _fi_50 -_if_50: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -148($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -152($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -168($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 7 offset 6 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 9 offset 44 result A2I.a2i_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.a2i_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -40($sp) -lw $a0, -4($sp) -sw $a0, -144($sp) -_fi_50: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -164($sp) -j _fi_48 -_if_48: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -168($sp) -_fi_48: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.a2i_aux: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_53: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_53 -j _pool_53 -_body_53: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -72($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -88($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -96($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 6 offset 25 result A2I.c2i -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.c2i -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, 7 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -40($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -100($sp) -sw $a0, -4($a1) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -108($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -112($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -56($sp) -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_53 -_pool_53: -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.i2a: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_54 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_55 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_56 -sw $a0, -4($sp) -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -lw $a0, 3 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 6 offset 19 result A2I.i2a_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.i2a_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 8 offset 7 result String.concat -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.concat -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -48($sp) -j _fi_55 -_if_55: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 22 result A2I.i2a_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.i2a_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -60($sp) -_fi_55: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -76($sp) -j _fi_54 -_if_54: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_57 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -80($sp) -_fi_54: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.i2a_aux: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_58 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 13 result A2I.i2a_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.i2a_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -76($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -20($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 7 offset 20 result A2I.i2c -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.i2c -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 11 offset 8 result String.concat -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.concat -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_58 -_if_58: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_59 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_58: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -12($sp) -sw $a0, 16($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.menu: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_60 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 7 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_61 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 9 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_62 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 11 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 13 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_63 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 15 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_64 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 17 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -76($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 19 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_65 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 21 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_66 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 23 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -100($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 25 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_67 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 27 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_68 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 29 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -124($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 31 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_69 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 33 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_70 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 35 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -148($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 37 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_71 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 39 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_72 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 41 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -172($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 43 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_73 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 45 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_74 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 47 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -196($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 49 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_75 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 51 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_76 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 53 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_77 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 55 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 56 result IO.in_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.in_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -216($sp) -addiu $sp, $sp, -108 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.prompt: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_78 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_79 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 7 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 8 result IO.in_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.in_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -24($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.get_int: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.is_even: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_80 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_81 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_82 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -80($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 21 result Main.is_even -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.is_even -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -j _fi_82 -_if_82: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_82: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -52($sp) -j _fi_81 -_if_81: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -56($sp) -_fi_81: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -72($sp) -j _fi_80 -_if_80: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -104($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -#Dispatch in place -#obj 3 offset 26 result Main.is_even -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.is_even -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -84($sp) -_fi_80: -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.class_type: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, A -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_83 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -12($sp) -la $a1, B -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_84 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -la $a1, C -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_85 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -la $a1, D -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_86 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -la $a1, E -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_87 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -la $a1, Object -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_88 -addiu $sp, $sp, -4 -branch_83: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_90 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 15 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -branch_84: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -16($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_91 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 18 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -addiu $sp, $sp, -12 -branch_85: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -28($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_92 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 21 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -addiu $sp, $sp, -12 -branch_86: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -72($sp) -sw $a0, -40($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_93 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 24 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -48($sp) -addiu $sp, $sp, -12 -branch_87: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -52($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_94 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 27 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -60($sp) -addiu $sp, $sp, -12 -branch_88: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -96($sp) -sw $a0, -64($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_95 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 30 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -72($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 5 offset 11 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_96 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 13 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, 8($a1) -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_97: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, 16($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -bnez $a0, _body_97 -j _pool_97 -_body_97: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_98 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 11 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 13 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 17 result Main.is_even -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.is_even -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_99 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_100 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 19 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_99 -_if_99: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_101 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 21 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -_fi_99: -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -92($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 23 result Main.class_type -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.class_type -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 24 result Main.menu -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.menu -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -lw $a1, -96($sp) -sw $a0, 4($a1) -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -108($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_102 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_103 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -124($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_104 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_105 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -140($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_106 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_107 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -156($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_108 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_109 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -172($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_110 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_111 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -188($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_112 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_113 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -204($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_114 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_115 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -220($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_116 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_117 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -236($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_118 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_119 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -252($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_120 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_121 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -280($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 6 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -280($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -40($sp) -j _fi_121 -_if_121: -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -284($sp) -sw $a0, 16($a1) -lw $a0, -4($sp) -sw $a0, -44($sp) -_fi_121: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -60($sp) -j _fi_119 -_if_119: -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -296($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -72($sp) -_fi_119: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -88($sp) -j _fi_117 -_if_117: -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, E_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result E.Constructor -la $v0, 1 -jal E.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -332($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 6 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -332($sp) -sw $a0, -4($a1) -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_122 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 88 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -360($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 90 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_123 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 92 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -376($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 94 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_124 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 96 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -408($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -412($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 103 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_125 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 105 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -52($sp) -addiu $sp, $sp, -24 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -344($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -344($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -40($sp) -addiu $sp, $sp, -12 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -96($sp) -_fi_117: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -112($sp) -j _fi_115 -_if_115: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, D_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result D.Constructor -la $v0, 1 -jal D.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -332($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 6 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_126 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_127 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 86 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -352($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 88 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_128 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 90 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -56($sp) -j _fi_126 -_if_126: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_129 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 93 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -380($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 95 result Main.print -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_130 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 97 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -84($sp) -_fi_126: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -196($sp) -_fi_115: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -212($sp) -j _fi_113 -_if_113: -#Assignment -#Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, C_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result C.Constructor -la $v0, 1 -jal C.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -412($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#DispatchParent in place -#obj 6 offset 3 result method5.C -la $v0, 3 -jal method5.C -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -412($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -236($sp) -_fi_113: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -252($sp) -j _fi_111 -_if_111: -#Assignment -#Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, C_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result C.Constructor -la $v0, 1 -jal C.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -436($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#DispatchParent in place -#obj 6 offset 3 result method5.C -la $v0, 3 -jal method5.C -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -436($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -276($sp) -_fi_111: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -292($sp) -j _fi_109 -_if_109: -#Assignment -#Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, C_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result C.Constructor -la $v0, 1 -jal C.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -460($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#DispatchParent in place -#obj 6 offset 3 result method5.C -la $v0, 3 -jal method5.C -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -460($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -316($sp) -_fi_109: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -332($sp) -j _fi_107 -_if_107: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 121 result Main.get_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.get_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -484($sp) -sw $a0, 12($a1) -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, D_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result D.Constructor -la $v0, 1 -jal D.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -508($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -516($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 8 offset 5 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -lw $a1, -516($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -56($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -388($sp) -_fi_107: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -404($sp) -j _fi_105 -_if_105: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -524($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, C -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_131 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -12($sp) -la $a1, A -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_132 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -la $a1, Object -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_133 -addiu $sp, $sp, -4 -branch_131: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -560($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -12 -branch_132: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -24($sp) -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -12($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -580($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -40($sp) -addiu $sp, $sp, -12 -branch_133: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -44($sp) -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_135 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 149 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 150 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -64($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -492($sp) -_fi_105: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -508($sp) -j _fi_103 -_if_103: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 157 result Main.get_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.get_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -628($sp) -sw $a0, 12($a1) -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, B_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result B.Constructor -la $v0, 1 -jal B.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -652($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -660($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 8 offset 5 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -lw $a1, -660($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -56($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -564($sp) -_fi_103: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -628($sp) -addiu $sp, $sp, -24 -addiu $sp, $sp, -8 -j _loop_97 -_pool_97: -lw $a0, -4($sp) -sw $a0, -652($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips deleted file mode 100644 index 6fb9fe8f..00000000 --- a/tests/codegen/atoi.mips +++ /dev/null @@ -1,2186 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "0" -string_3: .asciiz "1" -string_5: .asciiz "2" -string_7: .asciiz "3" -string_9: .asciiz "4" -string_11: .asciiz "5" -string_13: .asciiz "6" -string_15: .asciiz "7" -string_17: .asciiz "8" -string_19: .asciiz "9" -string_31: .asciiz "" -string_32: .asciiz "9" -string_33: .asciiz "8" -string_34: .asciiz "7" -string_35: .asciiz "6" -string_36: .asciiz "5" -string_37: .asciiz "4" -string_38: .asciiz "3" -string_39: .asciiz "2" -string_40: .asciiz "1" -string_41: .asciiz "0" -string_43: .asciiz "-" -string_45: .asciiz "+" -string_50: .asciiz "-" -string_51: .asciiz "0" -string_53: .asciiz "" -string_54: .asciiz " == " -string_55: .asciiz "\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -A2I_INH: -.word Object_INH -Main_INH: -.word IO_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -A2I_VT: -.word A2I_INH -.word A2I.c2i -.word A2I.i2c -.word A2I.a2i -.word A2I.a2i_aux -.word A2I.i2a -.word A2I.i2a_aux -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -A2I.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.c2i: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_1 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_2 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_3 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_5 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_6 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_7 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_9 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_10 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_11 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_12 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -68($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_13 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_14 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -76($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_15 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_16 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_17 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_18 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -92($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_19 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_20 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -104($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 26 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_20 -_if_20: -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_20: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_18 -_if_18: -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_18: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_16 -_if_16: -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_16: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -j _fi_14 -_if_14: -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -32($sp) -_fi_14: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -j _fi_12 -_if_12: -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_12: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -j _fi_10 -_if_10: -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -40($sp) -_fi_10: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -40($sp) -j _fi_8 -_if_8: -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -44($sp) -_fi_8: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -44($sp) -j _fi_6 -_if_6: -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -48($sp) -_fi_6: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -48($sp) -j _fi_4 -_if_4: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -52($sp) -_fi_4: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -52($sp) -j _fi_2 -_if_2: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -56($sp) -_fi_2: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.i2c: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_21 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_22 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_23 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_24 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_25 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_26 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -68($sp) -sw $a0, -4($sp) -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_27 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -76($sp) -sw $a0, -4($sp) -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_28 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_29 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -92($sp) -sw $a0, -4($sp) -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_30 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -104($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 26 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_31 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_30 -_if_30: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_32 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_30: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_29 -_if_29: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_33 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_29: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_28 -_if_28: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_34 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_28: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -j _fi_27 -_if_27: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_35 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -32($sp) -_fi_27: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -j _fi_26 -_if_26: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_36 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_26: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -j _fi_25 -_if_25: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_37 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -40($sp) -_fi_25: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -40($sp) -j _fi_24 -_if_24: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_38 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -44($sp) -_fi_24: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -44($sp) -j _fi_23 -_if_23: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_39 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -48($sp) -_fi_23: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -48($sp) -j _fi_22 -_if_22: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_40 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -52($sp) -_fi_22: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -52($sp) -j _fi_21 -_if_21: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_41 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -56($sp) -_fi_21: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.a2i: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_42 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_43 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_44 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_45 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_46 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 12 result A2I.a2i_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.a2i_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_46 -_if_46: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -72($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 3 offset 14 result A2I.a2i_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.a2i_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_46: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_44 -_if_44: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -76($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 3 offset 15 result A2I.a2i_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.a2i_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -12($sp) -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_44: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -j _fi_42 -_if_42: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -40($sp) -_fi_42: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.a2i_aux: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_47: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_47 -j _pool_47 -_body_47: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -68($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -72($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -80($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 3 offset 18 result A2I.c2i -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.c2i -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, 3 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -60($sp) -sw $a0, -4($a1) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -64($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_47 -_pool_47: -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.i2a: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_48 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_49 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_50 -sw $a0, -4($sp) -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -lw $a0, 3 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 13 result A2I.i2a_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.i2a_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 4 result String.concat -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.concat -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_49 -_if_49: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 13 result A2I.i2a_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.i2a_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_49: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -j _fi_48 -_if_48: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_51 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -32($sp) -_fi_48: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -A2I.i2a_aux: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_52 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 11 result A2I.i2a_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.i2a_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 13 result A2I.i2c -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal A2I.i2c -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 3 result String.concat -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.concat -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_52 -_if_52: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_53 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_52: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 7 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_54 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 7 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 7 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_55 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 7 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -4($sp) -addiu $sp, $sp, -16 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips deleted file mode 100644 index b7270f7e..00000000 --- a/tests/codegen/book_list.mips +++ /dev/null @@ -1,1376 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "title: " -string_2: .asciiz "\n" -string_3: .asciiz "author: " -string_4: .asciiz "\n" -string_5: .asciiz "periodical: " -string_6: .asciiz "\n" -string_10: .asciiz "- dynamic type was Book -\n" -string_11: .asciiz "- dynamic type was Article -\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Book_INH: -.word IO_INH -Article_INH: -.word Book_INH -BookList_INH: -.word IO_INH -Cons_INH: -.word BookList_INH -Nil_INH: -.word BookList_INH -Main_INH: -.word Object_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Book_VT: -.word Book_INH -.word Book.initBook -.word Book.print -Article_VT: -.word Article_INH -.word Article.initArticle -.word Article.print -BookList_VT: -.word BookList_INH -.word BookList.isNil -.word BookList.cons -.word BookList.car -.word BookList.cdr -.word BookList.print_list -Cons_VT: -.word Cons_INH -.word Cons.isNil -.word Cons.init -.word Cons.car -.word Cons.cdr -.word Cons.print_list -Nil_VT: -.word Nil_INH -.word Nil.isNil -.word Nil.print_list -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -Book.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Book.initBook: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, 4($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Book.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_1 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 8 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 4 offset 2 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_2 -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 2 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_3 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 10 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 4 offset 2 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_4 -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 2 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Article.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Article.initArticle: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 10 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -36($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Article.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#DispatchParent in place -#obj 2 offset 1 result print.self -la $v0, 1 -jal print.self -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_5 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 9 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 4 offset 2 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_6 -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 2 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -BookList.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -BookList.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -BookList.cons: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -BookList.car: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Book_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Book.Constructor -la $v0, 1 -jal Book.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -BookList.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, BookList_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result BookList.Constructor -la $v0, 1 -jal BookList.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -BookList.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 4 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, 4($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.car: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Book -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_7 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Article -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_8 -addiu $sp, $sp, -4 -branch_7: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_10 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 10 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -branch_8: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_11 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 10 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, Nil_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Nil.Constructor -la $v0, 1 -jal Nil.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -32($sp) -sw $a0, 4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips deleted file mode 100644 index fd0e5b2f..00000000 --- a/tests/codegen/cells.mips +++ /dev/null @@ -1,1395 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "\n" -string_4: .asciiz "X" -string_6: .asciiz "X" -string_8: .asciiz "X" -string_11: .asciiz "." -string_12: .asciiz "X" -string_14: .asciiz " X " -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -CellularAutomaton_INH: -.word IO_INH -Main_INH: -.word Object_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -CellularAutomaton_VT: -.word CellularAutomaton_INH -.word CellularAutomaton.init -.word CellularAutomaton.print -.word CellularAutomaton.num_cells -.word CellularAutomaton.cell -.word CellularAutomaton.cell_left_neighbor -.word CellularAutomaton.cell_right_neighbor -.word CellularAutomaton.cell_at_next_evolution -.word CellularAutomaton.evolve -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -CellularAutomaton.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_1 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 2 result String.concat -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.concat -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 6 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.num_cells: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -16($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.cell: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.cell_left_neighbor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_2 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 8 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_2 -_if_2: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 12 result CellularAutomaton.num_cells -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.num_cells -sw $a1, ($sp) -addiu $sp, $sp, 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 11 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_2: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.cell_right_neighbor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 9 result CellularAutomaton.num_cells -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.num_cells -sw $a1, ($sp) -addiu $sp, $sp, 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, 3 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_3 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 9 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_3 -_if_3: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 3 offset 11 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_3: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.cell_at_next_evolution: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 12 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_4 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_5 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_5 -_if_5: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_5: -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 15 result CellularAutomaton.cell_left_neighbor -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell_left_neighbor -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_6 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_7 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_7 -_if_7: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_7: -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -28($sp) -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 16 result CellularAutomaton.cell_right_neighbor -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell_right_neighbor -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_8 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_9 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_9 -_if_9: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_9: -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -36($sp) -addiu $sp, $sp, -8 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -36($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_10 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_11 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -36($sp) -j _fi_10 -_if_10: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_12 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -40($sp) -_fi_10: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.evolve: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_13: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -48($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_13 -j _pool_13 -_body_13: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 17 result CellularAutomaton.cell_at_next_evolution -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell_at_next_evolution -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result String.concat -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.concat -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -56($sp) -sw $a0, -4($a1) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -60($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_13 -_pool_13: -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -48($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -48($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -12 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, CellularAutomaton_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result CellularAutomaton.Constructor -la $v0, 1 -jal CellularAutomaton.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_14 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -16($sp) -sw $a0, 4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_15: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_15 -j _pool_15 -_body_15: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -48($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -52($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -addiu $sp, $sp, -8 -j _loop_15 -_pool_15: -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -addiu $sp, $sp, -16 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips deleted file mode 100644 index a22959cd..00000000 --- a/tests/codegen/complex.mips +++ /dev/null @@ -1,870 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_2: .asciiz "=(\n" -string_3: .asciiz "=)\n" -string_5: .asciiz "+" -string_6: .asciiz "I" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Complex_INH: -.word IO_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_VT: -.word Main_INH -.word Main.main -Complex_VT: -.word Complex_INH -.word Complex.init -.word Complex.print -.word Complex.reflect_0 -.word Complex.reflect_X -.word Complex.reflect_Y - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_1 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_2 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 8 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -8($sp) -j _fi_1 -_if_1: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_3 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 8 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -8($sp) -_fi_1: -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Complex.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Complex.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Complex.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 10 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_5 -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 2 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 4 offset 2 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_6 -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 2 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_4 -_if_4: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 9 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_4: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Complex.reflect_0: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -lw $a0, 3 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -lw $a0, 3 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Complex.reflect_X: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -lw $a0, 3 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Complex.reflect_Y: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -lw $a0, 3 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips deleted file mode 100644 index a2aa33ff..00000000 --- a/tests/codegen/fib.mips +++ /dev/null @@ -1,564 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "Enter n to find nth fibonacci number!\n" -string_2: .asciiz "\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_VT: -.word Main_INH -.word Main.main -.word Main.fib - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_1 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 6 result IO.in_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.in_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 5 result Main.fib -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.fib -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 1 offset 4 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_2 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 4 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -8($sp) -sw $a0, -4($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.fib: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_3: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -li $a1, 1 -sub $a0, $a1, $a0 -sw $a0, -8($sp) -lw $a0, -4($sp) -bnez $a0, _body_3 -j _pool_3 -_body_3: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -48($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -44($sp) -sw $a0, -4($a1) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -44($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -52($sp) -sw $a0, -4($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -56($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -16 -addiu $sp, $sp, -8 -j _loop_3 -_pool_3: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips deleted file mode 100644 index 4cfbc2c8..00000000 --- a/tests/codegen/graph.mips +++ /dev/null @@ -1,3755 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz " (" -string_2: .asciiz "," -string_3: .asciiz ")" -string_5: .asciiz "\n" -string_6: .asciiz "\n" -string_8: .asciiz "\n" -string_9: .asciiz "" -string_11: .asciiz "0" -string_13: .asciiz "1" -string_15: .asciiz "2" -string_17: .asciiz "3" -string_19: .asciiz "4" -string_21: .asciiz "5" -string_23: .asciiz "6" -string_25: .asciiz "7" -string_27: .asciiz "8" -string_29: .asciiz "9" -string_32: .asciiz "-" -string_34: .asciiz " " -string_37: .asciiz " " -string_39: .asciiz "," -string_42: .asciiz "" -string_43: .asciiz "" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Graph_INH: -.word Object_INH -Vertice_INH: -.word IO_INH -Edge_INH: -.word IO_INH -EList_INH: -.word IO_INH -ECons_INH: -.word EList_INH -VList_INH: -.word IO_INH -VCons_INH: -.word VList_INH -Parse_INH: -.word IO_INH -Main_INH: -.word Parse_INH -BoolOp_INH: -.word Object_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Graph_VT: -.word Graph_INH -.word Graph.add_vertice -.word Graph.print_E -.word Graph.print_V -Vertice_VT: -.word Vertice_INH -.word Vertice.outgoing -.word Vertice.number -.word Vertice.init -.word Vertice.add_out -.word Vertice.print -Edge_VT: -.word Edge_INH -.word Edge.init -.word Edge.print -EList_VT: -.word EList_INH -.word EList.isNil -.word EList.head -.word EList.tail -.word EList.cons -.word EList.append -.word EList.print -ECons_VT: -.word ECons_INH -.word ECons.isNil -.word ECons.head -.word ECons.tail -.word ECons.init -.word ECons.print -VList_VT: -.word VList_INH -.word VList.isNil -.word VList.head -.word VList.tail -.word VList.cons -.word VList.print -VCons_VT: -.word VCons_INH -.word VCons.isNil -.word VCons.head -.word VCons.tail -.word VCons.init -.word VCons.print -Parse_VT: -.word Parse_INH -.word Parse.read_input -.word Parse.parse_line -.word Parse.c2i -.word Parse.a2i -.word Parse.a2i_aux -Main_VT: -.word Main_INH -.word Main.main -BoolOp_VT: -.word BoolOp_INH -.word BoolOp.and -.word BoolOp.or - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -Graph.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, VList_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result VList.Constructor -la $v0, 1 -jal VList.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -12($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, EList_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result EList.Constructor -la $v0, 1 -jal EList.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -16($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Graph.add_vertice: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 8($a1) -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, 4($a1) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Graph.print_E: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -16($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Graph.print_V: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -16($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Vertice.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, EList_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result EList.Constructor -la $v0, 1 -jal EList.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -12($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Vertice.outgoing: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Vertice.number: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Vertice.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Vertice.add_out: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Vertice.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 6 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Edge.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Edge.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 4($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -32($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -36($sp) -sw $a0, 12($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -16 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Edge.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_1 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 6 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 8 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_2 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 10 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -48($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 12 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_3 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 14 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 16 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -52($sp) -addiu $sp, $sp, -24 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -EList.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -EList.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -EList.head: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -EList.tail: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -EList.cons: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, ECons_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result ECons.Constructor -la $v0, 1 -jal ECons.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -EList.append: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -bnez $a0, _if_4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 9 result EList.tail -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal EList.tail -sw $a1, ($sp) -addiu $sp, $sp, 0 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 10 result EList.head -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal EList.head -sw $a1, ($sp) -addiu $sp, $sp, 0 -#Dispatch in place -#obj 5 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_4 -_if_4: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_4: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -EList.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_5 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 5 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -ECons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -ECons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -ECons.head: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -ECons.tail: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -ECons.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, -4($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -ECons.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VList.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VList.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VList.head: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VList.tail: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VList.cons: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, VCons_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result VCons.Constructor -la $v0, 1 -jal VCons.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VList.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_6 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 5 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VCons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VCons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VCons.head: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VCons.tail: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VCons.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, -4($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -VCons.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Parse.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, BoolOp_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result BoolOp.Constructor -la $v0, 1 -jal BoolOp.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -12($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Parse.read_input: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_7: -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Args: 0 -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_8 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -li $a1, 1 -sub $a0, $a1, $a0 -sw $a0, -8($sp) -#Args: 1 -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -60($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_9 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -li $a1, 1 -sub $a0, $a1, $a0 -sw $a0, -8($sp) -#Dispatch in place -#obj 6 offset 5 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -bnez $a0, _body_7 -j _pool_7 -_body_7: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 17 result Parse.parse_line -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Parse.parse_line -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 16 result IO.in_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.in_string -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $a0, -4($sp) -lw $a1, -64($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_7 -_pool_7: -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Parse.parse_line: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_10: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -li $a1, 1 -sub $a0, $a1, $a0 -sw $a0, -8($sp) -lw $a0, -4($sp) -bnez $a0, _body_10 -j _pool_10 -_body_10: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 16 -syscall -sw $v0, -4($sp) -la $a1, Edge_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Edge.Constructor -la $v0, 1 -jal Edge.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -80($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -80($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 2 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -84($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 5 offset 4 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -16 -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -8 -j _loop_10 -_pool_10: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Parse.c2i: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_11 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_12 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_13 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_14 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_15 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_16 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_17 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_18 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_19 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_20 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_21 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_22 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -68($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_23 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_24 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -76($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_25 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_26 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_27 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_28 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -92($sp) -sw $a0, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_29 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_30 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -104($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 26 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_30 -_if_30: -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_30: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_28 -_if_28: -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_28: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_26 -_if_26: -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_26: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -j _fi_24 -_if_24: -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -32($sp) -_fi_24: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -j _fi_22 -_if_22: -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_22: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -j _fi_20 -_if_20: -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -40($sp) -_fi_20: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -40($sp) -j _fi_18 -_if_18: -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -44($sp) -_fi_18: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -44($sp) -j _fi_16 -_if_16: -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -48($sp) -_fi_16: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -48($sp) -j _fi_14 -_if_14: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -52($sp) -_fi_14: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -52($sp) -j _fi_12 -_if_12: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -56($sp) -_fi_12: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Parse.a2i: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_31 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_32 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_33 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_34 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_35 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 12 result Parse.a2i_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Parse.a2i_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_35 -_if_35: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -72($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 3 offset 14 result Parse.a2i -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Parse.a2i -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_35: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_33 -_if_33: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -76($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 3 offset 15 result Parse.a2i_aux -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Parse.a2i_aux -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -12($sp) -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_33: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -j _fi_31 -_if_31: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -40($sp) -_fi_31: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Parse.a2i_aux: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_36: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_36 -j _pool_36 -_body_36: -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_37 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_38 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -76($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_39 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_40 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -88($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -92($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -96($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -104($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 3 offset 24 result Parse.c2i -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Parse.c2i -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, 3 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -84($sp) -sw $a0, -4($a1) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -92($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -88($sp) -sw $a0, -4($a1) -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -100($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -104($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_41 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_42 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_41 -_if_41: -#Assignment -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_43 -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -104($sp) -sw $a0, 8($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_41: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_40 -_if_40: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -92($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -104($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -112($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -116($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -lw $a1, -92($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -96($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -96($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_40: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_38 -_if_38: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -88($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -100($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -108($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -112($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -lw $a1, -88($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -92($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -92($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_38: -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_36 -_pool_36: -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -lw $a1, -8($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -BoolOp.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -BoolOp.and: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -bnez $a0, _if_44 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_44 -_if_44: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_44: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -BoolOp.or: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -bnez $a0, _if_45 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_45 -_if_45: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_45: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips deleted file mode 100644 index e0431041..00000000 --- a/tests/codegen/hairyscary.mips +++ /dev/null @@ -1,1340 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_13: .asciiz "do nothing" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Foo_INH: -.word Bazz_INH -Bar_INH: -.word Razz_INH -Razz_INH: -.word Foo_INH -Bazz_INH: -.word IO_INH -Main_INH: -.word Object_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Foo_VT: -.word Foo_INH -.word Foo.doh -Bazz_VT: -.word Bazz_INH -.word Bazz.printh -.word Bazz.doh -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 20 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -Foo.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Razz -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_1 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Foo -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_2 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Bar -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_3 -addiu $sp, $sp, -4 -branch_1: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Bar_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bar.Constructor -la $v0, 1 -jal Bar.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -branch_2: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Razz_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Razz.Constructor -la $v0, 1 -jal Razz.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -branch_3: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -lw $a1, -16($sp) -sw $a0, 4($a1) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 9 result Foo.doh -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Foo.doh -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $a0, 3 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 9 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, 0 -lw $a0, 3 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -20($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Foo.doh: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, -4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bar.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 4 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, 0 -lw $a0, -4($sp) -lw $a1, -16($sp) -sw $a0, 4($a1) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 6 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, 0 -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Razz.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Razz -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_5 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Bar -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_6 -addiu $sp, $sp, -4 -branch_5: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Bar_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bar.Constructor -la $v0, 1 -jal Bar.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -branch_6: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -lw $a1, -16($sp) -sw $a0, 4($a1) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#DispatchParent in place -#obj 2 offset 1 result doh.a -la $v0, 1 -jal doh.a -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 9 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, 0 -lw $a0, 3 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 9 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, 0 -lw $a0, 3 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -20($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bazz.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -12($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Bazz -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_8 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Razz -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_9 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Foo -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_10 -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -8($sp) -la $a1, Bar -la $t0, inherit -jalr $ra, $t0 -sw $v0, -4($sp) -lw $a0, -4($sp) -bnez $a0, branch_11 -addiu $sp, $sp, -4 -branch_8: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Foo_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Foo.Constructor -la $v0, 1 -jal Foo.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -branch_9: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Bar_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bar.Constructor -la $v0, 1 -jal Bar.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -branch_10: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Razz_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Razz.Constructor -la $v0, 1 -jal Razz.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -branch_11: -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 8($a1) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 7 result Bazz.printh -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Bazz.printh -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 12($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bazz.printh: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 6 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bazz.doh: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 16 -syscall -sw $v0, -4($sp) -la $a1, Bazz_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bazz.Constructor -la $v0, 1 -jal Bazz.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -12($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Foo_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Foo.Constructor -la $v0, 1 -jal Foo.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -16($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Razz_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Razz.Constructor -la $v0, 1 -jal Razz.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 12($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Bar_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bar.Constructor -la $v0, 1 -jal Bar.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, 16($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_13 -sw $a0, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips deleted file mode 100644 index c432f6db..00000000 --- a/tests/codegen/hello_world.mips +++ /dev/null @@ -1,355 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "Hello, World.\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_1 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 4 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips deleted file mode 100644 index 9adbdd3a..00000000 --- a/tests/codegen/life.mips +++ /dev/null @@ -1,5675 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_7: .asciiz "\n" -string_9: .asciiz "\n" -string_10: .asciiz "\n" -string_12: .asciiz " " -string_14: .asciiz " " -string_16: .asciiz " " -string_18: .asciiz " " -string_21: .asciiz " " -string_22: .asciiz " " -string_25: .asciiz " " -string_26: .asciiz " " -string_29: .asciiz " " -string_30: .asciiz " " -string_33: .asciiz " " -string_34: .asciiz " " -string_37: .asciiz " " -string_38: .asciiz " " -string_39: .asciiz "X" -string_41: .asciiz "X" -string_43: .asciiz "X" -string_45: .asciiz "X" -string_47: .asciiz "X" -string_49: .asciiz "X" -string_51: .asciiz "X" -string_53: .asciiz "X" -string_57: .asciiz "-" -string_58: .asciiz "X" -string_60: .asciiz "-" -string_61: .asciiz "X" -string_62: .asciiz "X" -string_64: .asciiz "\nPlease chose a number:\n" -string_65: .asciiz "\t1: A cross\n" -string_66: .asciiz "\t2: A slash from the upper left to lower right\n" -string_67: .asciiz "\t3: A slash from the upper right to lower left\n" -string_68: .asciiz "\t4: An X\n" -string_69: .asciiz "\t5: A greater than sign \n" -string_70: .asciiz "\t6: A less than sign\n" -string_71: .asciiz "\t7: Two greater than signs\n" -string_72: .asciiz "\t8: Two less than signs\n" -string_73: .asciiz "\t9: A 'V'\n" -string_74: .asciiz "\t10: An inverse 'V'\n" -string_75: .asciiz "\t11: Numbers 9 and 10 combined\n" -string_76: .asciiz "\t12: A full grid\n" -string_77: .asciiz "\t13: A 'T'\n" -string_78: .asciiz "\t14: A plus '+'\n" -string_79: .asciiz "\t15: A 'W'\n" -string_80: .asciiz "\t16: An 'M'\n" -string_81: .asciiz "\t17: An 'E'\n" -string_82: .asciiz "\t18: A '3'\n" -string_83: .asciiz "\t19: An 'O'\n" -string_84: .asciiz "\t20: An '8'\n" -string_85: .asciiz "\t21: An 'S'\n" -string_86: .asciiz "Your choice => " -string_87: .asciiz "\n" -string_109: .asciiz " " -string_110: .asciiz " XXXX X XX X XXXX " -string_111: .asciiz " XX X XX X XX X XX X XX " -string_112: .asciiz " XX X XX X XX " -string_113: .asciiz "XXX X X X X XXXX " -string_114: .asciiz "XXXXX X XXXXX X XXXX" -string_115: .asciiz " X X X X X X X" -string_116: .asciiz "X X X X X X X " -string_117: .asciiz " X X XXXXX X X " -string_118: .asciiz "XXXXX X X X X " -string_119: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" -string_120: .asciiz "X X X X X X X X" -string_121: .asciiz " X X X X X" -string_122: .asciiz "X X X X X " -string_123: .asciiz " X XX X X X " -string_124: .asciiz "X X X XX X " -string_125: .asciiz " X X X X X" -string_126: .asciiz "X X X X X " -string_127: .asciiz "X X X X X X X X X" -string_128: .asciiz "X X X X X" -string_129: .asciiz " X X X X X " -string_130: .asciiz " XX XXXX XXXX XX " -string_131: .asciiz "Would you like to continue with the next generation? \n" -string_132: .asciiz "Please use lowercase y or n for your answer [y]: " -string_133: .asciiz "\n" -string_134: .asciiz "n" -string_136: .asciiz "\n\n" -string_137: .asciiz "Would you like to choose a background pattern? \n" -string_138: .asciiz "Please use lowercase y or n for your answer [n]: " -string_139: .asciiz "y" -string_141: .asciiz "Welcome to the Game of Life.\n" -string_142: .asciiz "There are many initial states to choose from. \n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Board_INH: -.word IO_INH -CellularAutomaton_INH: -.word Board_INH -Main_INH: -.word CellularAutomaton_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Board_VT: -.word Board_INH -.word Board.size_of_board -.word Board.board_init -CellularAutomaton_VT: -.word CellularAutomaton_INH -.word CellularAutomaton.init -.word CellularAutomaton.print -.word CellularAutomaton.num_cells -.word CellularAutomaton.cell -.word CellularAutomaton.north -.word CellularAutomaton.south -.word CellularAutomaton.east -.word CellularAutomaton.west -.word CellularAutomaton.northwest -.word CellularAutomaton.northeast -.word CellularAutomaton.southeast -.word CellularAutomaton.southwest -.word CellularAutomaton.neighbors -.word CellularAutomaton.cell_at_next_evolution -.word CellularAutomaton.evolve -.word CellularAutomaton.option -.word CellularAutomaton.prompt -.word CellularAutomaton.prompt2 -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -Board.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Board.size_of_board: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Board.board_init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 15 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_1 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 16 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_2 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 20 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_3 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -60($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 21 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 25 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_5 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -76($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 28 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_6 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -80($sp) -sw $a0, 4($a1) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -84($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -88($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -88($sp) -sw $a0, 12($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_6 -_if_6: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -84($sp) -sw $a0, 4($a1) -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -88($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -92($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -92($sp) -sw $a0, 12($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_6: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_5 -_if_5: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -80($sp) -sw $a0, 4($a1) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -84($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -88($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -88($sp) -sw $a0, 12($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_5: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_4 -_if_4: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -76($sp) -sw $a0, 4($a1) -#Assignment -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -80($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -84($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -84($sp) -sw $a0, 12($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_4: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_3 -_if_3: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -72($sp) -sw $a0, 4($a1) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -76($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -80($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -80($sp) -sw $a0, 12($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_3: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -j _fi_2 -_if_2: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -68($sp) -sw $a0, 4($a1) -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -72($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -76($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -76($sp) -sw $a0, 12($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -32($sp) -_fi_2: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -j _fi_1 -_if_1: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -64($sp) -sw $a0, 4($a1) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -68($sp) -sw $a0, 8($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -72($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -72($sp) -sw $a0, 12($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_1: -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -36($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 4($a1) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 8 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.print: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_7 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 10 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_8: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -48($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_8 -j _pool_8 -_body_8: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -72($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 3 offset 15 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_9 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 17 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -72($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -76($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -68($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -24($sp) -addiu $sp, $sp, -12 -addiu $sp, $sp, -8 -j _loop_8 -_pool_8: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_10 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 15 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -36($sp) -addiu $sp, $sp, -16 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.num_cells: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -16($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.cell: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_11 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_11 -_if_11: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_12 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_11: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.north: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_13 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 8 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_13 -_if_13: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_14 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_13: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.south: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_15 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 8 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_15 -_if_15: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_16 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_15: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.east: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -div $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_17 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 8 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_17 -_if_17: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_18 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_17: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.west: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_19 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -div $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_20 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 10 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_20 -_if_20: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_21 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_20: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_19 -_if_19: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_22 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_19: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.northwest: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_23 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -div $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_24 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 10 result CellularAutomaton.north -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.north -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_24 -_if_24: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_25 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_24: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_23 -_if_23: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_26 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_23: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.northeast: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_27 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -div $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_28 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 10 result CellularAutomaton.north -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.north -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_28 -_if_28: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_29 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_28: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_27 -_if_27: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_30 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_27: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.southeast: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_31 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -div $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_32 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 10 result CellularAutomaton.south -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.south -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_32 -_if_32: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_33 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_32: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_31 -_if_31: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_34 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_31: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.southwest: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_35 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -44($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -div $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_36 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 3 offset 10 result CellularAutomaton.south -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.south -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_36 -_if_36: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_37 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_36: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_35 -_if_35: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_38 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_35: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.neighbors: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -60($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 16 result CellularAutomaton.north -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.north -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_39 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_40 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_40 -_if_40: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_40: -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -72($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -72($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 19 result CellularAutomaton.south -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.south -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_41 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_42 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_42 -_if_42: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_42: -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -28($sp) -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -76($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -76($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 20 result CellularAutomaton.east -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.east -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_43 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_44 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_44 -_if_44: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_44: -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -36($sp) -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -80($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -80($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 21 result CellularAutomaton.west -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.west -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_45 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_46 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_46 -_if_46: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_46: -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -44($sp) -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -84($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 22 result CellularAutomaton.northeast -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.northeast -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_47 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_48 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_48 -_if_48: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_48: -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -52($sp) -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -88($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -88($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 23 result CellularAutomaton.northwest -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.northwest -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_49 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_50 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_50 -_if_50: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_50: -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -60($sp) -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -92($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -92($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 24 result CellularAutomaton.southeast -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.southeast -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_51 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_52 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_52 -_if_52: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_52: -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -68($sp) -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -96($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -96($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 25 result CellularAutomaton.southwest -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.southwest -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_53 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_54 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_54 -_if_54: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_54: -addiu $sp, $sp, -8 -lw $a0, 4 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -76($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -72($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.cell_at_next_evolution: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 8 result CellularAutomaton.neighbors -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.neighbors -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_55 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 11 result CellularAutomaton.neighbors -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.neighbors -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_56 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_57 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_56 -_if_56: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 15 result CellularAutomaton.cell -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell -sw $a1, ($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_58 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_59 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_60 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_59 -_if_59: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_61 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_59: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_56: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -j _fi_55 -_if_55: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_62 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_55: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.evolve: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_63: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -48($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_63 -j _pool_63 -_body_63: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 17 result CellularAutomaton.cell_at_next_evolution -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal CellularAutomaton.cell_at_next_evolution -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result String.concat -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.concat -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -56($sp) -sw $a0, -4($a1) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -60($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_63 -_pool_63: -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -48($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -48($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -12 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.option: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_64 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 9 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_65 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 11 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_66 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 13 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_67 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 15 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_68 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 17 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -72($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_69 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 19 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -80($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_70 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 21 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -88($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_71 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 23 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -96($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_72 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 25 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -104($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_73 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 27 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -112($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_74 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 29 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -120($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_75 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 31 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -128($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_76 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 33 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -136($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_77 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 35 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -144($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_78 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 37 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -152($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_79 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 39 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -160($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_80 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 41 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -168($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_81 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 43 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -176($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_82 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 45 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -184($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_83 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 47 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -192($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_84 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 49 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -200($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_85 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 51 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -208($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_86 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 53 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -216($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 54 result IO.in_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.in_int -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $a0, -4($sp) -lw $a1, -216($sp) -sw $a0, -4($a1) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -224($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_87 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 57 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -236($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_88 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -244($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_89 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -252($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_90 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -260($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_91 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -268($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_92 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -276($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_93 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -284($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_94 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -292($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_95 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -300($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_96 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -308($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_97 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -316($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 11 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_98 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -324($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 12 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_99 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -332($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 13 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_100 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -340($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 14 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_101 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -348($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 15 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_102 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -356($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 16 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_103 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -364($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 17 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_104 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -372($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 18 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_105 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -380($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 19 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_106 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -388($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 20 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_107 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -396($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 21 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_108 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_109 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_108 -_if_108: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_110 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_108: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_107 -_if_107: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_111 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_107: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -20($sp) -j _fi_106 -_if_106: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_112 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -24($sp) -_fi_106: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -24($sp) -j _fi_105 -_if_105: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_113 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -28($sp) -_fi_105: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -28($sp) -j _fi_104 -_if_104: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_114 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -32($sp) -_fi_104: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -j _fi_103 -_if_103: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_115 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -36($sp) -_fi_103: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -36($sp) -j _fi_102 -_if_102: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_116 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -40($sp) -_fi_102: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -40($sp) -j _fi_101 -_if_101: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_117 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -44($sp) -_fi_101: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -44($sp) -j _fi_100 -_if_100: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_118 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -48($sp) -_fi_100: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -48($sp) -j _fi_99 -_if_99: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_119 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -52($sp) -_fi_99: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -52($sp) -j _fi_98 -_if_98: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_120 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -56($sp) -_fi_98: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -56($sp) -j _fi_97 -_if_97: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_121 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -60($sp) -_fi_97: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -60($sp) -j _fi_96 -_if_96: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_122 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -64($sp) -_fi_96: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -64($sp) -j _fi_95 -_if_95: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_123 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -68($sp) -_fi_95: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -68($sp) -j _fi_94 -_if_94: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_124 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -72($sp) -_fi_94: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -72($sp) -j _fi_93 -_if_93: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_125 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -76($sp) -_fi_93: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -76($sp) -j _fi_92 -_if_92: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_126 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -80($sp) -_fi_92: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -80($sp) -j _fi_91 -_if_91: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_127 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -84($sp) -_fi_91: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -84($sp) -j _fi_90 -_if_90: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_128 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -88($sp) -_fi_90: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -88($sp) -j _fi_89 -_if_89: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_129 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -92($sp) -_fi_89: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -92($sp) -j _fi_88 -_if_88: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_130 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -96($sp) -_fi_88: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -292($sp) -addiu $sp, $sp, -104 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.prompt: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_131 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 9 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_132 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 11 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 12 result IO.in_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.in_string -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $a0, -4($sp) -lw $a1, -48($sp) -sw $a0, -4($a1) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_133 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 15 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_134 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_135 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_135 -_if_135: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_135: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -44($sp) -addiu $sp, $sp, -20 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.prompt2: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_136 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 8 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_137 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 10 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_138 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 12 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -52($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 13 result IO.in_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.in_string -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $a0, -4($sp) -lw $a1, -52($sp) -sw $a0, -4($a1) -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_139 -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_140 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_140 -_if_140: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_140: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -44($sp) -addiu $sp, $sp, -20 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_141 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 10 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_142 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 10 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_143: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 10 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -bnez $a0, _body_143 -j _pool_143 -_body_143: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -44($sp) -sw $a0, -4($a1) -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 12 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -lw $a1, -44($sp) -sw $a0, -4($a1) -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, CellularAutomaton_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result CellularAutomaton.Constructor -la $v0, 1 -jal CellularAutomaton.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -48($sp) -sw $a0, 4($a1) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_144: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -60($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -bnez $a0, _body_144 -j _pool_144 -_body_144: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 17 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -bnez $a0, _if_145 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -68($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -8($sp) -j _fi_145 -_if_145: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -80($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -84($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -_fi_145: -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_144 -_pool_144: -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -20 -addiu $sp, $sp, -8 -j _loop_143 -_pool_143: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -4($sp) -addiu $sp, $sp, -16 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips deleted file mode 100644 index 5afb9a9e..00000000 --- a/tests/codegen/list.mips +++ /dev/null @@ -1,971 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_2: .asciiz " " -string_3: .asciiz "\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -List_INH: -.word Object_INH -Cons_INH: -.word List_INH -Main_INH: -.word IO_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -List_VT: -.word List_INH -.word List.isNil -.word List.head -.word List.tail -.word List.cons -Cons_VT: -.word Cons_INH -.word Cons.isNil -.word Cons.head -.word Cons.tail -.word Cons.init -Main_VT: -.word Main_INH -.word Main.print_list -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -List.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.head: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.tail: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.cons: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.head: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.tail: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, 4($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -bnez $a0, _if_1 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 8 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_2 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 8 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 8 result Main.print_list -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print_list -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -4($sp) -addiu $sp, $sp, -12 -lw $a0, -8($sp) -sw $a0, -4($sp) -j _fi_1 -_if_1: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_3 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 6 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -4($sp) -_fi_1: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, List_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result List.Constructor -la $v0, 1 -jal List.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Args: 0 -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -16($sp) -sw $a0, 4($a1) -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_4: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -li $a1, 1 -sub $a0, $a1, $a0 -sw $a0, -8($sp) -lw $a0, -4($sp) -bnez $a0, _body_4 -j _pool_4 -_body_4: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 10 result Main.print_list -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.print_list -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -lw $a1, -36($sp) -sw $a0, 4($a1) -lw $a0, -4($sp) -sw $a0, -8($sp) -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_4 -_pool_4: -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips deleted file mode 100644 index 773ba45a..00000000 --- a/tests/codegen/palindrome.mips +++ /dev/null @@ -1,750 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_4: .asciiz "enter a string\n" -string_6: .asciiz "that was not a palindrome\n" -string_7: .asciiz "that was a palindrome\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_VT: -.word Main_INH -.word Main.pal -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.pal: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -24($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_1 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_2 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -44($sp) -sw $a0, -4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -56($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_3 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_3 -_if_3: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -48($sp) -sw $a0, -4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -64($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.length -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 -#Dispatch in place -#obj 2 offset 12 result Main.pal -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.pal -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -_fi_3: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_2 -_if_2: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_2: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_1 -_if_1: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_1: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -not $a0, $a0 -sw $a0, -8($sp) -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 4($a1) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_4 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 7 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 8 result IO.in_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.in_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 7 result Main.pal -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.pal -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_5 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_6 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 7 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -8($sp) -sw $a0, -4($sp) -j _fi_5 -_if_5: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_7 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 8 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -4($sp) -_fi_5: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -8($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips deleted file mode 100644 index e8f885aa..00000000 --- a/tests/codegen/primes.mips +++ /dev/null @@ -1,800 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "2 is trivially prime.\n" -string_7: .asciiz " is prime.\n" -string_9: .asciiz "continue" -string_10: .asciiz "halt" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 24 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_1 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -8($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -8($sp) -sw $a0, 4($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -12($sp) -sw $a0, 8($a1) -#Integer -li $a0, 500 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -16($sp) -sw $a0, 16($a1) -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_2: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -bnez $a0, _body_2 -j _pool_2 -_body_2: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -32($sp) -sw $a0, 8($a1) -#Assignment -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -lw $a1, -36($sp) -sw $a0, 12($a1) -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_3: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -60($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -72($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -80($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -84($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -div $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -sub $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -seq $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_5 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_5 -_if_5: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_5: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -j _fi_4 -_if_4: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -20($sp) -_fi_4: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_3 -j _pool_3 -_body_3: -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -60($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -56($sp) -sw $a0, 12($a1) -addiu $sp, $sp, -8 -j _loop_3 -_pool_3: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -60($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -72($sp) -lw $a1, 12($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -mult $a0, $a1 -mflo $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_6 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_6 -_if_6: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -68($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -lw $a1, -68($sp) -sw $a0, 4($a1) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -76($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 19 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_7 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 19 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -8($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -8($sp) -_fi_6: -addiu $sp, $sp, -8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -60($sp) -lw $a1, 16($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -64($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_8 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_9 -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_8 -_if_8: -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_10 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 1 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_8: -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -32($sp) -addiu $sp, $sp, -20 -addiu $sp, $sp, -8 -j _loop_2 -_pool_2: -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 20($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 1dd3d59b..fa6e91ff 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -16,22 +16,32 @@ SELF_TYPE_INH: .word Object_INH Main_INH: .word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" String_VT: .word String_INH .word String.length .word String.concat .word String.substr +Object_name: .asciiz "Object" Object_VT: .word Object_INH .word Object.abort .word Object.type_name .word Object.copy +IO_name: .asciiz "IO" IO_VT: .word IO_INH .word IO.out_string .word IO.out_int .word IO.in_string .word IO.in_int +Main_name: .asciiz "Main" Main_VT: .word Main_INH .word Main.main @@ -110,8 +120,6 @@ Object.abort: li $v0, 10 syscall -Object.type_name: - String.length: lw $a0, -4($sp) @@ -233,9 +241,14 @@ sw $a0, ($sp) addiu $sp, $sp, 4 lw $v0, -4($sp) addiu $sp, $sp, -4 -lw $ra, -4($sp) addiu $sp, $sp, -4 jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +sw $a1, ($sp) +la $a0, Object_name +jr $ra Int.Constructor: sw $ra, 0($sp) addiu $sp, $sp, 4 @@ -244,9 +257,14 @@ sw $a0, ($sp) addiu $sp, $sp, 4 lw $v0, -4($sp) addiu $sp, $sp, -4 -lw $ra, -4($sp) addiu $sp, $sp, -4 jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +sw $a1, ($sp) +la $a0, Int_name +jr $ra IO.Constructor: sw $ra, 0($sp) addiu $sp, $sp, 4 @@ -255,9 +273,14 @@ sw $a0, ($sp) addiu $sp, $sp, 4 lw $v0, -4($sp) addiu $sp, $sp, -4 -lw $ra, -4($sp) addiu $sp, $sp, -4 jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +sw $a1, ($sp) +la $a0, IO_name +jr $ra Bool.Constructor: sw $ra, 0($sp) addiu $sp, $sp, 4 @@ -266,9 +289,14 @@ sw $a0, ($sp) addiu $sp, $sp, 4 lw $v0, -4($sp) addiu $sp, $sp, -4 -lw $ra, -4($sp) addiu $sp, $sp, -4 jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +sw $a1, ($sp) +la $a0, Bool_name +jr $ra String.Constructor: sw $ra, 0($sp) addiu $sp, $sp, 4 @@ -277,9 +305,14 @@ sw $a0, ($sp) addiu $sp, $sp, 4 lw $v0, -4($sp) addiu $sp, $sp, -4 -lw $ra, -4($sp) addiu $sp, $sp, -4 jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +sw $a1, ($sp) +la $a0, String_name +jr $ra #--------------Initial Code--------------- main: li $a0, 0 @@ -320,9 +353,14 @@ sw $a0, ($sp) addiu $sp, $sp, 4 lw $v0, -4($sp) addiu $sp, $sp, -4 -lw $ra, -4($sp) addiu $sp, $sp, -4 jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, 4 +sw $a1, ($sp) +la $a0, Main_name +jr $ra Main.main: sw $ra, 0($sp) addiu $sp, $sp, 4 @@ -374,7 +412,7 @@ jal Object.Constructor sw $a1, ($sp) addiu $sp, $sp, -8 #Dispatch in place -#obj 2 offset 1 result Object.type_name +#obj 4 offset 1 result Object.type_name move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 @@ -393,7 +431,7 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result String.substr +#obj 7 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 @@ -402,7 +440,7 @@ jal String.substr sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place -#obj 2 offset 6 result IO.out_string +#obj 8 offset 12 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 @@ -422,12 +460,12 @@ sw $a0, ($sp) addiu $sp, $sp, 4 #push object #Dispatch in place -#obj 1 offset 1 result Object.type_name +#obj 1 offset 1 result self.type_name move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 sw $t1, 0($sp) -jal Object.type_name +jal self.type_name sw $a1, ($sp) addiu $sp, $sp, -4 #Args: 0 @@ -441,7 +479,7 @@ li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, 4 #Dispatch in place -#obj 3 offset 3 result String.substr +#obj 4 offset 3 result String.substr move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 @@ -450,7 +488,7 @@ jal String.substr sw $a1, ($sp) addiu $sp, $sp, -12 #Dispatch in place -#obj 1 offset 1 result IO.out_string +#obj 13 offset 5 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 @@ -470,7 +508,7 @@ addiu $sp, $sp, 4 la $a0, string_1 sw $a0, -4($sp) #Dispatch in place -#obj 2 offset 4 result IO.out_string +#obj 2 offset 18 result IO.out_string move $t0, $sp lw $t1, 4($t0) addi $sp, $sp, 4 @@ -478,12 +516,11 @@ sw $t1, 0($sp) jal IO.out_string sw $a1, ($sp) addiu $sp, $sp, -8 -lw $a0, -8($sp) -sw $a0, -4($sp) +lw $a0, -4($sp) +sw $a0, -64($sp) addiu $sp, $sp, -8 lw $v0, -4($sp) addiu $sp, $sp, -4 -lw $ra, -4($sp) addiu $sp, $sp, -4 jr $ra li $v0, 10 diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips deleted file mode 100644 index 5087f82d..00000000 --- a/tests/codegen/sort-list.mips +++ /dev/null @@ -1,1652 +0,0 @@ -.data -buffer: .space 80 -strsubstrexception: .asciiz "Substring index exception" - -string_2: .asciiz "\n" -string_4: .asciiz "How many numbers to sort? " -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -List_INH: -.word IO_INH -Cons_INH: -.word List_INH -Nil_INH: -.word List_INH -Main_INH: -.word IO_INH -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -List_VT: -.word List_INH -.word List.isNil -.word List.cons -.word List.car -.word List.cdr -.word List.rev -.word List.sort -.word List.insert -.word List.rcons -.word List.print_list -Cons_VT: -.word Cons_INH -.word Cons.isNil -.word Cons.init -.word Cons.car -.word Cons.cdr -.word Cons.rev -.word Cons.sort -.word Cons.insert -.word Cons.rcons -.word Cons.print_list -Nil_VT: -.word Nil_INH -.word Nil.isNil -.word Nil.rev -.word Nil.sort -.word Nil.insert -.word Nil.rcons -.word Nil.print_list -Main_VT: -.word Main_INH -.word Main.iota -.word Main.main - -.globl main -.text -IO.out_string: -li $v0, 4 -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - -Object.type_name: - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, -4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, ($sp) -#Dispatch in place -#obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.main -sw $a1, ($sp) -j Object.abort -#--------------End Initial Code--------------- -List.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.cons: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -36($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.car: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 360000 -syscall -sw $v0, -4($sp) -la $a1, Int_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Int.Constructor -la $v0, 1 -jal Int.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, List_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result List.Constructor -la $v0, 1 -jal List.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.rev: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 4 result List.cdr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal List.cdr -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.sort: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 4 result List.cdr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal List.cdr -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.insert: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result List.cdr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal List.cdr -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.rcons: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result List.cdr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal List.cdr -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -List.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -16($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 4 result Object.abort -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Object.abort -sw $a1, ($sp) -addiu $sp, $sp, 0 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.init: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -24($sp) -sw $a0, 4($a1) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -lw $a1, -28($sp) -sw $a0, 8($a1) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -lw $a0, -4($sp) -sw $a0, -16($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.car: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -12($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.rev: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.sort: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -20($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.insert: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -28($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _if_1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Args: 1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -12($sp) -j _fi_1 -_if_1: -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -sw $a0, -16($sp) -_fi_1: -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.rcons: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Args: 1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -32($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Cons.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -24($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 3 offset 6 result IO.out_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_2 -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 8 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -36($sp) -lw $a1, 8($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -24($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.rev: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -12($sp) -sw $a0, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.sort: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -12($sp) -sw $a0, -4($sp) -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.insert: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 3 offset 6 result Nil.rcons -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Nil.rcons -sw $a1, ($sp) -addiu $sp, $sp, -4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.rcons: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -20($sp) -sw $a0, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -28($sp) -sw $a0, -4($sp) -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Nil.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.iota: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, -4($sp) -la $a1, Nil_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Nil.Constructor -la $v0, 1 -jal Nil.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -20($sp) -sw $a0, 4($a1) -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -_loop_3: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -40($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, -40($sp) -sw $a0, -4($sp) -lw $a0, 2 -lw $a1, -4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $a1, $a0 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -bnez $a0, _body_3 -j _pool_3 -_body_3: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, -4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -56($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -#Dispatch in place -#obj 4 offset 3 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -12 -lw $a0, -4($sp) -lw $a1, -44($sp) -sw $a0, 4($a1) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -52($sp) -lw $a1, -4($t0) -sw $a1, -4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $a0, 2 -lw $a1, -4($sp) -add $a0, $a0, $a1 -sw $a0, -12($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -lw $a1, -48($sp) -sw $a0, -4($a1) -lw $a0, -4($sp) -sw $a0, -12($sp) -addiu $sp, $sp, -8 -addiu $sp, $sp, -8 -j _loop_3 -_pool_3: -lw $a0, ($sp) -sw $a0, ($sp) -addiu $sp, $sp, -8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $t0, -32($sp) -lw $a1, 4($t0) -sw $a1, -4($sp) -lw $a0, -4($sp) -sw $a0, -20($sp) -addiu $sp, $sp, -12 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, 4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -la $a0, string_4 -sw $a0, -4($sp) -#Dispatch in place -#obj 2 offset 5 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 1 offset 8 result IO.in_int -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.in_int -sw $a1, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 7 result Main.iota -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal Main.iota -sw $a1, ($sp) -addiu $sp, $sp, -8 -#Dispatch in place -#obj 1 offset 2 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 1 result -1 -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) -jal IO.out_string -sw $a1, 4($sp) -addiu $sp, $sp, -4 -lw $a0, -4($sp) -sw $a0, -4($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) -addiu $sp, $sp, -4 -lw $ra, -4($sp) -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall From d7e60c099979cd4b72dd712150b73b45ce91e2a2 Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Mon, 30 Nov 2020 00:04:53 -0500 Subject: [PATCH 101/140] some fixxes, IO.out_String, push, pop errors --- src/code_generation/statics/IO.s | 3 + src/code_generation/virtual_table.py | 7 +- src/main.py | 8 +- src/visitors/to_mips.py | 107 +- src/visitors/transpilator.py | 13 +- tests/codegen/arith.mips | 6359 ++++++++++++++++++++++++++ tests/codegen/atoi.mips | 2198 +++++++++ tests/codegen/cells.mips | 1395 ++++++ tests/codegen/complex.mips | 887 ++++ tests/codegen/fib.mips | 588 +++ tests/codegen/graph.mips | 3707 +++++++++++++++ tests/codegen/hello_world.mips | 387 ++ tests/codegen/life.mips | 5641 +++++++++++++++++++++++ tests/codegen/list.mips | 973 ++++ tests/codegen/palindrome.mips | 759 +++ tests/codegen/primes.mips | 829 ++++ tests/codegen/print-cool.mips | 218 +- tests/codegen/sort-list.mips | 1625 +++++++ 18 files changed, 25520 insertions(+), 184 deletions(-) create mode 100644 tests/codegen/arith.mips create mode 100644 tests/codegen/atoi.mips create mode 100644 tests/codegen/cells.mips create mode 100644 tests/codegen/complex.mips create mode 100644 tests/codegen/fib.mips create mode 100644 tests/codegen/graph.mips create mode 100644 tests/codegen/hello_world.mips create mode 100644 tests/codegen/life.mips create mode 100644 tests/codegen/list.mips create mode 100644 tests/codegen/palindrome.mips create mode 100644 tests/codegen/primes.mips create mode 100644 tests/codegen/sort-list.mips diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s index 0491d7f8..aee7405f 100644 --- a/src/code_generation/statics/IO.s +++ b/src/code_generation/statics/IO.s @@ -1,5 +1,8 @@ IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 4 +lw $a0, 8($sp) syscall jr $ra diff --git a/src/code_generation/virtual_table.py b/src/code_generation/virtual_table.py index f922b1f7..230c5887 100644 --- a/src/code_generation/virtual_table.py +++ b/src/code_generation/virtual_table.py @@ -48,11 +48,8 @@ def get_method_id(self, claSS, method, rec = False): return claSS + '.' + method built_in = ['Object','Int', 'IO', 'Bool', 'String'] if not rec: - if method == 'type_name': - try: - return claSS.type + '.type_name' - except: - return claSS.expr.id + '.type_name' + if claSS in built_in: + return claSS + '.' + method for t in built_in: ret = self.get_method_id(t, method, rec=True) if ret != -1: diff --git a/src/main.py b/src/main.py index 0eb8cf5b..8d0e7994 100644 --- a/src/main.py +++ b/src/main.py @@ -41,10 +41,10 @@ def main(): mips = MIPS(cv.code, cv.data) code = mips.start() - # for c in cv.data: - # print(str(c)) - # for c in cv.code: - # print(str(c)) + for c in cv.data: + print(str(c)) + for c in cv.code: + print(str(c)) path = program[:-1] path = path[:-1] diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index e8ba2d58..2318cd6c 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -16,7 +16,7 @@ def _loadfrom(self, file): def start(self): self.code.append(".data\n") - self.code.append("buffer: .space 80\n") + self.code.append("buffer: .space 2048\n") self.code.append("strsubstrexception: .asciiz \"{}\"\n".format("Substring index exception")) self.code.append("\n") @@ -71,45 +71,45 @@ def visit(self, node): @visitor.when(BinaryOperationIL) def visit(self, node): - self.code.append("lw $a0, " + str(node.leftOp) + "\n") - self.code.append("lw $a1, {}($sp)\n".format(-4 * node.rightOp)) + self.code.append("lw $t0, {}($sp)\n".format(4 * node.leftOp)) + self.code.append("lw $t1, {}($sp)\n".format(4 * node.rightOp)) if node.symbol == '+': - self.code.append("add $a0, $a0, $a1\n") + self.code.append("add $t0, $t0, $t1\n") elif node.symbol == '-': - self.code.append("sub $a0, $a0, $a1\n") + self.code.append("sub $t0, $t0, $t1\n") elif node.symbol == '*': - self.code.append("mult $a0, $a1\n") - self.code.append("mflo $a0\n") + self.code.append("mult $t0, $t1\n") + self.code.append("mflo $t0\n") elif node.symbol == '/': - self.code.append("div $a0, $a1\n") - self.code.append("mflo $a0\n") + self.code.append("div $t0, $t1\n") + self.code.append("mflo $t0\n") elif node.symbol == '=': - self.code.append("seq $a0, $a0, $a1\n") + self.code.append("seq $t0, $t0, $t1\n") elif node.symbol == '>': self.code.append("li $t0, 1\n") - self.code.append("add $a1, $a1, $t0\n") - self.code.append("sge $a0, $a0, $a1\n") + self.code.append("add $t1, $t1, $t3\n") + self.code.append("sge $t0, $t0, $t1\n") elif node.symbol == '>=': - self.code.append("sge $a0, $a0, $a1\n") + self.code.append("sge $t0, $t0, $t1\n") elif node.symbol == '<=': - self.code.append("add $a0, $a1, $a0\n") + self.code.append("add $t0, $t1, $t0\n") elif node.symbol == '<': - self.code.append("li $t0, 1\n") - self.code.append("add $a0, $a0, $t0\n") - self.code.append("sge $a0, $a1, $a0\n") - self.code.append("sw $a0, {}($sp)\n".format(-4*node.var)) + self.code.append("li $t3, 1\n") + self.code.append("add $t0, $t0, $t3\n") + self.code.append("sge $t0, $t1, $t0\n") + self.code.append("sw $t0, {}($sp)\n".format(4*node.var)) @visitor.when(UnaryOperationIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(-4*node.op)) + self.code.append("lw $t0, {}($sp)\n".format(4*node.op)) if node.symbol == '~': - self.code.append("not $a0, $a0\n") + self.code.append("not $t0, $t0\n") else: - self.code.append("li $a1, 1\n") - self.code.append("sub $a0, $a1, $a0\n") - self.code.append("sw $a0, {}($sp)\n".format(-4 * node.var)) + self.code.append("li $t1, 1\n") + self.code.append("sub $t0, $t1, $t0\n") + self.code.append("sw $t0, {}($sp)\n".format(4 * node.var)) #allocate @visitor.when(AllocateIL) @@ -117,33 +117,33 @@ def visit(self, node): self.code.append("li $v0, 9\n") self.code.append("li $a0, {}\n".format(4*node.size)) self.code.append("syscall\n") - self.code.append("sw $v0, {}($sp)\n".format(-4*node.var)) + self.code.append("sw $v0, {}($sp)\n".format(4*node.var)) self.code.append("la $a1, {}_VT\n".format(node.typ)) self.code.append("sw $a1, ($v0)\n") #assignment @visitor.when(VarToVarIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(-4 * node.right)) - self.code.append("sw $a0, {}($sp)\n".format(-4 * node.left)) + self.code.append("lw $t0, {}($sp)\n".format(4 * node.right)) + self.code.append("sw $t0, {}($sp)\n".format(4 * node.left)) @visitor.when(VarToMemoIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(-4*node.right)) - self.code.append("lw $a1, {}($sp)\n".format(-4*node.left)) - self.code.append("sw $a0, {}($a1)\n".format(4*node.offset)) + self.code.append("lw $t0, {}($sp)\n".format(4*node.right)) + self.code.append("lw $t1, {}($sp)\n".format(4*node.left)) + self.code.append("sw $t1, {}($t0)\n".format(4*node.offset)) @visitor.when(MemoToVarIL) def visit(self, node): - self.code.append("lw $t0, {}($sp)\n".format(-4 * node.right)) - self.code.append("lw $a1, {}($t0)\n".format(4*node.offset)) - self.code.append("sw $a1, {}($sp)\n".format(-4*node.left)) + self.code.append("lw $t0, {}($sp)\n".format(4 * node.right)) + self.code.append("lw $t1, {}($t0)\n".format(4*node.offset)) + self.code.append("sw $t1, {}($sp)\n".format(4*node.left)) @visitor.when(ConstToMemoIL) def visit(self, node): - self.code.append("lw $t0, {}($sp)\n".format(-4 * node.left)) - self.code.append("li $a1, {}\n".format(node.right)) - self.code.append("sw $a1, {}($t0)\n".format(4*node.offset)) + self.code.append("lw $t0, {}($sp)\n".format(4 * node.left)) + self.code.append("li $t1, {}\n".format(node.right)) + self.code.append("sw $t1, {}($t0)\n".format(4*node.offset)) #methods @visitor.when(LabelIL) @@ -151,7 +151,7 @@ def visit(self, node): self.code.append(node.label + ':\n') if node.func: self.code.append("sw $ra, 0($sp)\n") - self.code.append("addiu $sp, $sp, 4\n") + self.code.append("addiu $sp, $sp, -4\n") @visitor.when(GotoIL) @@ -164,8 +164,8 @@ def visit(self, node): @visitor.when(IfJumpIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(-4 * node.var)) - self.code.append("bnez $a0, " + node.label + "\n") + self.code.append("lw $t0, {}($sp)\n".format(4 * node.var)) + self.code.append("bnez $t0, " + node.label + "\n") @visitor.when(HierarchyIL) def visit(self, node): @@ -185,18 +185,18 @@ def visit(self, node): def visit(self, node): self.code.append("li $a0, {}\n".format(node.value)) self.code.append("sw $a0, ($sp)\n") - self.code.append("addiu $sp, $sp, 4\n") + self.code.append("addiu $sp, $sp, -4\n") @visitor.when(PopIL) def visit(self, node): - self.code.append("addiu $sp, $sp, " + str(-4*node.size) + "\n") + self.code.append("addiu $sp, $sp, " + str(4*node.size) + "\n") @visitor.when(ReturnIL) def visit(self, node): - self.code.append("lw $v0, -4($sp)\n") + self.code.append("lw $v0, 4($sp)\n") self.code.append("addiu $sp, $sp, -4\n") - # self.code.append("lw $ra, -4($sp)\n") + # self.code.append("lw $ra, 4($sp)\n") self.code.append("addiu $sp, $sp, -4\n") self.code.append("jr $ra\n") @@ -209,16 +209,18 @@ def visit(self, node): # addi $sp, $sp, -4 # sw $t1, 0($sp) # jal Main_init - self.code.append("move $t0, $sp\n") - self.code.append("lw $t1, 4($t0)\n") - self.code.append("addi $sp, $sp, {}\n".format(4)) - self.code.append("sw $t1, 0($sp)\n") + # self.code.append("move $t0, $sp\n") + # self.code.append("lw $t1, 4($t0)\n") + # self.code.append("addi $sp, $sp, {}\n".format(4)) + # self.code.append("sw $t1, 0($sp)\n") if node.result == -1: # self.code.append("jalr $ra, $v0\n") self.code.append("jal IO.out_string\n") else: self.code.append("jal {}\n".format(node.result)) - self.code.append("sw $a1, {}($sp)\n".format(-4 * node.result)) + self.code.append("sw $a1, {}($sp)\n".format(0)) + self.code.append("addi $sp, $sp, 4\n") + self.code.append("lw $ra, {}($sp)\n".format(4 * node.offset)) @visitor.when(DispatchParentIL) @@ -231,15 +233,16 @@ def visit(self, node): self.code.append("jal IO.out_string\n") else: self.code.append("jal {}\n".format(node.result)) - self.code.append("sw $a1, {}($sp)\n".format(-4 * node.result)) + self.code.append("sw $a1, 0($sp)\n") + self.code.append("addi $sp, $sp, -4\n") @visitor.when(InheritIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(-4 * node.child)) + self.code.append("lw $a0, {}($sp)\n".format(4 * node.child)) self.code.append("la $a1, " + node.parent + "_VT\n") self.code.append("la $t0, inherit\n") self.code.append("jalr $ra, $t0\n") - self.code.append("sw $v0, {}($sp)\n".format(-4*node.result)) + self.code.append("sw $v0, {}($sp)\n".format(4)) @visitor.when(StringIL) def visit(self, node): @@ -256,4 +259,6 @@ def visit(self, node): @visitor.when(LoadLabelIL) def visit(self, node): self.code.append("la $a0, " + node.label + "\n") - self.code.append("sw $a0, {}($sp)\n".format(-4 * node.var)) \ No newline at end of file + # self.code.append("sw $a0, {}($sp)\n".format(-4 * node.var)) + self.code.append("sw $a0, 0($sp)\n") + self.code.append("addi $sp, $sp, -4\n") diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 40ff28cf..f1ba0a63 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -121,8 +121,8 @@ def setClassConstructor(self, attributes): def setClassTypeName(self, claSS): self.code.append(LabelIL(claSS, 'type_name', True)) - self.code.append(CustomLineIL("sw $a1, ($sp)\n")) - self.code.append(CustomLineIL("la $a0, " + claSS + '_name\n' )) + # self.code.append(CustomLineIL("sw $a1, ($sp)\n")) + self.code.append(CustomLineIL("la $a1, " + claSS + '_name\n' )) self.code.append(CustomLineIL("jr $ra\n")) @@ -457,9 +457,7 @@ def visit(self, node, variables): @visitor.when(IsVoidNode) def visit(self, node, vars): - print('is_void: ', node.expr.id) - print('type: ', self.context.get_type(node)) - + pass #expression: complex->dispatch @visitor.when(ExprCallNode) def visit(self, node, variables): @@ -469,7 +467,8 @@ def visit(self, node, variables): self.code.append(PushIL()) print('----------node {}---------'.format(node.id)) index = self.virtual_table.get_method_id(node.obj, node.id) - + if str(node.id) == 'type_name': + index = self.virtual_table.get_method_id(self.context.exprs_dict[node.obj].name, node.id) self.code.append(CommentIL('push object')) # print('-------obj-------- ',node.obj) self.visit(node.obj, variables) @@ -481,7 +480,7 @@ def visit(self, node, variables): self.code.append(CommentIL('Args: ' + str(i))) i += 1 self.visit(p, variables) - + # ret = self.context.exprs_dict[node.obj].name self.code.append(DispatchIL(variables.id(result), variables.id(name), index)) for i in range(0, len(node.args) + 1): diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips new file mode 100644 index 00000000..30786f67 --- /dev/null +++ b/tests/codegen/arith.mips @@ -0,0 +1,6359 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_7: .asciiz "0" +string_9: .asciiz "1" +string_11: .asciiz "2" +string_13: .asciiz "3" +string_15: .asciiz "4" +string_17: .asciiz "5" +string_19: .asciiz "6" +string_21: .asciiz "7" +string_23: .asciiz "8" +string_25: .asciiz "9" +string_37: .asciiz "" +string_38: .asciiz "9" +string_39: .asciiz "8" +string_40: .asciiz "7" +string_41: .asciiz "6" +string_42: .asciiz "5" +string_43: .asciiz "4" +string_44: .asciiz "3" +string_45: .asciiz "2" +string_46: .asciiz "1" +string_47: .asciiz "0" +string_49: .asciiz "-" +string_51: .asciiz "+" +string_56: .asciiz "-" +string_57: .asciiz "0" +string_59: .asciiz "" +string_60: .asciiz "\n\tTo add a number to " +string_61: .asciiz "...enter a:\n" +string_62: .asciiz "\tTo negate " +string_63: .asciiz "...enter b:\n" +string_64: .asciiz "\tTo find the difference between " +string_65: .asciiz "and another number...enter c:\n" +string_66: .asciiz "\tTo find the factorial of " +string_67: .asciiz "...enter d:\n" +string_68: .asciiz "\tTo square " +string_69: .asciiz "...enter e:\n" +string_70: .asciiz "\tTo cube " +string_71: .asciiz "...enter f:\n" +string_72: .asciiz "\tTo find out if " +string_73: .asciiz "is a multiple of 3...enter g:\n" +string_74: .asciiz "\tTo divide " +string_75: .asciiz "by 8...enter h:\n" +string_76: .asciiz "\tTo get a new number...enter j:\n" +string_77: .asciiz "\tTo quit...enter q:\n\n" +string_78: .asciiz "\n" +string_79: .asciiz "Please enter a number... " +string_90: .asciiz "Class type is now A\n" +string_91: .asciiz "Class type is now B\n" +string_92: .asciiz "Class type is now C\n" +string_93: .asciiz "Class type is now D\n" +string_94: .asciiz "Class type is now E\n" +string_95: .asciiz "Oooops\n" +string_96: .asciiz " " +string_98: .asciiz "number " +string_100: .asciiz "is odd!\n" +string_101: .asciiz "is even!\n" +string_102: .asciiz "a" +string_104: .asciiz "b" +string_106: .asciiz "c" +string_108: .asciiz "d" +string_110: .asciiz "e" +string_112: .asciiz "f" +string_114: .asciiz "g" +string_116: .asciiz "h" +string_118: .asciiz "j" +string_120: .asciiz "q" +string_122: .asciiz "number " +string_123: .asciiz "is equal to " +string_124: .asciiz "times 8 with a remainder of " +string_125: .asciiz "\n" +string_127: .asciiz "number " +string_128: .asciiz "is not divisible by 3.\n" +string_129: .asciiz "number " +string_130: .asciiz "is divisible by 3.\n" +string_135: .asciiz "Oooops\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +A_INH: +.word Object_INH +B_INH: +.word A_INH +C_INH: +.word B_INH +D_INH: +.word B_INH +E_INH: +.word D_INH +A2I_INH: +.word Object_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A_name: .asciiz "A" +A_VT: +.word A_INH +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word A.method5 +B_name: .asciiz "B" +B_VT: +.word B_INH +.word B.method5 +C_name: .asciiz "C" +C_VT: +.word C_INH +.word C.method6 +.word C.method5 +D_name: .asciiz "D" +D_VT: +.word D_INH +.word D.method7 +E_name: .asciiz "E" +E_VT: +.word E_INH +.word E.method6 +A2I_name: .asciiz "A2I" +A2I_VT: +.word A2I_INH +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.menu +.word Main.prompt +.word Main.get_int +.word Main.is_even +.word Main.class_type +.word Main.print +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 20 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +A.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 12($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, A_name +jr $ra +A.value: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A.set_var: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A.method1: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A.method2: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 40($sp) +sw $t1, -4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, B_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result B.Constructor +la $v0, 1 +jal B.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_15tmp_15tmp_15tmp_15($sp) +sw $t0, tmp_5tmp_5tmp_5tmp_5($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A.method3: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, -4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, C_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result C.Constructor +la $v0, 1 +jal C.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A.method4: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 56($sp) +sw $t1, -4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, D_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result D.Constructor +la $v0, 1 +jal D.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_19tmp_19tmp_19tmp_19($sp) +sw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +j _fi_1 +_if_1: +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 64($sp) +sw $t1, -4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, D_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result D.Constructor +la $v0, 1 +jal D.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_21tmp_21tmp_21tmp_21($sp) +sw $t0, tmp_11tmp_11tmp_11tmp_11($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_1: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A.method5: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_2: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_2 +j _pool_2 +_body_2: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 64($sp) +sw $t1, -4($t0) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 76($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_2 +_pool_2: +lw $t0, tmp_19tmp_19tmp_19tmp_19($sp) +sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +addiu $sp, $sp, 8 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, E_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result E.Constructor +la $v0, 1 +jal E.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +B.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +B.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, B_name +jr $ra +B.method5: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 36($sp) +sw $t1, -4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, E_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result E.Constructor +la $v0, 1 +jal E.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_14tmp_14tmp_14tmp_14($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +C.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +C.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, C_name +jr $ra +C.method6: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, -4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +C.method5: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 44($sp) +sw $t1, -4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, E_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result E.Constructor +la $v0, 1 +jal E.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 44($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_16tmp_16tmp_16tmp_16($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +D.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +D.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, D_name +jr $ra +D.method7: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_3 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_5 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_6 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 26 result D.method7 +jal D.method7 +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 104($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_6 +_if_6: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 40($sp) +_fi_6: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 56($sp) +j _fi_5 +_if_5: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 60($sp) +_fi_5: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 76($sp) +j _fi_4 +_if_4: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 96($sp) +j _fi_3 +_if_3: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +sw $t0, 4($sp) +#Args: 0 +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +#Dispatch in place +#obj 4 offset 33 result D.method7 +jal D.method7 +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 132($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 112($sp) +_fi_3: +addiu $sp, $sp, 8 +lw $t0, tmp_33tmp_33tmp_33tmp_33($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +E.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +E.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, E_name +jr $ra +E.method6: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 36($sp) +sw $t1, -4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_14tmp_14tmp_14tmp_14($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, A2I_name +jr $ra +A2I.c2i: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_7 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_10 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_11 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_12 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_13 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_14 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_15 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_16 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_17 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_18 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_19 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_20 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_21 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_22 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_23 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_24 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_25 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_26 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 184($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 46 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 184($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_26 +_if_26: +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_26: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_24 +_if_24: +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_24: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +j _fi_22 +_if_22: +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_22: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 92($sp) +j _fi_20 +_if_20: +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 96($sp) +_fi_20: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 112($sp) +j _fi_18 +_if_18: +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 116($sp) +_fi_18: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 132($sp) +j _fi_16 +_if_16: +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 136($sp) +_fi_16: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 152($sp) +j _fi_14 +_if_14: +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 156($sp) +_fi_14: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 172($sp) +j _fi_12 +_if_12: +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 176($sp) +_fi_12: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 192($sp) +j _fi_10 +_if_10: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 196($sp) +_fi_10: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 212($sp) +j _fi_8 +_if_8: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 216($sp) +_fi_8: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.i2c: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_27 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_28 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_29 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_30 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_31 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_32 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_33 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +sw $t0, 4($sp) +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_34 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +sw $t0, 4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_35 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +sw $t0, 4($sp) +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_36 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 184($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 46 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 184($sp) +addiu $sp, $sp, 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_37 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_36 +_if_36: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_38 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_36: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_35 +_if_35: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_39 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_35: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +j _fi_34 +_if_34: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_40 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_34: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 92($sp) +j _fi_33 +_if_33: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_41 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 96($sp) +_fi_33: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 112($sp) +j _fi_32 +_if_32: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_42 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 116($sp) +_fi_32: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 132($sp) +j _fi_31 +_if_31: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_43 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 136($sp) +_fi_31: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 152($sp) +j _fi_30 +_if_30: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_44 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 156($sp) +_fi_30: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 172($sp) +j _fi_29 +_if_29: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_45 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 176($sp) +_fi_29: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 192($sp) +j _fi_28 +_if_28: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_46 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 196($sp) +_fi_28: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 212($sp) +j _fi_27 +_if_27: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_47 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 216($sp) +_fi_27: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.a2i: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_48 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_49 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_50 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_51 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_52 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 25 result A2I.a2i_aux +jal A2I.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 100($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 40($sp) +j _fi_52 +_if_52: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 6 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 9 offset 34 result A2I.a2i_aux +jal A2I.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 136($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_52: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 104($sp) +j _fi_50 +_if_50: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 152($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 168($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 6 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 9 offset 44 result A2I.a2i_aux +jal A2I.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 176($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 40($sp) +lw $t0, 4($sp) +sw $t0, 144($sp) +_fi_50: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 164($sp) +j _fi_48 +_if_48: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 168($sp) +_fi_48: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.a2i_aux: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_53: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_53 +j _pool_53 +_body_53: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 6 offset 25 result A2I.c2i +jal A2I.c2i +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 100($sp) +addiu $sp, $sp, 4 +lw $t0, 28($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 100($sp) +sw $t1, -4($t0) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 112($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 56($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_53 +_pool_53: +lw $t0, tmp_28tmp_28tmp_28tmp_28($sp) +sw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_10tmp_10tmp_10tmp_10($sp) +sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.i2a: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_54 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_55 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_56 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 12($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 6 offset 19 result A2I.i2a_aux +jal A2I.i2a_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 76($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 8 offset 7 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 48($sp) +j _fi_55 +_if_55: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 22 result A2I.i2a_aux +jal A2I.i2a_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 88($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 60($sp) +_fi_55: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 76($sp) +j _fi_54 +_if_54: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_57 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_54: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.i2a_aux: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_58 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 13 result A2I.i2a_aux +jal A2I.i2a_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 52($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 20 result A2I.i2c +jal A2I.i2c +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 80($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 11 offset 8 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_20tmp_20tmp_20tmp_20($sp) +sw $t0, tmp_8tmp_8tmp_8tmp_8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +j _fi_58 +_if_58: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_59 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +_fi_58: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.menu: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_60 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 7 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 28($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_61 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 9 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 36($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_62 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 11 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 44($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 13 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 52($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_63 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 15 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 60($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_64 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 17 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 68($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 19 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 76($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_65 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 21 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 84($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_66 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 23 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 92($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 25 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 100($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_67 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 27 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 108($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_68 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 29 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 116($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 31 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 124($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_69 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 33 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 132($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_70 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 35 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 140($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 37 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 148($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_71 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 39 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 156($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_72 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 41 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 164($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 172($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 43 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 172($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_73 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 45 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 180($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_74 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 47 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 188($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 196($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 49 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 196($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_75 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 51 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 204($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_76 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 53 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 212($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_77 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 55 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 220($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 56 result IO.in_string +jal IO.in_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 224($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 216($sp) +addiu $sp, $sp, 108 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.prompt: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_78 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_79 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 7 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 28($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 8 result IO.in_string +jal IO.in_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.get_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_10tmp_10tmp_10tmp_10($sp) +sw $t0, tmp_6tmp_6tmp_6tmp_6($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.is_even: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_80 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_81 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_82 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 4 offset 21 result Main.is_even +jal Main.is_even +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 84($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_82 +_if_82: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_82: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_81 +_if_81: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_81: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +j _fi_80 +_if_80: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +#Dispatch in place +#obj 3 offset 26 result Main.is_even +jal Main.is_even +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 104($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 84($sp) +_fi_80: +addiu $sp, $sp, 8 +lw $t0, tmp_26tmp_26tmp_26tmp_26($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.class_type: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 8($sp) +la $a1, A_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_83 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +la $a1, B_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_84 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 16($sp) +la $a1, C_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_85 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 20($sp) +la $a1, D_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_86 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 24($sp) +la $a1, E_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_87 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 28($sp) +la $a1, Object_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_88 +addiu $sp, $sp, 4 +branch_83: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_90 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 15 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 60($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 12 +branch_84: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 16($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_91 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 18 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 72($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 12 +branch_85: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 28($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_92 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 21 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 84($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 12 +branch_86: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 40($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_93 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 24 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 96($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 48($sp) +addiu $sp, $sp, 12 +branch_87: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 52($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_94 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 27 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 108($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 60($sp) +addiu $sp, $sp, 12 +branch_88: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 64($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_95 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 30 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 120($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 11 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 44($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_96 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 13 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 52($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, 8($t0) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_97: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +bnez $t0, _body_97 +j _pool_97 +_body_97: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_98 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 11 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 44($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 13 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 52($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 17 result Main.is_even +jal Main.is_even +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 68($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_99 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_100 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 19 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 76($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +j _fi_99 +_if_99: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_101 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 21 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 84($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_99: +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 23 result Main.class_type +jal Main.class_type +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 92($sp) +addiu $sp, $sp, 8 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 24 result Main.menu +jal Main.menu +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 96($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +lw $t1, 96($sp) +sw $t1, 4($t0) +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_102 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_103 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_104 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_105 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 140($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_106 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_107 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 156($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_108 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_109 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 172($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_110 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_111 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 188($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_112 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_113 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 204($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_114 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_115 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 220($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_116 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_117 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 236($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_118 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_119 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 252($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_120 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_121 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 280($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 6 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 280($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 40($sp) +j _fi_121 +_if_121: +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 284($sp) +sw $t1, 16($t0) +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_121: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 60($sp) +j _fi_119 +_if_119: +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 296($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 72($sp) +_fi_119: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 88($sp) +j _fi_117 +_if_117: +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, E_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result E.Constructor +la $v0, 1 +jal E.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 332($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 6 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 332($sp) +sw $t1, -4($t0) +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_122 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 88 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 352($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 360($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 90 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 360($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_123 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 92 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 368($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 376($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 94 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 376($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_124 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 96 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 384($sp) +addiu $sp, $sp, 8 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 408($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 412($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 4 offset 103 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 412($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_125 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 105 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 420($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_105tmp_105tmp_105tmp_105($sp) +sw $t0, tmp_97tmp_97tmp_97tmp_97($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 52($sp) +addiu $sp, $sp, 24 +lw $t0, tmp_98tmp_98tmp_98tmp_98($sp) +sw $t0, tmp_84tmp_84tmp_84tmp_84($sp) +addiu $sp, $sp, 8 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 344($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 344($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 40($sp) +addiu $sp, $sp, 12 +lw $t0, tmp_86tmp_86tmp_86tmp_86($sp) +sw $t0, tmp_75tmp_75tmp_75tmp_75($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 96($sp) +_fi_117: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 112($sp) +j _fi_115 +_if_115: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, D_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result D.Constructor +la $v0, 1 +jal D.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 332($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 6 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_126 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_127 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 86 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 344($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 352($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 88 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 352($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_128 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 90 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 360($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 56($sp) +j _fi_126 +_if_126: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_129 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 93 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 372($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 380($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 95 result Main.print +jal Main.print +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 380($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_130 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 97 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 388($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 84($sp) +_fi_126: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 196($sp) +_fi_115: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 212($sp) +j _fi_113 +_if_113: +#Assignment +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, C_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result C.Constructor +la $v0, 1 +jal C.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 412($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#DispatchParent in place +#obj 6 offset 3 result C.method5 +la $v0, 3 +jal C.method5 +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 412($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 236($sp) +_fi_113: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 252($sp) +j _fi_111 +_if_111: +#Assignment +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, C_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result C.Constructor +la $v0, 1 +jal C.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 436($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#DispatchParent in place +#obj 6 offset 3 result C.method5 +la $v0, 3 +jal C.method5 +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 436($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 276($sp) +_fi_111: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 292($sp) +j _fi_109 +_if_109: +#Assignment +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, C_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result C.Constructor +la $v0, 1 +jal C.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 460($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#DispatchParent in place +#obj 6 offset 3 result C.method5 +la $v0, 3 +jal C.method5 +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 460($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 316($sp) +_fi_109: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 332($sp) +j _fi_107 +_if_107: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 121 result Main.get_int +jal Main.get_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 484($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 484($sp) +sw $t1, 12($t0) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, D_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result D.Constructor +la $v0, 1 +jal D.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 508($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 516($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 8 offset 5 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +lw $t1, 516($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 56($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 388($sp) +_fi_107: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 404($sp) +j _fi_105 +_if_105: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 524($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 8($sp) +la $a1, C_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_131 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +la $a1, A_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_132 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 16($sp) +la $a1, Object_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_133 +addiu $sp, $sp, 4 +branch_131: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 560($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 12 +branch_132: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 24($sp) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 580($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 40($sp) +addiu $sp, $sp, 12 +branch_133: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 44($sp) +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_135 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 149 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 596($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 150 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 600($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 64($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 492($sp) +_fi_105: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 508($sp) +j _fi_103 +_if_103: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 157 result Main.get_int +jal Main.get_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 628($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 628($sp) +sw $t1, 12($t0) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, B_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result B.Constructor +la $v0, 1 +jal B.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 652($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 660($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 8 offset 5 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +lw $t1, 660($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 56($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 564($sp) +_fi_103: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 628($sp) +addiu $sp, $sp, 24 +addiu $sp, $sp, 8 +j _loop_97 +_pool_97: +lw $t0, 4($sp) +sw $t0, 652($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips new file mode 100644 index 00000000..2fb09558 --- /dev/null +++ b/tests/codegen/atoi.mips @@ -0,0 +1,2198 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "0" +string_3: .asciiz "1" +string_5: .asciiz "2" +string_7: .asciiz "3" +string_9: .asciiz "4" +string_11: .asciiz "5" +string_13: .asciiz "6" +string_15: .asciiz "7" +string_17: .asciiz "8" +string_19: .asciiz "9" +string_31: .asciiz "" +string_32: .asciiz "9" +string_33: .asciiz "8" +string_34: .asciiz "7" +string_35: .asciiz "6" +string_36: .asciiz "5" +string_37: .asciiz "4" +string_38: .asciiz "3" +string_39: .asciiz "2" +string_40: .asciiz "1" +string_41: .asciiz "0" +string_43: .asciiz "-" +string_45: .asciiz "+" +string_50: .asciiz "-" +string_51: .asciiz "0" +string_53: .asciiz "" +string_54: .asciiz " == " +string_55: .asciiz "\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +A2I_INH: +.word Object_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A2I_name: .asciiz "A2I" +A2I_VT: +.word A2I_INH +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +A2I.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, A2I_name +jr $ra +A2I.c2i: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_2 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_5 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_6 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_7 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_10 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_11 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_12 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_13 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_14 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_15 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_16 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_17 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_18 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_19 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_20 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 184($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 46 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 184($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_20 +_if_20: +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_20: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_18 +_if_18: +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_18: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +j _fi_16 +_if_16: +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_16: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 92($sp) +j _fi_14 +_if_14: +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 96($sp) +_fi_14: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 112($sp) +j _fi_12 +_if_12: +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 116($sp) +_fi_12: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 132($sp) +j _fi_10 +_if_10: +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 136($sp) +_fi_10: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 152($sp) +j _fi_8 +_if_8: +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 156($sp) +_fi_8: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 172($sp) +j _fi_6 +_if_6: +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 176($sp) +_fi_6: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 192($sp) +j _fi_4 +_if_4: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 196($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 212($sp) +j _fi_2 +_if_2: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 216($sp) +_fi_2: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.i2c: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_21 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_22 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_23 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_24 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_25 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_26 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_27 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +sw $t0, 4($sp) +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_28 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +sw $t0, 4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_29 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +sw $t0, 4($sp) +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_30 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 184($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 46 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 184($sp) +addiu $sp, $sp, 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_31 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_30 +_if_30: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_32 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_30: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_29 +_if_29: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_33 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_29: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +j _fi_28 +_if_28: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_34 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_28: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 92($sp) +j _fi_27 +_if_27: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_35 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 96($sp) +_fi_27: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 112($sp) +j _fi_26 +_if_26: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_36 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 116($sp) +_fi_26: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 132($sp) +j _fi_25 +_if_25: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_37 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 136($sp) +_fi_25: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 152($sp) +j _fi_24 +_if_24: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_38 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 156($sp) +_fi_24: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 172($sp) +j _fi_23 +_if_23: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_39 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 176($sp) +_fi_23: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 192($sp) +j _fi_22 +_if_22: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_40 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 196($sp) +_fi_22: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 212($sp) +j _fi_21 +_if_21: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_41 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 216($sp) +_fi_21: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.a2i: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_42 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_43 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_44 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_45 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_46 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 25 result A2I.a2i_aux +jal A2I.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 100($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 40($sp) +j _fi_46 +_if_46: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 6 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 9 offset 34 result A2I.a2i_aux +jal A2I.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 136($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_46: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 104($sp) +j _fi_44 +_if_44: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 152($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 168($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 6 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 9 offset 44 result A2I.a2i_aux +jal A2I.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 176($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 40($sp) +lw $t0, 4($sp) +sw $t0, 144($sp) +_fi_44: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 164($sp) +j _fi_42 +_if_42: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 168($sp) +_fi_42: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.a2i_aux: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_47: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_47 +j _pool_47 +_body_47: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 6 offset 25 result A2I.c2i +jal A2I.c2i +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 100($sp) +addiu $sp, $sp, 4 +lw $t0, 28($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 100($sp) +sw $t1, -4($t0) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 112($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 56($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_47 +_pool_47: +lw $t0, tmp_28tmp_28tmp_28tmp_28($sp) +sw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_10tmp_10tmp_10tmp_10($sp) +sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.i2a: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_48 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_49 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_50 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 12($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 6 offset 19 result A2I.i2a_aux +jal A2I.i2a_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 76($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 8 offset 7 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 48($sp) +j _fi_49 +_if_49: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 22 result A2I.i2a_aux +jal A2I.i2a_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 88($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 60($sp) +_fi_49: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 76($sp) +j _fi_48 +_if_48: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_51 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_48: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +A2I.i2a_aux: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_52 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 13 result A2I.i2a_aux +jal A2I.i2a_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 52($sp) +addiu $sp, $sp, 4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 20 result A2I.i2c +jal A2I.i2c +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 80($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 11 offset 8 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_20tmp_20tmp_20tmp_20($sp) +sw $t0, tmp_8tmp_8tmp_8tmp_8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +j _fi_52 +_if_52: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_53 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +_fi_52: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 7 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 28($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_54 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 9 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 36($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 11 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 44($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_55 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 13 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 52($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 16 +lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) +sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips new file mode 100644 index 00000000..0b85d699 --- /dev/null +++ b/tests/codegen/cells.mips @@ -0,0 +1,1395 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "\n" +string_4: .asciiz "X" +string_6: .asciiz "X" +string_8: .asciiz "X" +string_11: .asciiz "." +string_12: .asciiz "X" +string_14: .asciiz " X " +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +CellularAutomaton_INH: +.word IO_INH +Main_INH: +.word Object_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +CellularAutomaton_name: .asciiz "CellularAutomaton" +CellularAutomaton_VT: +.word CellularAutomaton_INH +.word CellularAutomaton.init +.word CellularAutomaton.print +.word CellularAutomaton.num_cells +.word CellularAutomaton.cell +.word CellularAutomaton.cell_left_neighbor +.word CellularAutomaton.cell_right_neighbor +.word CellularAutomaton.cell_at_next_evolution +.word CellularAutomaton.evolve +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +CellularAutomaton.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, CellularAutomaton_name +jr $ra +CellularAutomaton.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 2 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 8 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.num_cells: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell_left_neighbor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_2 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 12 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_2 +_if_2: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 17 result CellularAutomaton.num_cells +jal CellularAutomaton.num_cells +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 68($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 6 offset 18 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 72($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 60($sp) +_fi_2: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell_right_neighbor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 9 result CellularAutomaton.num_cells +jal CellularAutomaton.num_cells +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 36($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 20($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_3 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 15 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 60($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 48($sp) +j _fi_3 +_if_3: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 18 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 72($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 60($sp) +_fi_3: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell_at_next_evolution: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 12 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_4 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_5 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_5 +_if_5: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_5: +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 20 result CellularAutomaton.cell_left_neighbor +jal CellularAutomaton.cell_left_neighbor +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 80($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_7 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_7 +_if_7: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_7: +addiu $sp, $sp, 8 +lw $t0, 36($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 68($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 28 result CellularAutomaton.cell_right_neighbor +jal CellularAutomaton.cell_right_neighbor +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 112($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_8 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_9 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_9 +_if_9: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_9: +addiu $sp, $sp, 8 +lw $t0, 36($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 104($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 112($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_10 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_11 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 120($sp) +j _fi_10 +_if_10: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_12 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 124($sp) +_fi_10: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.evolve: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_13: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_13 +j _pool_13 +_body_13: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 19 result CellularAutomaton.cell_at_next_evolution +jal CellularAutomaton.cell_at_next_evolution +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 76($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 4 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 76($sp) +sw $t1, -4($t0) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 88($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_13 +_pool_13: +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 92($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 64($sp) +addiu $sp, $sp, 12 +lw $t0, tmp_24tmp_24tmp_24tmp_24($sp) +sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_8tmp_8tmp_8tmp_8($sp) +sw $t0, tmp_5tmp_5tmp_5tmp_5($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_6tmp_6tmp_6tmp_6($sp) +sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, CellularAutomaton_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result CellularAutomaton.Constructor +la $v0, 1 +jal CellularAutomaton.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_14 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, 4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_15: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_15 +j _pool_15 +_body_15: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 96($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 12 +addiu $sp, $sp, 8 +j _loop_15 +_pool_15: +lw $t0, tmp_24tmp_24tmp_24tmp_24($sp) +sw $t0, tmp_11tmp_11tmp_11tmp_11($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 44($sp) +addiu $sp, $sp, 16 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips new file mode 100644 index 00000000..5707ee72 --- /dev/null +++ b/tests/codegen/complex.mips @@ -0,0 +1,887 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_2: .asciiz "=(\n" +string_3: .asciiz "=)\n" +string_5: .asciiz "+" +string_6: .asciiz "I" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Complex_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main +Complex_name: .asciiz "Complex" +Complex_VT: +.word Complex_INH +.word Complex.init +.word Complex.print +.word Complex.reflect_0 +.word Complex.reflect_X +.word Complex.reflect_Y + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 12($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 13 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 52($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_1 +_if_1: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 15 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 60($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_1: +addiu $sp, $sp, 8 +lw $t0, tmp_15tmp_15tmp_15tmp_15($sp) +sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Complex.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Complex.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Complex_name +jr $ra +Complex.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Complex.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 12 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_5 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 2 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 7 offset 2 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 9 offset 2 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_4 +_if_4: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 18 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 72($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 64($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Complex.reflect_0: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 12($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 12($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 40($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Complex.reflect_X: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 12($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Complex.reflect_Y: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 12($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips new file mode 100644 index 00000000..b95be354 --- /dev/null +++ b/tests/codegen/fib.mips @@ -0,0 +1,588 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "Enter n to find nth fibonacci number!\n" +string_2: .asciiz "\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main +.word Main.fib + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 8 result IO.in_int +jal IO.in_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 2 offset 8 result Main.fib +jal Main.fib +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 3 offset 8 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 10 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.fib: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_3: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +li $t1, 1 +sub $t0, $t1, $t0 +sw $t0, 16($sp) +lw $t0, 4($sp) +bnez $t0, _body_3 +j _pool_3 +_body_3: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 60($sp) +sw $t1, -4($t0) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 68($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 76($sp) +sw $t1, -4($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 80($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 16 +addiu $sp, $sp, 8 +j _loop_3 +_pool_3: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 64($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_21tmp_21tmp_21tmp_21($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips new file mode 100644 index 00000000..c4b2058c --- /dev/null +++ b/tests/codegen/graph.mips @@ -0,0 +1,3707 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz " (" +string_2: .asciiz "," +string_3: .asciiz ")" +string_5: .asciiz "\n" +string_6: .asciiz "\n" +string_8: .asciiz "\n" +string_9: .asciiz "" +string_11: .asciiz "0" +string_13: .asciiz "1" +string_15: .asciiz "2" +string_17: .asciiz "3" +string_19: .asciiz "4" +string_21: .asciiz "5" +string_23: .asciiz "6" +string_25: .asciiz "7" +string_27: .asciiz "8" +string_29: .asciiz "9" +string_32: .asciiz "-" +string_34: .asciiz " " +string_37: .asciiz " " +string_39: .asciiz "," +string_42: .asciiz "" +string_43: .asciiz "" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Graph_INH: +.word Object_INH +Vertice_INH: +.word IO_INH +Edge_INH: +.word IO_INH +EList_INH: +.word IO_INH +ECons_INH: +.word EList_INH +VList_INH: +.word IO_INH +VCons_INH: +.word VList_INH +Parse_INH: +.word IO_INH +Main_INH: +.word Parse_INH +BoolOp_INH: +.word Object_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Graph_name: .asciiz "Graph" +Graph_VT: +.word Graph_INH +.word Graph.add_vertice +.word Graph.print_E +.word Graph.print_V +Vertice_name: .asciiz "Vertice" +Vertice_VT: +.word Vertice_INH +.word Vertice.outgoing +.word Vertice.number +.word Vertice.init +.word Vertice.add_out +.word Vertice.print +Edge_name: .asciiz "Edge" +Edge_VT: +.word Edge_INH +.word Edge.init +.word Edge.print +EList_name: .asciiz "EList" +EList_VT: +.word EList_INH +.word EList.isNil +.word EList.head +.word EList.tail +.word EList.cons +.word EList.append +.word EList.print +ECons_name: .asciiz "ECons" +ECons_VT: +.word ECons_INH +.word ECons.isNil +.word ECons.head +.word ECons.tail +.word ECons.init +.word ECons.print +VList_name: .asciiz "VList" +VList_VT: +.word VList_INH +.word VList.isNil +.word VList.head +.word VList.tail +.word VList.cons +.word VList.print +VCons_name: .asciiz "VCons" +VCons_VT: +.word VCons_INH +.word VCons.isNil +.word VCons.head +.word VCons.tail +.word VCons.init +.word VCons.print +Parse_name: .asciiz "Parse" +Parse_VT: +.word Parse_INH +.word Parse.read_input +.word Parse.parse_line +.word Parse.c2i +.word Parse.a2i +.word Parse.a2i_aux +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main +BoolOp_name: .asciiz "BoolOp" +BoolOp_VT: +.word BoolOp_INH +.word BoolOp.and +.word BoolOp.or + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +Graph.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, VList_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result VList.Constructor +la $v0, 1 +jal VList.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, EList_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result EList.Constructor +la $v0, 1 +jal EList.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, 8($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Graph.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Graph_name +jr $ra +Graph.add_vertice: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, 8($t0) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 44($sp) +sw $t1, 4($t0) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Graph.print_E: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Graph.print_V: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Vertice.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, EList_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result EList.Constructor +la $v0, 1 +jal EList.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 8($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Vertice.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Vertice_name +jr $ra +Vertice.outgoing: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Vertice.number: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Vertice.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Vertice.add_out: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 8($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Vertice.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 6 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Edge.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Edge.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Edge_name +jr $ra +Edge.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 4($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 36($sp) +sw $t1, 12($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 16 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Edge.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 6 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 9 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 36($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 12 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 15 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 60($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 18 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 72($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 21 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 84($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 76($sp) +addiu $sp, $sp, 24 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +EList.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +EList.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, EList_name +jr $ra +EList.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +EList.head: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +EList.tail: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +EList.cons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, ECons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result ECons.Constructor +la $v0, 1 +jal ECons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 6 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +EList.append: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 10 result EList.tail +jal EList.tail +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 0 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 13 result EList.head +jal EList.head +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 52($sp) +addiu $sp, $sp, 0 +#Dispatch in place +#obj 7 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 40($sp) +j _fi_4 +_if_4: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +EList.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_5 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +ECons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +ECons.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, ECons_name +jr $ra +ECons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +ECons.head: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +ECons.tail: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +ECons.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, -4($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +ECons.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VList.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VList.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, VList_name +jr $ra +VList.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VList.head: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VList.tail: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VList.cons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, VCons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result VCons.Constructor +la $v0, 1 +jal VCons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 6 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VList.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VCons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VCons.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, VCons_name +jr $ra +VCons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VCons.head: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VCons.tail: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VCons.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, -4($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +VCons.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Parse.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, BoolOp_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result BoolOp.Constructor +la $v0, 1 +jal BoolOp.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Parse.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Parse_name +jr $ra +Parse.read_input: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_7: +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 0 +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_8 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +li $t1, 1 +sub $t0, $t1, $t0 +sw $t0, 16($sp) +#Args: 1 +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +li $t1, 1 +sub $t0, $t1, $t0 +sw $t0, 16($sp) +#Dispatch in place +#obj 10 offset 9 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 36($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +bnez $t0, _body_7 +j _pool_7 +_body_7: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 24 result Parse.parse_line +jal Parse.parse_line +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 96($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 4 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 16($sp) +addiu $sp, $sp, 8 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 26 result IO.in_string +jal IO.in_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 104($sp) +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 104($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_7 +_pool_7: +lw $t0, tmp_26tmp_26tmp_26tmp_26($sp) +sw $t0, tmp_6tmp_6tmp_6tmp_6($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_8tmp_8tmp_8tmp_8($sp) +sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Parse.parse_line: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_10: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +li $t1, 1 +sub $t0, $t1, $t0 +sw $t0, 20($sp) +lw $t0, 4($sp) +bnez $t0, _body_10 +j _pool_10 +_body_10: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 16 +syscall +sw $v0, 4($sp) +la $a1, Edge_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Edge.Constructor +la $v0, 1 +jal Edge.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 2 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 8 offset 5 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 16 +#Dispatch in place +#obj 10 offset 9 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 36($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_27tmp_27tmp_27tmp_27($sp) +sw $t0, tmp_16tmp_16tmp_16tmp_16($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_17tmp_17tmp_17tmp_17($sp) +sw $t0, tmp_14tmp_14tmp_14tmp_14($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 4 +addiu $sp, $sp, 8 +j _loop_10 +_pool_10: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 44($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_16tmp_16tmp_16tmp_16($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Parse.c2i: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_11 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_12 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_13 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_14 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_15 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_16 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_17 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_18 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_19 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_20 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_21 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_22 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_23 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_24 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_25 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_26 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_27 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_28 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_29 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_30 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 184($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 46 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 184($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_30 +_if_30: +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_30: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_28 +_if_28: +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_28: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +j _fi_26 +_if_26: +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_26: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 92($sp) +j _fi_24 +_if_24: +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 96($sp) +_fi_24: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 112($sp) +j _fi_22 +_if_22: +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 116($sp) +_fi_22: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 132($sp) +j _fi_20 +_if_20: +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 136($sp) +_fi_20: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 152($sp) +j _fi_18 +_if_18: +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 156($sp) +_fi_18: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 172($sp) +j _fi_16 +_if_16: +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 176($sp) +_fi_16: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 192($sp) +j _fi_14 +_if_14: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 196($sp) +_fi_14: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 212($sp) +j _fi_12 +_if_12: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 216($sp) +_fi_12: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Parse.a2i: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_31 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_32 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_33 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_34 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_35 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 25 result Parse.a2i_aux +jal Parse.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 100($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 40($sp) +j _fi_35 +_if_35: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 6 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 9 offset 34 result Parse.a2i +jal Parse.a2i +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 136($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_35: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 104($sp) +j _fi_33 +_if_33: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 152($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 168($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 6 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 9 offset 44 result Parse.a2i_aux +jal Parse.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 176($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 40($sp) +lw $t0, 4($sp) +sw $t0, 144($sp) +_fi_33: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 164($sp) +j _fi_31 +_if_31: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 168($sp) +_fi_31: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Parse.a2i_aux: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_36: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_36 +j _pool_36 +_body_36: +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_37 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_38 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_39 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_40 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 136($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 6 offset 35 result Parse.c2i +jal Parse.c2i +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 140($sp) +addiu $sp, $sp, 4 +lw $t0, 28($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 140($sp) +sw $t1, -4($t0) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 152($sp) +sw $t1, -4($t0) +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 168($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_41 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_42 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 20($sp) +j _fi_41 +_if_41: +#Assignment +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_43 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 176($sp) +sw $t1, 8($t0) +lw $t0, 4($sp) +sw $t0, 24($sp) +_fi_41: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 80($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 96($sp) +j _fi_40 +_if_40: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 184($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 196($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 212($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 220($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 11 offset 10 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +lw $t1, 224($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 228($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 228($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 52($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 148($sp) +_fi_40: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 164($sp) +j _fi_38 +_if_38: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 236($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 248($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 264($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 272($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 24($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 11 offset 10 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +lw $t1, 276($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 280($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 280($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 52($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 216($sp) +_fi_38: +addiu $sp, $sp, 8 +lw $t0, tmp_70tmp_70tmp_70tmp_70($sp) +sw $t0, tmp_15tmp_15tmp_15tmp_15($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_36 +_pool_36: +lw $t0, tmp_16tmp_16tmp_16tmp_16($sp) +sw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_10tmp_10tmp_10tmp_10($sp) +sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +lw $t1, 12($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +BoolOp.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +BoolOp.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, BoolOp_name +jr $ra +BoolOp.and: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +bnez $t0, _if_44 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 12($sp) +j _fi_44 +_if_44: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +_fi_44: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +BoolOp.or: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +bnez $t0, _if_45 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 12($sp) +j _fi_45 +_if_45: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +_fi_45: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips new file mode 100644 index 00000000..2d8ee4c6 --- /dev/null +++ b/tests/codegen/hello_world.mips @@ -0,0 +1,387 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "Hello, World.\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 4 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips new file mode 100644 index 00000000..8838297b --- /dev/null +++ b/tests/codegen/life.mips @@ -0,0 +1,5641 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_7: .asciiz "\n" +string_9: .asciiz "\n" +string_10: .asciiz "\n" +string_12: .asciiz " " +string_14: .asciiz " " +string_16: .asciiz " " +string_18: .asciiz " " +string_21: .asciiz " " +string_22: .asciiz " " +string_25: .asciiz " " +string_26: .asciiz " " +string_29: .asciiz " " +string_30: .asciiz " " +string_33: .asciiz " " +string_34: .asciiz " " +string_37: .asciiz " " +string_38: .asciiz " " +string_39: .asciiz "X" +string_41: .asciiz "X" +string_43: .asciiz "X" +string_45: .asciiz "X" +string_47: .asciiz "X" +string_49: .asciiz "X" +string_51: .asciiz "X" +string_53: .asciiz "X" +string_57: .asciiz "-" +string_58: .asciiz "X" +string_60: .asciiz "-" +string_61: .asciiz "X" +string_62: .asciiz "X" +string_64: .asciiz "\nPlease chose a number:\n" +string_65: .asciiz "\t1: A cross\n" +string_66: .asciiz "\t2: A slash from the upper left to lower right\n" +string_67: .asciiz "\t3: A slash from the upper right to lower left\n" +string_68: .asciiz "\t4: An X\n" +string_69: .asciiz "\t5: A greater than sign \n" +string_70: .asciiz "\t6: A less than sign\n" +string_71: .asciiz "\t7: Two greater than signs\n" +string_72: .asciiz "\t8: Two less than signs\n" +string_73: .asciiz "\t9: A 'V'\n" +string_74: .asciiz "\t10: An inverse 'V'\n" +string_75: .asciiz "\t11: Numbers 9 and 10 combined\n" +string_76: .asciiz "\t12: A full grid\n" +string_77: .asciiz "\t13: A 'T'\n" +string_78: .asciiz "\t14: A plus '+'\n" +string_79: .asciiz "\t15: A 'W'\n" +string_80: .asciiz "\t16: An 'M'\n" +string_81: .asciiz "\t17: An 'E'\n" +string_82: .asciiz "\t18: A '3'\n" +string_83: .asciiz "\t19: An 'O'\n" +string_84: .asciiz "\t20: An '8'\n" +string_85: .asciiz "\t21: An 'S'\n" +string_86: .asciiz "Your choice => " +string_87: .asciiz "\n" +string_109: .asciiz " " +string_110: .asciiz " XXXX X XX X XXXX " +string_111: .asciiz " XX X XX X XX X XX X XX " +string_112: .asciiz " XX X XX X XX " +string_113: .asciiz "XXX X X X X XXXX " +string_114: .asciiz "XXXXX X XXXXX X XXXX" +string_115: .asciiz " X X X X X X X" +string_116: .asciiz "X X X X X X X " +string_117: .asciiz " X X XXXXX X X " +string_118: .asciiz "XXXXX X X X X " +string_119: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" +string_120: .asciiz "X X X X X X X X" +string_121: .asciiz " X X X X X" +string_122: .asciiz "X X X X X " +string_123: .asciiz " X XX X X X " +string_124: .asciiz "X X X XX X " +string_125: .asciiz " X X X X X" +string_126: .asciiz "X X X X X " +string_127: .asciiz "X X X X X X X X X" +string_128: .asciiz "X X X X X" +string_129: .asciiz " X X X X X " +string_130: .asciiz " XX XXXX XXXX XX " +string_131: .asciiz "Would you like to continue with the next generation? \n" +string_132: .asciiz "Please use lowercase y or n for your answer [y]: " +string_133: .asciiz "\n" +string_134: .asciiz "n" +string_136: .asciiz "\n\n" +string_137: .asciiz "Would you like to choose a background pattern? \n" +string_138: .asciiz "Please use lowercase y or n for your answer [n]: " +string_139: .asciiz "y" +string_141: .asciiz "Welcome to the Game of Life.\n" +string_142: .asciiz "There are many initial states to choose from. \n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Board_INH: +.word IO_INH +CellularAutomaton_INH: +.word Board_INH +Main_INH: +.word CellularAutomaton_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Board_name: .asciiz "Board" +Board_VT: +.word Board_INH +.word Board.size_of_board +.word Board.board_init +CellularAutomaton_name: .asciiz "CellularAutomaton" +CellularAutomaton_VT: +.word CellularAutomaton_INH +.word CellularAutomaton.init +.word CellularAutomaton.print +.word CellularAutomaton.num_cells +.word CellularAutomaton.cell +.word CellularAutomaton.north +.word CellularAutomaton.south +.word CellularAutomaton.east +.word CellularAutomaton.west +.word CellularAutomaton.northwest +.word CellularAutomaton.northeast +.word CellularAutomaton.southeast +.word CellularAutomaton.southwest +.word CellularAutomaton.neighbors +.word CellularAutomaton.cell_at_next_evolution +.word CellularAutomaton.evolve +.word CellularAutomaton.option +.word CellularAutomaton.prompt +.word CellularAutomaton.prompt2 +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +Board.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Board.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Board_name +jr $ra +Board.size_of_board: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Board.board_init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 15 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 16 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_2 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 20 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_3 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 21 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 25 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_5 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 28 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_6 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 128($sp) +sw $t1, 4($t0) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 132($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 136($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 136($sp) +sw $t1, 12($t0) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_6 +_if_6: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 144($sp) +sw $t1, 4($t0) +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 148($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 152($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 152($sp) +sw $t1, 12($t0) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 48($sp) +_fi_6: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 64($sp) +j _fi_5 +_if_5: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 160($sp) +sw $t1, 4($t0) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 164($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 168($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 168($sp) +sw $t1, 12($t0) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_5: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 96($sp) +j _fi_4 +_if_4: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 176($sp) +sw $t1, 4($t0) +#Assignment +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 180($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 184($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 184($sp) +sw $t1, 12($t0) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 112($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 128($sp) +j _fi_3 +_if_3: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 192($sp) +sw $t1, 4($t0) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 196($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 200($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 200($sp) +sw $t1, 12($t0) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 144($sp) +_fi_3: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 160($sp) +j _fi_2 +_if_2: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 208($sp) +sw $t1, 4($t0) +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 212($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 216($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 216($sp) +sw $t1, 12($t0) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 176($sp) +_fi_2: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 192($sp) +j _fi_1 +_if_1: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 224($sp) +sw $t1, 4($t0) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 228($sp) +sw $t1, 8($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 232($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 232($sp) +sw $t1, 12($t0) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 208($sp) +_fi_1: +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 236($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 216($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_59tmp_59tmp_59tmp_59($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, CellularAutomaton_name +jr $ra +CellularAutomaton.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($t0) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 8 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_7 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 10 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_8: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_8 +j _pool_8 +_body_8: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 6 offset 21 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 84($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 24 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 96($sp) +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 108($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 52($sp) +addiu $sp, $sp, 12 +addiu $sp, $sp, 8 +j _loop_8 +_pool_8: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_10 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 30 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 120($sp) +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 100($sp) +addiu $sp, $sp, 16 +lw $t0, tmp_31tmp_31tmp_31tmp_31($sp) +sw $t0, tmp_5tmp_5tmp_5tmp_5($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_6tmp_6tmp_6tmp_6($sp) +sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.num_cells: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_11 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 40($sp) +j _fi_11 +_if_11: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_12 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_11: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.north: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_13 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 14 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 56($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 44($sp) +j _fi_13 +_if_13: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_14 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 48($sp) +_fi_13: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.south: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_15 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 14 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 56($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 44($sp) +j _fi_15 +_if_15: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_16 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 48($sp) +_fi_15: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.east: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 44($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_17 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 20 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 80($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 68($sp) +j _fi_17 +_if_17: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_18 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 72($sp) +_fi_17: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.west: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_19 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_20 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 20 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 80($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_20 +_if_20: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_21 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_20: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +j _fi_19 +_if_19: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_22 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_19: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.northwest: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_23 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_24 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 22 result CellularAutomaton.north +jal CellularAutomaton.north +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 88($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_24 +_if_24: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_25 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_24: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 80($sp) +j _fi_23 +_if_23: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_26 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 84($sp) +_fi_23: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.northeast: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_27 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 44($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_28 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 26 result CellularAutomaton.north +jal CellularAutomaton.north +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 104($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 68($sp) +j _fi_28 +_if_28: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_29 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 72($sp) +_fi_28: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 96($sp) +j _fi_27 +_if_27: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_30 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 100($sp) +_fi_27: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.southeast: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_31 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 44($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_32 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 26 result CellularAutomaton.south +jal CellularAutomaton.south +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 104($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 68($sp) +j _fi_32 +_if_32: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_33 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 72($sp) +_fi_32: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 96($sp) +j _fi_31 +_if_31: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_34 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 100($sp) +_fi_31: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.southwest: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_35 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_36 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 5 offset 22 result CellularAutomaton.south +jal CellularAutomaton.south +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 88($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_36 +_if_36: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_37 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_36: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 80($sp) +j _fi_35 +_if_35: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_38 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 84($sp) +_fi_35: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.neighbors: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 16 result CellularAutomaton.north +jal CellularAutomaton.north +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 64($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_39 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_40 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_40 +_if_40: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_40: +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 24 result CellularAutomaton.south +jal CellularAutomaton.south +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 96($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_41 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_42 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_42 +_if_42: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_42: +addiu $sp, $sp, 8 +lw $t0, 36($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 68($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 32 result CellularAutomaton.east +jal CellularAutomaton.east +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 128($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_43 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_44 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_44 +_if_44: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_44: +addiu $sp, $sp, 8 +lw $t0, 36($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 104($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 156($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 156($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 40 result CellularAutomaton.west +jal CellularAutomaton.west +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 160($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_45 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_46 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_46 +_if_46: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_46: +addiu $sp, $sp, 8 +lw $t0, 36($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 140($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 188($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 188($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 48 result CellularAutomaton.northeast +jal CellularAutomaton.northeast +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 192($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_47 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_48 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_48 +_if_48: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_48: +addiu $sp, $sp, 8 +lw $t0, 36($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 176($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 220($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 220($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 56 result CellularAutomaton.northwest +jal CellularAutomaton.northwest +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 224($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_49 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_50 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_50 +_if_50: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_50: +addiu $sp, $sp, 8 +lw $t0, 36($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 212($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 252($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 252($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 64 result CellularAutomaton.southeast +jal CellularAutomaton.southeast +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 256($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_51 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_52 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_52 +_if_52: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_52: +addiu $sp, $sp, 8 +lw $t0, 36($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 248($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 284($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 284($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 72 result CellularAutomaton.southwest +jal CellularAutomaton.southwest +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 288($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_53 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_54 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_54 +_if_54: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_54: +addiu $sp, $sp, 8 +lw $t0, 36($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 284($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 288($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.cell_at_next_evolution: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 8 result CellularAutomaton.neighbors +jal CellularAutomaton.neighbors +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_55 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 14 result CellularAutomaton.neighbors +jal CellularAutomaton.neighbors +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 56($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_56 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_57 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_56 +_if_56: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 21 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 84($sp) +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_58 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_59 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_60 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_59 +_if_59: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_61 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_59: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 60($sp) +_fi_56: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 84($sp) +j _fi_55 +_if_55: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_62 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 88($sp) +_fi_55: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.evolve: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_63: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_63 +j _pool_63 +_body_63: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 19 result CellularAutomaton.cell_at_next_evolution +jal CellularAutomaton.cell_at_next_evolution +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 76($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 4 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 76($sp) +sw $t1, -4($t0) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 88($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_63 +_pool_63: +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 92($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 64($sp) +addiu $sp, $sp, 12 +lw $t0, tmp_24tmp_24tmp_24tmp_24($sp) +sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_8tmp_8tmp_8tmp_8($sp) +sw $t0, tmp_5tmp_5tmp_5tmp_5($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_6tmp_6tmp_6tmp_6($sp) +sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.option: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_64 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 9 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 36($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_65 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 12 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_66 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 15 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 60($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_67 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 18 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 72($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_68 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 21 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 84($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_69 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 24 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 96($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_70 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 27 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 108($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_71 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 30 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 120($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_72 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 33 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 132($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 140($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_73 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 36 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 144($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 152($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_74 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 39 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 156($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_75 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 42 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 168($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 176($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_76 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 45 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 180($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 188($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_77 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 48 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 192($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 200($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_78 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 51 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 204($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 212($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_79 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 54 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 216($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 224($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_80 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 57 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 228($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 236($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_81 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 60 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 240($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 248($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_82 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 63 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 252($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 260($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_83 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 66 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 264($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 272($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_84 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 69 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 276($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 284($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_85 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 72 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 288($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 296($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_86 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 75 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 300($sp) +addiu $sp, $sp, 4 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 308($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 77 result IO.in_int +jal IO.in_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 308($sp) +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 308($sp) +sw $t1, -4($t0) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 316($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_87 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 80 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 320($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 332($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_88 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 348($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_89 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 364($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_90 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 380($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_91 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 396($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_92 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 412($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_93 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 428($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_94 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 444($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_95 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 460($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_96 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 476($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_97 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 492($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 11 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_98 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 508($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 12 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_99 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 524($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 13 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_100 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 540($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 14 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_101 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 556($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 15 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_102 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 572($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 16 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_103 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 588($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 17 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_104 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 604($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 18 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_105 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 620($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 19 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_106 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 636($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 20 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_107 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 652($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 21 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_108 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_109 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 20($sp) +j _fi_108 +_if_108: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_110 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 24($sp) +_fi_108: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 40($sp) +j _fi_107 +_if_107: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_111 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_107: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 60($sp) +j _fi_106 +_if_106: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_112 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 64($sp) +_fi_106: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 80($sp) +j _fi_105 +_if_105: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_113 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 84($sp) +_fi_105: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 100($sp) +j _fi_104 +_if_104: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_114 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 104($sp) +_fi_104: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 120($sp) +j _fi_103 +_if_103: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_115 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 124($sp) +_fi_103: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 140($sp) +j _fi_102 +_if_102: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_116 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 144($sp) +_fi_102: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 160($sp) +j _fi_101 +_if_101: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_117 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 164($sp) +_fi_101: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 180($sp) +j _fi_100 +_if_100: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_118 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 184($sp) +_fi_100: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 200($sp) +j _fi_99 +_if_99: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_119 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 204($sp) +_fi_99: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 220($sp) +j _fi_98 +_if_98: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_120 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 224($sp) +_fi_98: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 240($sp) +j _fi_97 +_if_97: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_121 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 244($sp) +_fi_97: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 260($sp) +j _fi_96 +_if_96: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_122 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 264($sp) +_fi_96: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 280($sp) +j _fi_95 +_if_95: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_123 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 284($sp) +_fi_95: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 300($sp) +j _fi_94 +_if_94: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_124 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 304($sp) +_fi_94: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 320($sp) +j _fi_93 +_if_93: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_125 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 324($sp) +_fi_93: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 340($sp) +j _fi_92 +_if_92: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_126 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 344($sp) +_fi_92: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 360($sp) +j _fi_91 +_if_91: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_127 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 364($sp) +_fi_91: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 380($sp) +j _fi_90 +_if_90: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_128 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 384($sp) +_fi_90: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 400($sp) +j _fi_89 +_if_89: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_129 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 404($sp) +_fi_89: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 420($sp) +j _fi_88 +_if_88: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_130 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 424($sp) +_fi_88: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 724($sp) +addiu $sp, $sp, 104 +lw $t0, tmp_186tmp_186tmp_186tmp_186($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.prompt: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_131 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 9 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 36($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_132 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 12 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 4 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 14 result IO.in_string +jal IO.in_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 56($sp) +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 56($sp) +sw $t1, -4($t0) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_133 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 17 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 68($sp) +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_134 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_135 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 20($sp) +j _fi_135 +_if_135: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 24($sp) +_fi_135: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +addiu $sp, $sp, 20 +lw $t0, tmp_23tmp_23tmp_23tmp_23($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +CellularAutomaton.prompt2: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_136 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 8 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 32($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_137 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 11 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 44($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_138 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 14 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 56($sp) +addiu $sp, $sp, 4 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 16 result IO.in_string +jal IO.in_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 64($sp) +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 64($sp) +sw $t1, -4($t0) +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_139 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_140 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 20($sp) +j _fi_140 +_if_140: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 24($sp) +_fi_140: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +addiu $sp, $sp, 20 +lw $t0, tmp_22tmp_22tmp_22tmp_22($sp) +sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_141 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 10 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_142 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 12 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 8 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_143: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 14 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 56($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +bnez $t0, _body_143 +j _pool_143 +_body_143: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 64($sp) +sw $t1, -4($t0) +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 17 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 68($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +lw $t1, 68($sp) +sw $t1, -4($t0) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, CellularAutomaton_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result CellularAutomaton.Constructor +la $v0, 1 +jal CellularAutomaton.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 88($sp) +sw $t1, 4($t0) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_144: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +bnez $t0, _body_144 +j _pool_144 +_body_144: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 28 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 112($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +bnez $t0, _if_145 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 116($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 12($sp) +j _fi_145 +_if_145: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 136($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +_fi_145: +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_144 +_pool_144: +lw $t0, 4($sp) +sw $t0, 80($sp) +addiu $sp, $sp, 20 +addiu $sp, $sp, 8 +j _loop_143 +_pool_143: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 140($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 112($sp) +addiu $sp, $sp, 16 +lw $t0, tmp_35tmp_35tmp_35tmp_35($sp) +sw $t0, tmp_6tmp_6tmp_6tmp_6($sp) +addiu $sp, $sp, 8 +lw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips new file mode 100644 index 00000000..c94bfa16 --- /dev/null +++ b/tests/codegen/list.mips @@ -0,0 +1,973 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_2: .asciiz " " +string_3: .asciiz "\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +List_INH: +.word Object_INH +Cons_INH: +.word List_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +List_name: .asciiz "List" +List_VT: +.word List_INH +.word List.isNil +.word List.head +.word List.tail +.word List.cons +Cons_name: .asciiz "Cons" +Cons_VT: +.word Cons_INH +.word Cons.isNil +.word Cons.head +.word Cons.tail +.word Cons.init +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.print_list +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +List.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, List_name +jr $ra +List.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.head: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.tail: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.cons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 6 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Cons_name +jr $ra +Cons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.head: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.tail: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, 4($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 8($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 10 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 12 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 3 offset 15 result Main.print_list +jal Main.print_list +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 60($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 48($sp) +j _fi_1 +_if_1: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 17 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 68($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_1: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, List_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result List.Constructor +la $v0, 1 +jal List.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Args: 0 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 7 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Args: 0 +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 9 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Args: 0 +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 11 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Args: 0 +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 13 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 64($sp) +sw $t1, 4($t0) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_4: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +li $t1, 1 +sub $t0, $t1, $t0 +sw $t0, 12($sp) +lw $t0, 4($sp) +bnez $t0, _body_4 +j _pool_4 +_body_4: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 23 result Main.print_list +jal Main.print_list +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 92($sp) +addiu $sp, $sp, 8 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +lw $t1, 100($sp) +sw $t1, 4($t0) +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_4 +_pool_4: +lw $t0, 4($sp) +sw $t0, 92($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips new file mode 100644 index 00000000..7c7c150f --- /dev/null +++ b/tests/codegen/palindrome.mips @@ -0,0 +1,759 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_4: .asciiz "enter a string\n" +string_6: .asciiz "that was not a palindrome\n" +string_7: .asciiz "that was a palindrome\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.pal +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.pal: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_2 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 3 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 7 offset 6 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 12 +lw $t0, 32($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 48($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_3 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 56($sp) +j _fi_3 +_if_3: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 16($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 6 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 12 +#Dispatch in place +#obj 8 offset 35 result Main.pal +jal Main.pal +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 140($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 88($sp) +_fi_3: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 108($sp) +j _fi_2 +_if_2: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 112($sp) +_fi_2: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 132($sp) +j _fi_1 +_if_1: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 136($sp) +_fi_1: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($t0) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_4 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 7 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 28($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 10 result IO.in_string +jal IO.in_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 2 offset 10 result Main.pal +jal Main.pal +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_5 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 12 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 20($sp) +j _fi_5 +_if_5: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_7 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 14 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 56($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 28($sp) +_fi_5: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 48($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips new file mode 100644 index 00000000..6481c5f6 --- /dev/null +++ b/tests/codegen/primes.mips @@ -0,0 +1,829 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "2 is trivially prime.\n" +string_7: .asciiz " is prime.\n" +string_9: .asciiz "continue" +string_10: .asciiz "halt" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 24 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, 4($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 8($t0) +#Integer +li $a0, 500 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, 16($t0) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_2: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +bnez $t0, _body_2 +j _pool_2 +_body_2: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 56($sp) +sw $t1, 8($t0) +#Assignment +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 60($sp) +sw $t1, 12($t0) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_3: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 120($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 24($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 36($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_5 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +j _fi_5 +_if_5: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 48($sp) +_fi_5: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 72($sp) +j _fi_4 +_if_4: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_3 +j _pool_3 +_body_3: +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 148($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 152($sp) +sw $t1, 12($t0) +addiu $sp, $sp, 8 +j _loop_3 +_pool_3: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 172($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 176($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 16($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_6 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_6 +_if_6: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 188($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 188($sp) +sw $t1, 4($t0) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 196($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 49 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 196($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_7 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 51 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 204($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 52($sp) +_fi_6: +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 216($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 220($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_8 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 20($sp) +j _fi_8 +_if_8: +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_10 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 1 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 28($sp) +_fi_8: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 192($sp) +addiu $sp, $sp, 20 +addiu $sp, $sp, 8 +j _loop_2 +_pool_2: +lw $t0, 4($sp) +lw $t1, 232($sp) +sw $t1, 20($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index fa6e91ff..9621b73b 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -1,5 +1,5 @@ .data -buffer: .space 80 +buffer: .space 2048 strsubstrexception: .asciiz "Substring index exception" string_1: .asciiz "\n" @@ -49,7 +49,10 @@ Main_VT: .globl main .text IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 4 +lw $a0, 8($sp) syscall jr $ra @@ -235,291 +238,272 @@ jr $ra Object.Constructor: sw $ra, 0($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) addiu $sp, $sp, -4 addiu $sp, $sp, -4 jr $ra Object.type_name: sw $ra, 0($sp) -addiu $sp, $sp, 4 -sw $a1, ($sp) -la $a0, Object_name +addiu $sp, $sp, -4 +la $a1, Object_name jr $ra Int.Constructor: sw $ra, 0($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) addiu $sp, $sp, -4 addiu $sp, $sp, -4 jr $ra Int.type_name: sw $ra, 0($sp) -addiu $sp, $sp, 4 -sw $a1, ($sp) -la $a0, Int_name +addiu $sp, $sp, -4 +la $a1, Int_name jr $ra IO.Constructor: sw $ra, 0($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) addiu $sp, $sp, -4 addiu $sp, $sp, -4 jr $ra IO.type_name: sw $ra, 0($sp) -addiu $sp, $sp, 4 -sw $a1, ($sp) -la $a0, IO_name +addiu $sp, $sp, -4 +la $a1, IO_name jr $ra Bool.Constructor: sw $ra, 0($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) addiu $sp, $sp, -4 addiu $sp, $sp, -4 jr $ra Bool.type_name: sw $ra, 0($sp) -addiu $sp, $sp, 4 -sw $a1, ($sp) -la $a0, Bool_name +addiu $sp, $sp, -4 +la $a1, Bool_name jr $ra String.Constructor: sw $ra, 0($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) addiu $sp, $sp, -4 addiu $sp, $sp, -4 jr $ra String.type_name: sw $ra, 0($sp) -addiu $sp, $sp, 4 -sw $a1, ($sp) -la $a0, String_name +addiu $sp, $sp, -4 +la $a1, String_name jr $ra #--------------Initial Code--------------- main: li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall -sw $v0, -4($sp) +sw $v0, 4($sp) la $a1, Main_VT sw $a1, ($v0) #DispatchParent in place #obj 2 offset 1 result Main.Constructor la $v0, 1 jal Main.Constructor -sw $a1, ($sp) +sw $a1, 0($sp) +addi $sp, $sp, -4 #Dispatch in place #obj 3 offset 1 result Main.main -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) jal Main.main -sw $a1, ($sp) +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) j Object.abort #--------------End Initial Code--------------- Main.Constructor: sw $ra, 0($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 -lw $v0, -4($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) addiu $sp, $sp, -4 addiu $sp, $sp, -4 jr $ra Main.type_name: sw $ra, 0($sp) -addiu $sp, $sp, 4 -sw $a1, ($sp) -la $a0, Main_name +addiu $sp, $sp, -4 +la $a1, Main_name jr $ra Main.main: sw $ra, 0($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #Block li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #Point-Dispatch li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #push object #Self-Dispatch li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #Args: 0 #Point-Dispatch li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #push object #Point-Dispatch li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #push object li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall -sw $v0, -4($sp) +sw $v0, 4($sp) la $a1, Object_VT sw $a1, ($v0) -lw $a0, -4($sp) -sw $a0, -12($sp) +lw $t0, 4($sp) +sw $t0, 12($sp) #DispatchParent in place #obj 2 offset 1 result Object.Constructor la $v0, 1 jal Object.Constructor -sw $a1, ($sp) -addiu $sp, $sp, -8 +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 #Dispatch in place #obj 4 offset 1 result Object.type_name -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) jal Object.type_name -sw $a1, ($sp) -addiu $sp, $sp, -4 +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 #Args: 0 #Integer li $a0, 4 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #Args: 1 #Integer li $a0, 1 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #Dispatch in place #obj 7 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 #Dispatch in place #obj 8 offset 12 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 48($sp) +addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #push object #Point-Dispatch li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #push object #Dispatch in place -#obj 1 offset 1 result self.type_name -move $t0, $sp -lw $t1, 4($t0) +#obj 1 offset 1 result Bool.type_name +jal Bool.type_name +sw $a1, 0($sp) addi $sp, $sp, 4 -sw $t1, 0($sp) -jal self.type_name -sw $a1, ($sp) -addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 #Args: 0 #Integer li $a0, 1 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #Args: 1 #Integer li $a0, 3 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #Dispatch in place #obj 4 offset 3 result String.substr -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) jal String.substr -sw $a1, ($sp) -addiu $sp, $sp, -12 +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 #Dispatch in place #obj 13 offset 5 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 #Args: 0 #loading label li $a0, 0 sw $a0, ($sp) -addiu $sp, $sp, 4 +addiu $sp, $sp, -4 la $a0, string_1 -sw $a0, -4($sp) +sw $a0, 0($sp) +addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 18 result IO.out_string -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, 4 -sw $t1, 0($sp) jal IO.out_string -sw $a1, ($sp) -addiu $sp, $sp, -8 -lw $a0, -4($sp) -sw $a0, -64($sp) -addiu $sp, $sp, -8 -lw $v0, -4($sp) +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 72($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 64($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) addiu $sp, $sp, -4 addiu $sp, $sp, -4 jr $ra diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips new file mode 100644 index 00000000..55cd9535 --- /dev/null +++ b/tests/codegen/sort-list.mips @@ -0,0 +1,1625 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_2: .asciiz "\n" +string_4: .asciiz "How many numbers to sort? " +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +List_INH: +.word IO_INH +Cons_INH: +.word List_INH +Nil_INH: +.word List_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +List_name: .asciiz "List" +List_VT: +.word List_INH +.word List.isNil +.word List.cons +.word List.car +.word List.cdr +.word List.rev +.word List.sort +.word List.insert +.word List.rcons +.word List.print_list +Cons_name: .asciiz "Cons" +Cons_VT: +.word Cons_INH +.word Cons.isNil +.word Cons.init +.word Cons.car +.word Cons.cdr +.word Cons.rev +.word Cons.sort +.word Cons.insert +.word Cons.rcons +.word Cons.print_list +Nil_name: .asciiz "Nil" +Nil_VT: +.word Nil_INH +.word Nil.isNil +.word Nil.rev +.word Nil.sort +.word Nil.insert +.word Nil.rcons +.word Nil.print_list +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.iota +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $v0 +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 0($a0) +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($v1) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, -4($sp) +_stringlength.loop: +lb $a1, 0($a0) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +lw $a1, -4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +j Object.abort +#--------------End Initial Code--------------- +List.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, List_name +jr $ra +List.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.cons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 4 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +lw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.car: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 360000 +syscall +sw $v0, 4($sp) +la $a1, Int_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Int.Constructor +la $v0, 1 +jal Int.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, List_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result List.Constructor +la $v0, 1 +jal List.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.rev: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 4 result List.cdr +jal List.cdr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 16($sp) +addiu $sp, $sp, 0 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.sort: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 4 result List.cdr +jal List.cdr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 16($sp) +addiu $sp, $sp, 0 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.insert: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result List.cdr +jal List.cdr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.rcons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result List.cdr +jal List.cdr +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 0 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +List.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 4 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 16($sp) +addiu $sp, $sp, 0 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Cons_name +jr $ra +Cons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, 4($t0) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 8($t0) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.car: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.rev: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.sort: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 4 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.insert: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 8 offset 5 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 48($sp) +j _fi_1 +_if_1: +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 6 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 72($sp) +_fi_1: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.rcons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 8 offset 5 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Cons.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 6 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 9 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 36($sp) +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Nil.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Nil.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Nil_name +jr $ra +Nil.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Nil.rev: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +sw $t0, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Nil.sort: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +sw $t0, 4($sp) +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Nil.insert: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 6 result Nil.rcons +jal Nil.rcons +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 24($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Nil.rcons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 6 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Nil.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.iota: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Nil_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Nil.Constructor +la $v0, 1 +jal Nil.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 4($t0) +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_3: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_3 +j _pool_3 +_body_3: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 6 offset 3 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 12($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +lw $t1, 80($sp) +sw $t1, 4($t0) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 92($sp) +sw $t1, -4($t0) +lw $t0, 4($sp) +sw $t0, 40($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_3 +_pool_3: +lw $t0, tmp_23tmp_23tmp_23tmp_23($sp) +sw $t0, tmp_8tmp_8tmp_8tmp_8($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_4 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 20($sp) +addiu $sp, $sp, 8 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 10 result IO.in_int +jal IO.in_int +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 2 offset 10 result Main.iota +jal Main.iota +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 40($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 3 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +addiu $sp, $sp, -4 +addiu $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall From 4fab57a153b38f4256aa2f95bb26aa2baeb0a93a Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Mon, 30 Nov 2020 05:49:26 -0500 Subject: [PATCH 102/140] working on report, adding parsing.md --- doc/Readme.md | 39 ++++----- doc/parsing.md | 178 +++++++++++++++++++++++++++++++++++++++ doc/report/report.pdf | Bin 0 -> 121559 bytes doc/report/report.tex | 188 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 381 insertions(+), 24 deletions(-) create mode 100644 doc/parsing.md create mode 100644 doc/report/report.pdf create mode 100644 doc/report/report.tex diff --git a/doc/Readme.md b/doc/Readme.md index 9317d6a4..44226852 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -1,6 +1,6 @@ # Documentación -> Introduzca sus datos (de todo el equipo) en la siguiente tabla: +> La siguiente tabla contiene los datos del equipo: **Nombre** | **Grupo** | **Github** --|--|-- @@ -8,32 +8,23 @@ Oscar Luis Hernandez Solano | C411 | [@oschdez97](https://github.com/oschdez97) Harold Rosales Hernandez | C411 | [@hros18](https://github.com/hros18) Carlos Rafael Ortega Lezcano | C411 | [@CRafa97](https://github.com/CRafa97) -## Readme +## Uso del Compilador -Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: +Para instalar todas las dependencias del compilador ejecute desde el directorio raiz del proyecto -- Cómo ejecutar (y compilar si es necesario) su compilador. -- Requisitos adicionales, dependencias, configuración, etc. -- Opciones adicionales que tenga su compilador. +```bash +pip install -r requirements.txt +``` -### Sobre los Equipos de Desarrollo +Para ejecutar el compilador debe moverse al directorio ```src```, y ejecutar el archivo ```cool.sh``` dando como entrada la direccion del archivo a compilar -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. +```bash +cd src/ +./cool.sh '../tests/codegen/hello_world.cl' +``` -### Sobre los Materiales a Entregar +En caso que no tenga `bash` puede ejecutar directamente el script `main.py` que contiene el proceso de compilacion mediante el pipeline -Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. -El documento **NO** debe exceder las 5 cuartillas. -En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. - -### Estructura del reporte - -Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: - -- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. -- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. -- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. - -## Sobre la Fecha de Entrega - -Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. +```bash +python3 main.py '../tests/codegen/hello_world.cl' +``` \ No newline at end of file diff --git a/doc/parsing.md b/doc/parsing.md new file mode 100644 index 00000000..373e19e2 --- /dev/null +++ b/doc/parsing.md @@ -0,0 +1,178 @@ +# Parsing + +## Cool Tokens + + 'CLASS', + 'INHERITS', + 'IF', + 'THEN', + 'ELSE', + 'FI', + 'WHILE', + 'LOOP', + 'POOL', + 'LET', + 'IN', + 'CASE', + 'OF', + 'ESAC', + 'NEW', + 'ISVOID', + 'NOT', + + 'INTEGER', # int + 'STRING', # string + 'BOOL', # bool + 'PLUS', # + + 'MINUS', # - + 'STAR', # * + 'DIVIDE', # / + 'BITNOT', # ~ + 'LESS', # < + 'LESSQ', # <= + 'EQUALS', # = + 'WITH', # => + 'ASSIGN', # <- + 'LPAREN', # ( + 'RPAREN', # ) + 'LBRACE', # { + 'RBRACE', # } + 'SEMI', # ; + 'COLON', # : + 'COMMA', # , + 'DOT', # . + 'ARROBA', # @ + 'TYPEID', + 'ID', + 'ERROR' + +## Cool Grammar + + program : class_list + + class_list : def_class + | def_class class_list + + def_class : CLASS TYPEID LBRACE feature_list RBRACE SEMI + | CLASS TYPEID INHERITS TYPEID LBRACE feature_list RBRACE SEMI + + feature_list : def_attr SEMI feature_list + | def_func SEMI feature_list + | empty + + def_attr : ID COLON TYPEID + | ID COLON TYPEID ASSIGN expr + + def_func : ID LPAREN param_list RPAREN COLON TYPEID LBRACE expr RBRACE + + param_list : param_build + | empty + + param_build : param empty + | param COMMA param_build + + param : ID COLON TYPEID + + expr : LET let_list IN expr + | CASE expr OF cases_list ESAC + | IF expr THEN expr ELSE expr FI + | WHILE expr LOOP expr POOL + | ID ASSIGN expr + | arith + | expr PLUS expr + | expr MINUS expr + | expr STAR expr + | expr DIVIDE expr + | expr LESS expr + | expr LESSQ expr + | expr EQUALS expr + | BITNOT expr + | ISVOID expr + | NOT expr + + let_list : let_assign + | let_assign COMMA let_list + + let_assign : ID COLON TYPEID ASSIGN expr + | ID COLON TYPEID + + cases_list : case SEMI + | case SEMI cases_list + + case : ID COLON TYPEID WITH expr + + arith : base_call + + base_call : fact ARROBA TYPEID DOT ID LPAREN arg_list RPAREN + | fact + + fact : fact DOT ID LPAREN arg_list RPAREN + | ID LPAREN arg_list RPAREN + | atom + | LPAREN expr RPAREN + + arg_list : arg_build + | empty + + arg_build : expr empty + | expr COMMA arg_build + + atom : INTEGER + | ID + | NEW TYPEID + | LBRACE block RBRACE + | BOOL + | STRING + + block : expr SEMI + | expr SEMI block + +## Cool AST + + ASTNode + | + ├── ProgramNode + │ + ├── ClassDeclarationNode + ├── AttrDeclarationNode + ├── FuncDeclarationNode + ├── FormalParamNode + ├── VarDeclarationNode + | + ├── ExprNode + │ ├── OperationNode + | | ├── BinaryOperationNode + | | | ├── SumNode + | | | ├── DifNode + | | | ├── StarNode + | | | ├── DivNode + | | | ├── LessNode + | | | ├── LessEqualNode + | | | └── EqualNode + | | | + | | └── UnaryOperationNode + | | ├── BitNotNode + | | └── NotNode + | | + │ ├── VariableNode + │ ├── NewNode + │ ├── ConditionalNode + │ ├── LetNode + │ ├── LetDeclarationNode + │ ├── BlockNode + │ ├── CaseNode + │ ├── AssignNode + │ ├── IsVoid + │ ├── ConditionalNode + │ ├── WhileNode + │ | + │ ├── SelfCallNode + │ ├── ParentCallNode + │ ├── ExprCallNode + | | + │ └── ConstantNode + | ├── IntegerNode + | ├── StringNode + | └── BoolNode + | + └── ErrorNode \ No newline at end of file diff --git a/doc/report/report.pdf b/doc/report/report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..72e81d82321f04708a8c361d148d7295f839a936 GIT binary patch literal 121559 zcma&NQ;;w~leO74-?nYrwr$(CZQHhO+qP}n-T(LR?p)18?9^4(Wkp6t)N{^B5_w@! z8U|VxD3bZ*k##6$MtpjFJ3~t-Zf+<#X%kyBXLEcedIl!^|K~u_iCS1Yn>gariCP;t zn+Tg2*%_Na@$y1BIXjvd*g&~&)@bU*ZMVbv&6TZ-!Pi%*|J@Xl+rv82L;~;-Z}n>5 z4p?z@$@08r-*6Z|UPwhI+HmY{(9Dx*p^79Ri~Npf^zHU}d^OG51sk$9eV_hL!Lp@B zXm6uuG2~QbeO;ce9UJ*vhE?!xM`V+w`1M}Jm6g&=o;EQza(%o0#kKKaxeRekwV;km zl}Vqxp2|9=LJCy>UO;|i(wqG|S1d%IGF(3*^`~44xE#X8n=t?av_%wVup$^UI0o1-@{d--fV|Kt&M(}pr_2|yc(UaUhws2*X` z*ScXyNj0f}D8_q>Ni~adCSs)8^jvd=f>W+QvoX`N>f)M(O;R1E?AtoZVlYvoZ2PJ8 zU#wTYM_bWB_i=b!xuInmd1Qt!rsJaBjvqVZs3`Vca55WO-J3e|CSH;bzdn_PNQIU- z_QRSj%e_6$>C23C(uPx$W2_0#HJ#qfKIh=teqfeK^1G2BR9ZJcb-f-c*<(`}ZOnK* zaViQ|c$xYEb7L69H-I_=a=w7=n;_6F{uT|o|7U(1SO1)5NY0O(LMFo|D*~;1C#s}} zLe$fGP*N$!(ypz>dK)F1^KM(IEo^_(04Ig}t>wer;VsBOqs2flzRe^%{A2tq%X}SY1_mPWtz;oPB-*i5iIU#iz5N3N@v8UndSVCIEf& zW@lmVwm-pNS4Tf4sgQCK9i$}Utlfk#hLvyVu)gI$US~yM$5Kr)5@Cp^_1zRMLFq;hVHulv|b zR53+3JhC^33+uuoBjfURj^QoPcgV_tYPAni^)*1jGk^A{v!TBu%^0h&deP~Xi=gtD zPbEjwE{ICkHPSk`k>zIi@&)?iO|huZRNgN40wY+;W7n+qkU1bXP0 z1pL~g%6~k?hKUM{xb|{nzPX9P00EjFnAl^BgwI!@( z?bPIk01Iwx0?+_Ju#|{oiwMZjvlqk;1XP^PFv|`bM$M77?X&HBmrWIQ03W^65^A>cz0gjTr;&DkzjaK_w+OK93U#M9tD~a-ILdgC+KaMd zR^h%C9Ybb$Whb-22lxKL1hU;&c8AvIuq4B-BKzy_`o52Nv=aN0$ic69BJ`q;m(ZJq zImWjZ%g2p-Rf`*`qN>3AeOWwgr}DJkm2c}KFQ!5!r;y(Y8p3hH05FaBm2jFD8O9nc z!1F|s=JGt`_&wzvF)??QToI#)F+yLqoZ%QjqGKI+dKHOEbE}Rq*H5FQewn z{3rlMP62L$01K8`$PPnq$9^mUPq4>Si7HxEi7R8gbo>k8>5&i1Y~!w>oFn(2M^`ZK z4=w81N~UH=?~jv!@iJC&dFDv_3*;n)=j)w1!Eo~}@A>a$4kP^qQds17K+{<6JoL9) zjzVrng%W>JGW>w&E3j`tTaoD4T=Za@eY9M%M$9Qz;WAGP>cgQI*tkeO&E_7~f zIJzDoX*N+a5zxx+_DI(I;&5+vguc}|wY^*2>*Tqj7(RB|09A<5^jCw+hsGjgySW-p ze^p%}ZL23>AzlsmpZ;@~LI3yd*f*dm#j%IoN734&-867i{D9rgF~zp9 zDKaBNKvhuMx>0?+L0~{ljRLlH_7h!&y;@<;gA8XkWYF7lYa6I#8WWvbgsT}QG^~Z* zEh6#@Qsi`I66}u0^6`3w-LFH~vS2#Y(M4O(j4Iz1ftp}9*g95N)#r)0xuIPU>OUYY z;l8qluWdt!F!pR6(IHgsvIdiUS?O8r4R(Ej`;Lqr9f(Ar^vNQN{9Ye^i2ebB6+2qS zbS5mazoK7`Cp5Utj|00BCA@5+;-73(UO9fjal@6n zg>ZoI_0Bj1>dQT2H?uHAsF-#WfLtAwUkxOIj(_DJdJ4BF*M&n|zSh)XcgpFnp!io% z1+lRFxW?wHHhvg2_r=|DEl52Solti-Be)8&Xo%J9TyKbHV^hnnJic$jTijQskE5Ry zrv5?;Hf07Ay7x5;FAG@k0h3bm&$VA$-VnzMB+CcpwDgy6|8TDdg6o&FsQy)(?{)53 zE_ksP@W25T05G<{Xeil_L%coed4ff0|6{4l%hO>^QE*2JF*XDB$=`I?(7t?=x|1)ur)k<$Uk=$;AlH}{TQ2|fDzeJVOj?;7-TI{08Y1Nf4OL- z?Da9)E0~9a_<@=2p>b;^7f>wHzmk1q3l~982}Om+784d;UOkLf(!ZJ;^2I}3`d8K2 zEZCg3UMGMFzbF72YeL-rs?(8DX_~U7L4u*WP+|OwFjh~Hf5uFx&;B7eer3$jyfl8m zDo=0k#RuzD!p^%(m6+LS&3r4&Pq;~)EtE2hb0hW6!p91BE~nHHq6YwSUr!(A1(lBZ;WZMB|t z)D1s1T!duCyal#genAyyRENe&4PY%yzz~r#CED4nD#M}2BG&-E_J%tQZme1;|IzLO zi}$a}f^d7HN`Li1D0!Vxx$P>x;}Hxu67`uOFu@PxjiGpvM(%6{d~0yzR{~B|PSQdk zU=}~-mpngwQ< zQF6Rs$mT{o{F45!mz>qjV zZ;E1RB!-P)B8g(odUYMkcdnJh_gqcnc4~3i8b@Tnn)dE}@dRG78-=RDE%u)Jz%h?>c zSL)Ih(WrKDSl@^Uw7wEnA;gV#>a?5yfge;vz}($SN+kYZR3 zj5YSBBr=~aOT&_cNMQ-4gA{_4~j4I7dhBG`MAt9KuOMf=U>`d!^C z>%=nohkaD%#HK^jz&X5UM)-#MloQp=>Rr%?7Yba>llxg)X+TzFRG2*(ph$#vc}Ir3 z{H(*Xdz3HjY2fTZyQwJ}+d~cLM$fU`f9}J_49d3nNq_0H*QWi6O~#Ob&~@^>u1kbw)p)<{{=S$hRSAO&x+t^H8O<%;ikTStz(ruO-xp+j|Jjy-C1s- zVUyjYP{1u256W2O3BRO}TY@>(vq%v*#raLNOu-fj7gnig2n%J5-!`LUwMiPc!n%~- zjsD`dsiD$l)O34u_y1(rX({@R{Rv;c|Gu`;9i=i#ah& z1UCx5oaLfCGfp}0x_I+wAlirHrGS=+}lwelDra=j=xTpHPM+K^TdG8Q|7%m}E z02R`1{xDW_<0<6z&H_9)3Q;&9N)%c%;{=WThDQx|Bg=c>QuM#762A) z3;}iW)-OAJE~NQa(k`SF5fAI3kz2h&y;4H6;YyD@0Bio3;3Pb(J;qh{tpF-(uYCDt zIsLNIqB=FkOpXKsvfB>7<8LKDH%q_6j~Spg4(Os z2uCbL#U;1zS}cZ{V}{2pxPSxWo6Hk;OZnqcCx>Vr*HeX$OajugIt;zUL8#SMmORP; zA#o{hmg>(kAV!l+3fNcCjpo648zegsYk^lgk<9bSZ9-?yE_whDjXNdWr3FFG` zNL^+dcE^JP0S2+MXh~iq(GeoIJtkvEn=huY`5ce_%8*dn(6L|svCsTM;;?x5vm zTWzvtWRf`_>WrECOA{lh;Y!cjKUfJ=ObK&Bpn0`r>qNpB`~eWE^)U@=q$7ScqFx&* z-(lQ2IAD#OuXA;B`}*B+I{*+$J{)sBD|Fqz5drsz!LT#qTvm|t!Ro5uu&EwN%PR4* zYJZ#3-Q(0~D;K#N2fni|lK@30uUCD?FsmJ2pj33QO*)`Um83=WNpc`t2YD;-vz5i8 zOQM2TqjMKGVg(+AWdlul2#?{?;>8gpje0=;RZkJ76+7L})E0LkG8d?X%b;%ovXUd9 zcjw4Y<9m7yxSX>u()!^FlYCe%W1aY`(gpyv1DLqq+gzo)+X|$YIyW|6xkS8<5}3mNsT zt41n70S?Eqr;((%EU~8FR=fyWt(Y#DfH?9~ka8d%9314?ZLeP?OcZO_Ruw)n#>fqD z0?yMp^NJ@_44?B9G0M5Fx5^$y0n)7u<-cVKy-)&h2bU_3Y4o*D_7BK_o|VjS$m}2=RWCY#(k7p`6+PJ3hJIOKvvRdcFWpf)&I)B>I0!GiJR=eQ(u5f$^8VT z-tz$xw@6K%T3_42uw8vM%0@GU%93W_JTzz1ufJU!-3J7Z#gP#{MBlw_K)R+-yM%zw zZZM9$u$o>0ADjbJfS!VVL7m1GJfC1I2m3tq`)YtYw_e_fs;n{}08RcOF*g`>UzH^v z+3AJ)05uPC5}iBG7(>;9x*@DoQ7ih1cJM~<(F$bSo7XiUav!GO6X>OI*mUkA{oTir z3Zvb4S46RJ*$r0fmSljkLc`Q~3!b~P^W+w`T>a45y|lp=uMH!y?jT2|$$s}oMV2F8 z=;~>}O1_cUk7K?U9uyD4RNu}Bkob6lQ=Op0NVOUy*Xl9j4N@tWw{d?{d27;BRaySm@nfOAQpxQ*i^RnZ@dEnl5fD>|Fu0*s z;6OFI%8>^}h$PTYPr#DfB4W3IeO8_@NN-O1@cE3XN4=SrTpck&zZF+~$3U?l>)RZz zcRa`DXyqHSxtQAS;V>#Fx7nOtA~vmV5TYDmc#2{ku@|j&IGC!c`$DsW>H&svJSU?x zL^D9r1*)qf>UR|XVq8;)FXz!0D7ru>!GkL!u-K<4x$hzZdRb`~+634M9pHP@{Lf2fx2)#njfXT=dU<*=72D%48OYLW0|hFcD1m$bv9kwAQTvOeq<gV%)}hf9u!q|uh9GUcB8!QA&c z?NZcBHY##ZOxwv@KurC=iE;oe6W!WA+F!6EW8u{$`+Q(UnePw>j4+P~%|uVq1ac5e zj?-W;>E1QpNWXcg@m_tdcqts*voLcz#`)WKOH#3-h(sgHx~NQN2cKo2>M%-5&vXf7 z#0L_|fQ41ubsF8Y2iB_DfPNWU^>qiTgj_f zo0T49+LEn4s$LzL$?zfVEd038B&!m07L{ zq`W@M?)d#OrIv8p-4k7*FKD;v;|l1G!!B@NR$LlZ&jN{{w@u{|^kt_P;k~ zQZ%KKwpjo5eyN$;Wm94i=n|)I*-maqPHIi0_LQ-o494HX^dMJ+Cm&7J?b$j95prP8 zSYPlrKG-t%{&p7d=}zdt@pV)c+jnfIOh#5#y1x9b*!7)tfld1Eo(QVhzL`~b>|vZ7 zy7gYU-s$~(t?==7f8L5|-B2o^RIdBHcPBL>nB2O8I#;T+e9d3`PVsIld%W61@NI{E z_8quCeTC)qeKpWWnRbNt99kP|gcmNJ;l9ofy|LLfyKZbbK(W~+w`%Y_A1%w4g<Y>e{+_r8u{RWxzsZ5AKAh8@YI zz_!WvqQgkVj$vhmV45xMFS;roQ__%D6gd}CLuGD;@x& zxB&af-4OKrIzVZkYXmL@mGV%FW&Hz7*XPZh9AuEq2FrJ~0J4dL{aM~^)!BLvEtdaW zri>IMFR?)3CQwPqC=(l#^W($*V7Y`BG4fgyTT!uX($03uwJVE=8Lc0Sxh!jyB?`&? zvgzAJhl~-;lVs%-#;CT%H)0xD6m6So)I=t!sr>m4c2TWJpbVjoR4H0p16z<(FHwEz zqUT|YbPzmQF-2BKzBc0<2{}xg4ZS!QqkVv-ur4OtgHMvP5l5Ee4|!dbJJ=E)j7_$h z<*F3udx*YHIxT2(DAzidHJzb8e9hfrqrsl=4V*LQ)1twmC_ZlC-ldT+jiLM9zYt$& zHeu!C@?2Et=KAc(dm%3=uU1ib@gQ-oaJ2)dsa^^ekTeHunj2XDorpPZOsEykE&4RN znFpsgxM=MBDTkgpTAEmgQ&Sz3$kF_@uW%xR!S<~Uz+t`Fu^#|IHH#J4P}Ni)B8RvK z=Va?J3Lk0qm?P#Zmk5EK)grYqxlxP=v2v|2^rTrDS&%ZP{m*sfXM) z+*JiI&{EmZQJ$?v&jgt>=wM|&$5>f%#D>BEFHo`vvop@P5n6&XmVtj>hxuodDD%q= z;a$1Ws&?pf<4*X?-om4GHMV{F_j$4QcAs4Lq5M1%f8oL2`o#}Xy1sfz|If38sko`H z@6TQdlk=@(kDB1IRH_OJ=G(vf@R z1?Z}MG{OtiW+&%6t=`t{s_*`sr<052Xm2qTbYMI(n1ZOX8{`{!jR<6R zD9A#S5v%&>0&$c$UG9*7k7!EZh|D?iHxi9?zoo|INu?7rsS!I&-ow|~(*+sPS}2PS(ZN3%VDfWg z2z84jwS)Ze65De40*=W_iqP1Lm_S--1ETUKG0W&}?SZL7i8Si++HKsAY4d8sGV7Rc z1C1uLmUJn>`nB|->a~r4W`5%as0OJc$B2TyAd^&w7%GBPcrKw2vi9O(m7y8peDXtr91oJxTx|IYiV8=&xN=|?*8Z0vr-Ge6reN^4RsR;s+Mt>Vp zh!r~a0pUU(DqWI$`lY9AaKqdX)>1-@s`o`1+AMGnrdO?>5j;F83uB-(nQbwQ&nKvVW3IsE!Fn9yC!Thd>0=YOEa{F{=C>7kj*Ad- zSI2Jo;Xe9TUr*m!@^n7^cU>1pc6O3#;0G=1H2Qww_+W!%xD@z&oP&rw@8YSI(&A=W zW)**{l1O{^1hdcjg}PMh}vXK!@);>R@k^>&$* zj*Q~EUAV_df2X5fvTour)Cssq)#Cx?Y?Q4w!1#}2RR>a<6<`fP64h)qhv_Qxj2BE_ zxZ7xOALwB=!u^ctVU}%}%j__RE`rTZ7nm2gA)MvvLuRPV#|u3#gj*>Ezx8SqcCIk1 zB7Q3~u|inE9;Ekl*S#Kf8!O?9k3xul_?B*#QW)i9luil6o(mtOepG2SJVoo45LGf2nZ@6J7cv z(zd)5==z-Vr3h7`DrC`eXGu6l=@q*or$LnC((P$XK=`>1_h0CfQE(Aw8@AqQXu!a1 zXmq1^wBsV!ipPX6GU?*@3w7>p9J80sN&The4y`VIaj|+fR9zA8M=UWB9ljtCBMP$U zWZGC!diNdcs-g;s^r61HqO|e*!tqiPMZ#8b%hAHo5`$Jx7SWN2C`56b!O`KtDepT% z+5RSt3vM4C?P5ebz8XZDxUS} zL*KER|4H-D&iIARCFkhlb>87Hm!GV7uFmR@rON!dfy+b@6O7__yDStyL%pNt^&fjZ zWY*=&wX8uzI+zF03-Y^NO8I`5`HSm6UX~M9HQR%y*@!F$$ab*4LO}}4(zP6#wb+5Tgx4|fT~95Zv`!^wGeXc zgz-P16qYN|D`$`vRqwy7)S?$qA<>GmO&mW~nt@dqg0o$e{RLn4(ol=>Wk+om#jAtT zdUP2*2VW@fs%7b;)z=GZq41oA*+hkfE8veET8GGtkup0dpKBtKXsog6Ju{X22@Pre z)nScx$x>d;)Z{_N#oFsN1lmIpUNQ&%L9&w=7Dg{IHLT3Pc7GJJI4kx!qtrBqDBg`L z{SQ}pbeJQHUK=sUy@kfX!{A(LJqi1e4$8SToz3$Qw58GFsBCq9p?LVxS(e+;H?>*R ze&g<0^_b;XeZ(84Vz3MU;H4HzkDEnZDR6}sQ-!{5U&t5Y%YzPkku=uRIbGiDB!HWf zk%R9W`|Mn)P7H<2$CD!r=vv_om!Ldf#374M;ohSTQ&fX zF&rpvo24J7)`+%6g!*pp{=`~uT3Cqb!q+*>GE|WlKNxnbvk<_sB^pzEUDIqj)>Px{ z^mA!8FN=_`p%cGL>fc(@5FsV4*51rmmyUUl4qJX`=)FsOcfy<=Y$XkF@ZIXJa0{4> zMRdoEQSr4E*gq=$1Wv7=z7WD{brYDWzRhKVllkwWtGn;WtJHp3mjm398oTCX?3h6- z*ZdmMI$5UGSEB`SKjdTx>^ z27KuNl-`=ui=70qknwdV~Kkev2f2_8g~D135NBJ@e>A0y8hmEV&}(@arfqZdD5<5 z43ugt7X6{MZBPJX%02asV@qGqPb&25l;1;+NR9yQ^`#`E2zZ%r_ULF|9?~j*htDBO zkdu;da^G$x76v^8MbZVN`V6}4SR~an#^5>25A*WZDFB+S-AW#5dnom%uCWzBYSU@| z*6W>&AY8jj){$Jai#7<2ZUyg=q3HST_jtCee>+IG^p<^_@cruRQenislOeZUrbnW3 zLlA(7eqm6nZP;Jgg0K4pPu>dE`tLx?`ahY9tn~luq+yGuMAFtMO7E3gy)(loi|G9M z=xG-9R)mi1buua06ga{;h5#TSCV)+hug`8|h|uhN;vry+uI}4an=kzLPs)bKJyX|U zu!pg$Ms~1>!gb|Pm7ZUeD@*iGdz7HoaTlM(slnM{_HL0*m)G0nUR`g8*Gt=-QX3N~ zbt3WZ&d!}-R@mrB7jn6%t()4NFRZouQ%Xc3`TNOfTNj=|$VPQPD60A5_QB|}K%d=D z0k+9&sBdD30_N3qmlVhn{Y><%yB(5}i_8k$a%8>u5wh7JqD*5?2=mMkb8A-@@PCG( z>w|K(sXtCBqJ|mWM}_6i#?s|@sp0POfE4l@ur;59hOIFlJFYkLx#pE7PVMJlz1d_3 zo?AW#*Y1#*{G)~gJHTU4=ESmyxt-4ge~B2jD4L`Er?y~%oNq%>o(7n5XH9tu(4etPb$gDsOI>&C>QP&i#=_Tf|+WRODYL^&X&?LE=~?lW5E73<<#&A+tw;;;pSUSfOjF&FE?2Zae!l zTFv{#zX|GQg+iupviXcKK#N_WC=QQqVGeK~DYG9RHw~gA>Lm<(ejb`jPZolYs7{Q$ z36{XGfLRR|8|)}c!>e9wo;J;k3=;GtkcKMTT`>jioXv`AlMM;gkJ?MF_>yUE7fH0W zOymj%$c#O1=O6AYXI!lO?eZ?6A{@>icy6%gCJjA(IzSe3?SbnS{Wgg+DdNOTjhF_R z&nQ@40_J`Qjj?6@`Xo4?AcswHJtV`8vWSEW5bqj#`hFG5idi0bbn z$k30NTg1|2gtgCDG=4iK*%@xJS`^cRjeA=|`{!fD`ZyV&Qx`IHy_?}m{-jDI&k(EZ zcH(L4+3aNdfO9M{RKOhg+@pv*Z?ZY^QouruM4O1;ry2M^&jE62%)qQo+A4a|!&=7x zPg0wC1AZd?<14dRV-IPRy8xg_~5ZW5EUU-{u2oCsrU*6gYxkyYV?C=HLxOEKvZrVEb6QB= z-!(WdFyuV2Q8QGq``Ppa(@~@X+r)g80RTd=ATYlxoz&J`yKodtC|M^6bY3Ei5N0vW zJdyhGJqV`$W7%W1!_Xy^vaWz@)ND_LHq~q}(GuixHL$P;N3Dj32&g20EztD2^6+h3 z6$1jGvC~o*B-F18)s5<0R{tzc@Ju_6au1DTKY4I6YE8aghv`4?KNz_SE;`LEW1ko^ zAqTT!E`WNU0RW#>0C4j*LH2%qc-cBLac((zQqUqd>Np~&3^MwKzM(qU9qa(Qw1*(I z8k@~Ck)5F}VCVnQ2jLIe&r)Vb{l(een#_-Ih_va~6sw2y*BwHbj@g?g1x1o*YKtcV zfCy=iVe;J@-Xg9#)$J~B_1e*asLihnGQng8lS;VG>c^wheXxXPIm5BVE=_=fmJ>S2 z0FILJ$TOaew8Sa`G{tc9kDVaH1}f!jDdp_8Mg7p{AF5^a=<(≧z`;2}u> z59rEqG=PY@09y`-*JuTTEtX-MJ6R*MZ-~7Ow<4 zZI-&((X;(bLjA4jc&6i62bEM+q_0>V29kW`lI0kWJXBnh6qVC_Kdm?jW?7skyi1kv z4B1|miTH(l_{;E2EEuXW4?mVucd|S)0Il;!u z5hs@h!l7o!Ds*j!MQ2^PKeZtL1&D8mC6+~NG8R&0<`J-q!_va!lMtVHloX07TxyW? zu_fTa>TrHdG&lZimbnC4`OtrY^_&)9@hr{{cke1T$~0|dpS!SyXV?qA!o6zM*Q zc4*yM@`>(S@O0K{$n~4nYJ6vx5K^NPt^@FVefhqGsv)!HBl-F0!Gtmw_Se;w-yjpy+Q+ohi-xsW z&w>BS85x0LKq|p;Tt&0zetNGl8 ziMEYn{3nn?<|xBl&w&R44V3}e`?4M90wb&KUVuQ~%LlPKyyWP$qfhS_L1cZ%v$kAIKMu5FH{x-Tq($uVLIr$2K6?_7{f7p453x zd@4)|R*%lnP7IP^8`2fM8c&M~Is=AtuT%X58cPe*38)$e?L11?-R!Cd_mmU~o*z*1Yv=|rW zNcyPVA1*XL()MkR`7l#qaTT=}vZ|Jd{~cQGB6Rqw`5qesO(Y{t@iqwpW;%lUrAg6y z2wZJluBc7ikt4bwL_rce1NpU5L+U?;s79(rsPJzOf zbR8Ff_~=JLc#(%`|JB=@>70cJd{PFiQwr*?f+ ztbYYnX%73PyK9NDBPe)2FNjl?A6qp<#n_&v^P2f-w09`NO&{%0=p-9Ga5B(l_v_oW zlWeO9sOLIs0JR{#R3X#CB)8zPrme<(&Zp(+@DJy(RFQK->tIiZxtjlsh!4571O`!k z+F>7DXL7Elap+ow!ja1<4wy(yvo?Z;!JzsAnn>DTPln`gRRUxtvMku`9_Nk6$Eton zj^r)o_h4BeGs!8WNo1#sKMGu1!mSTc+d<&up&(wy({I2J<<>Vf znhG7t+lt}`cC!~dkeY(JafJjw5#d1c=y9L+6RlvOr}ojh1_R4xC{PcPn7pKislD$F zSw3vy#}ui{*A5N81z_MV6P<)RTgiR|(Sz01_!Hm&(n*faUS*WDDXOZP+?cO;FVcOX z)oJr}zpnwczaG@rCyqXXxFSFUi%SjFKBaGaAAUjF-M{|AAap4E1Rw8q&J5})n8&?f5FGQ}# z-H~oZhBT(-?0EFOx#vL!K!o{2=HQbT3z&v_W>v2OW!|>|1VrL|OJ`}#FUmCe!{sKG z9k)u;-c^GU8XFNOW5q8P+Uo-=o0DUymq4MIazGL+ep&0#1_u91Ar~QF=P$M1{nSp5 zm$-ZtR$n%0GnT~gk;_d(iHcp8XXgZQEr;;fM)#Nc;QXpbTbJOxIa-jQ$_mKBZETRY zN8UdDh^?)zNEC)yra5pr%V5{doe-7H$3xnSTEV$c&y7%%&KZGX^*#CA^v#|So5?4@ zNk?Qxma8vtPRWqBdp|MES)+HlYsI!t7ZWk`a;yHht>_FNls|590^%HnO#Sy}u>JRDFyJ#Vv9tWwo*^SX3kN&Hf8GA04*XY%&&t8X z@W0L)yMrn#TWzr};_EEJiJ!rUOSL(t4bxBe_tOVW&*M{&=qy4k65#JhLWx8FgZh_P znCuVr8RM|~l>78&<+GRB@_K#NTi2C)*7-WUxs4r4IyfmyE>;c(6@dsA0bl}H=}D@J zj}HKWj0OlaBHqyjrcl0bpAcFV9TTMmae&hje=#II#M0h1w5(0Pb&W zTpa8h0-U^4kZTWt4ml5Oq@91e9*IB?q#qdAUx41{SG?bK5;)*K9vS)h{vPhXvp`5L zX9ns^;17>|1VkTNSdhCbPu4$|0QjlzcAmE&EZzZFN^AdY7X}Fx`T*!92&fJW1Q$TK zu#P}ijI@m8Ujs+KunLOq&Y#dX(Aftl=+Bo03=rY}n{+GpJSS{_T&GVD66p8_K=iXO zZUz7o>kkCO>?}gxi%tN5e({V1A)2qS?q1J^9t*%_2-v3y4$Pb!1E7B$>~|_8#C?E^ z-VA{m`_55xKF7RnqbkN(QMkQRAP$rHZ02WaFGmj2b>~~?2e$?r@t=*T@0P%U1ljsL zBX$pu@JxaOx1Rh>OFw#bq>DXPGjcF|z~qGFWB|Z?H$Zv4@Tl`Spi*DldA(UZ(`y(3 zKwNTo02nSXW(c?-!#;7~d3`%_fTIggSg3cqF+R0oe1v{TxB&p{f?0dwi@l8oQ}XLK zOt0Tudp&I@i2ED~)e>aQ8om5PbW29nT8t zr-Fdqen>xX@<0#+y8M4;oqtdte+}PesedWwf4Aa8&;jo!XJ4@Ie&70T?1OjkKvUXu zFsh)QdGzb#`1g9e)#LcK>tzs_QZstA<`PsgaGSY(o z0A8O#z7h=QFuVQ(Gye6J&Vir5giQR(AQ6N5LICR+K>+m0WEXQmC}`l}hDGwceR0rN zL_cD_;b~=Ls@8qs{xrX9pJ|N+@_OXK&IWLx2~qYwmPhV@YPk=5NL3I z9KN?OCT@ZZTyo+((HdpH$=1W77y3bVLs^y#ZVq~tYTj29rVl1;o>Q8p@cVG&JSB(Y z`UAsMXKr@~y!D6snj_KbI|Y*Y56u(Lj4P~J?ZZ9*a_mYM(MF$#ZMI4AERU}@QQHFn zVTWQOoIWjyED6oh&cAIOk77!p>E}sKc5V3%?#jfnDpZR}>=}~VL>{RR*u|-RGsv*6 z#PAVbEF4!=p}H*XZ;cyOfFulLd3#;n!yue)k^#xuRVY@Ju)!);SXl@N0vFEz&?K`K$M;$`mu8iW-tU9;^JkPfck;Mdo zJ4VQ+4ekz9IQ&!7GFIg=Wpf9emn@z_;>S-%fbJiRqp>Yvs6Jzr)|d8Tv=~cLs*P_cLZ;>9<~zKq^*kEYsoo#rywxhaI-DTxb{3EOk(mo&!j+#dRiZt5 z5Z8&=Jn+IJ;Wy4uoi#exlg}P@Mz*8_S#OE7tt!=}Lh!|>snE*3S)f}>se4^Y08xLb z_a0Zp7fJyojzY~WgrqfQobEfn4^pkPR|6oc(`HF{pPlYYZQd=Jy}5^Y^PI8flW-2A z$@rC-NF3+3 zTz-0@-aVpp!D6HUdDNTS>M`F<%&;8pjTF+>a1?<@KvtwX{N$I^jL0_|_B`e>CAROC z7Y_EDW1p$5J-I5+ukn1xFm=SzLZ4Y}1@BpIg{fePbl=GeJTG{6H#QrZ+a?OoOIAeD zt(_f;uGkxrI>ssNUyb97@<042)i;(hTA-3tJpRbeGj5p?w(eM^}r&& zzMm_Cf1Ftkt)80-7rv@mhcLGjY`M)Z(!(w>crb2(E)@32TG4qi6@6Pqrqsucp1QcEa2^y7JLSU=-PA=n9hR@;Z20y+ zPi95<_3vIWjv%_8Zw<|KzAVrR56q+@Q-U4cZKg7{0Y(en9*vU9zxCf#!THr1KDdVzUX#ixRk!VE>m zbjf_f^qEo{C!#|LcMw9>6jpgyn+K|_#vjziOR1a|@KzsP4+68pLq2^Z4P$U&zVsLj zOv|?Zpy$zQ(FGZINj}(3l{eJeXg~Wu+zx}K^*3AGURAVh0tJh@sjBYAlruFZLc76R zabjtKJxOLEU>%qoI@6QS$a0vk$ZASFAg6@I-4wcdNqUSR1wpGU6iO+PFG|GMaKlSR z(tB*;Lz_f^)4rl53I{e|--t2CEBqB1GZwayU&M%+#v^)4(LZ=gxOhXZK!v0?%Q){d{|A(=22oi<|v~1h9&980Swr$(CZQHhO z+qP|YzklQA90)>Ty{@WOuBXdco-+qiXmgOn&xL(FCQbr7*~Fu%GXLUNK-$5|{xq z0A9UeA4!#lig4c!?&xmO<8ZoT%}?6lD}pggj&A#$HklLT4IsO9rSfAKS|9VaavFtw zBy_;DA8EanWHX{c$hiGOEGA7z#Ih73$@mc_(Ck*{gIVw}I|Y_Og6xl*d%zo(Forqt zM3UOXDmT$Id*(SWzqemA@^q0el3p zb=k%d`L}rJY4%)5zDU`vC7oTE3UQN9%A{bL+J? zM6|ss{VE6}mTUsh?~{&z(lS4U#P)ZJmGO1{qj?2=`b(q(brE4k4*d|na8wG3vIAu6 zVjWwnI#K1C!$v+f^YNXL7jb(E-K!g@{!s!S?UIagtW8+bvgU>9c0o|R%nwq`K;CV9 zz%!9kp2uC&pPmeluEa^%ThmrNR(1m22GzIccUo$Nla!}4?}G$KP*^mg;if*9iK(Hu|_5w*K! z!3()7^^aEnPEN@#kfhtQ(?6|{t^G~2`7}Ak0G`PY|4tA(6SqUZe6#(i=FcHYNr^GM z`Wg5`tT51fi%h=Yv8C9|!6Gm~%f%bp=Cmn{sv+}a1)_o;7b6NZ=daN$;HUSSO=cEg zcQUIeA=T4gu@`T&_xW>NPWrdd4l5J=yUgXQniy!yaJjY~eixoN*&jmogg4ug399RjLGoH``M z_2|8wMwFp3&nn=(Bzy|_Ap0T7CvULb-}-4!2)pWY8ufsOnVI2tOlvU+IDm%~N|sOi zN4n`q=qq!2CyW)pmT`y1>!O--Fxfl%+u~Ql>lGE#FEIA4bfI!;pztT%>t+HtBLT#O zf;HeLjL{(|7rAK@9!jCM#q^7_thu)~2l8{+vTZJ3!ey+rM)-CQMc#Y@|Fm8bE7B614Wt9gF05 z7AI)|C{E#qoe8A2p)UBPFXT2ZC3+=4wip@Q**iLWZ`A7;%KzG&a!~lxu;^*@Kk7K) zJY#g5)BWz?a4Rbt1`wCD<+$X7a6s)Mepz1cXSfVx25Y)|@9xSO-_I*394tGKa*x~q zBR6c6gXcBq*FK?Xtl1u?k@eyqE^0||qI?Q7q z60!i-<~Iy;bW>*YlsYmk(sPJm!>8}}W`y{ifz1HSTEP~%F}Pw|-UlW1a9_THQ2y^v zyD$6VXJScz)B=Yxq+3&(Ck8wT6208yL!a`i!%NDboJmVn-&!LLHk1oZZjU@^5LnhB z1=$!n{|-Pj;a-mRUm5$`$_2!AsOIJKA#DcR(z+ub_k1-O@sA4p#T~V(BwKnh({TOqDv_7~xK%#`0P}PIfeQupY@Y@vFX)X+xJA ztWeM_Z7J}H->`|%-`uk#1_;(GqHR%=3Eb2=av)4N_9R zDlS~oLX=Q>%{>#l}i11Y`G{0^pyP;MLh+uQFhlRUKG{f#3eAPlY!}F0X>Wd z$WFS`8~dj_7t~6*vRYp%;^)w>zM2Q8dbjmVxNn(Q$jDm90*<5rpoydxS)f(1+z}Jj3A;Qmu5RKh>&ibgznfz6^*8CHD=|PR z;fdQ|ae0HS_mwmYnv=C%X=kfwlM;c;%ci8EV@#{uA@*9G4qEz66-q&h&J&?^d?V_e z*|O&PdxEVzoW;$O<+8b=n_v3B8zWGuSoGVA`60v-2N2+p5%^gPCzYC;C+-V1+cnc9 zNZXH`vrDgpprvqEsmU%dVM%bl1H)%*sm~%rL%9mgo#YmqqW8Ls93?QeEEJpH`bl+u zR)(+)M<4)?jZwIAS5)zl5y@@VidA2!dRoS9L%Dv%5)ly=|~qd9FGY>WSd zI;l`?&_Af?%dbMmFLQT#7mmV-O(WpjJ*Va)W&IrlH1$9EUhdO1+j8GHEofe`Phbd+ zI7KbHQn}@)O{=c9S~!BMBZ4~Flf4o)FIg3HtMJ%2o&qd=pp3PlBL`^n(2IsQMzfog6KP5=p52)e^w$>)Bg)`~PCeA~`KG0p z5uw{+O$Li^EFN>K%6G=iUiU|9_jyRZb1i+jGCIS0d{b+$EM>(PmASfH7D_@OA3Fke zxu=^6Oe-mGho9^-ovY_y_)0=`{>EU=W?#ZP9R|O^0telhk%CR&@K-FnSvlB_uIJHW zqEM&IqMoU0Y4uzuy-6e;~*Ih()3`F*iQPgcI9(oKYcg2Y9 zR(0`^4{%DM0d{yYO&vzoAsR;+_DIjg@WbwmpE)w~h^R0x-XI#eQ|XXegYnFjwTBhhsr72%COfUJ_T zz6>MnN%>W2bTH86{Mn~<*Qd(Qef>b?U9m`OynjOZf7=&Ac(mskaoKX|2Y)RFKJ*TF zGdeYMg@|t-1!n>y8D-sCC1p_jXw|Z@M)W;}+Pt_0TAH6x=1zd>lySHFiP5pcGmepS z!OK*uarfYN$XeyNBUXub8Ac_lQqrz9bHdV3LGzv*<1Irv(=S4Lsy!S2 zj7!llvay5`ou`u@H|lAM9y``n8%-r_Xn_)8RPPd(i?dQIV9f-@b2L~pDW?l_=Ea*^ zSx@|XHC#MRf{>Yp86^xtsWq&;WhK3I~|IqgsC&>MDB^s?^ON?_yr?$NL9*q?)Se@ z$oA68HAh)m84#-cj$MO%CY7Dum4>gjCx)zHlcs$!392qCF9Pjv`Pkj}A&i5(qWx0TGvC74 z*i0ASRPFF|Y_y1DF)&{b`x9+jEd^*Bhzjci{KqXRI2q%6;&lmot4~yu%*8Ia(t8v@ zey-Vk=NqB=O9P90`4Us^5!m39)>vh;nwS**=CB=-TBa=>OjB)vM0r1I$Mo2`oD(yi zX4n0&;Fq@sAgVk$YM+BGUX5WZ{QkTlH(CyC#NnJeVnim!akDGu)3Ca1iq9x!{zVBBi9J>EF(19b;#(3)KS=iqaCE~(b#-E#JiTvnVhuzU3iYbH}ACkyqp*F;!Nn%wx%U4JIr-SESG3JuAuETCez2y`Y=5 zv+w2QKoCR6b?urwdAPemB4h=|vAfh#J!7cWJt6+n*UM(3^UDdP?JjlZe#CqhDHGeb zCp<}w&WoblbIeNhFh8OG5d^%~?^EJW;sL}59g-V#4jWQ8(W2!mnFY+ZIj!1<^ygVJ zUq;FX0y)m!eo}Twp%Spa{~%+{M<8Dr?)gHQqrP5&;8!taW%LFodxvpLW@dViS+_Qp z!0!ncLi%9WKl*OvlM{Dinpe#5IA;n8-i$%gx`H|FgIdH$duLPp?9>uF3Q87$c&pKBI3 zyu^g)L(G7Y)HLI3+dA*_Yoh>vRPb~XVwRE}Z78E#oN+mi65%xP8^YrWLy&DwiP#cPWj)3|b3Z=1)Rq>PKWphEsVG-{Q4R)Xe$o_Iv?lMBGZdI)}0B z77@H!aB8@;{OGwR-~8=7SkOi&bb1$QQkF4;He9NS8Y-|*r&sK#_==&?%m>BR{>`1@ zt<>NDr_}{f{IZUksA@9e)bMEP>l?`WFjV`Uiz1VWYNUE}@eviILudkd9R3<9YTapG zdpI(+UajJ&MXy<`pr?OTVc`X=FG+SWrruQ8P5H(A#5HU4h6>=-@{}T$nF8$PAh>y{*~j&|eHGOX0KjsL|c4*i9LtKA1${5+!_r`N`SsalFd`9zRw^aza* zU-KH-LA!Mnl>mm!T-o!Zbe9PMQzG@Ln?i${m!xwoFc zt0mL^R#4dT}d^x3!mL zm3ftAeoST*;wUN@!7?{70Z6Z|v@q1s)7=0n`K5&kF);}hB|SJnkrexLL`>K?pdpnd zQLy)aj6(|Lz&Y78H#hEoClr?;%#I&TM5f1&YkQ~=2*8;D>goX0+}$|U-PPLws-|eS ze-6!VhoBVL8|i?`+S)NU{<6={&-N&VuW-4tsi$bP-Tr>CfXkMXSj^7O&wsiG2L}g$ z7+$||CvrGuQchd|Cw>6ofII%IuW+sWT&(p1Ng5M1)T|=ipzglflMk2N*6g39 z-52@-W^BmEoPf0UFV5`tB3$eRU2lLo-FpWYwV z#gB!qk{1{DoL|=z_6883G*RUx(V(OAA5D>;M@0C#7eF_rIy(m-Ottnk0Gg>P8UQ>O zcK;h6BI;lAejX;npI1|JP6m(vSzbg|C+D}^qwU`^f&V8yRx#i=d180Z6uvLu@}I4* zjw#$JU*^Ztz~dif`Ct8?l@3P+~+&y0mcsy|V`Y$H1a12iN-?H4m=(C&y_aBbJ;NtcQdLirfGlgOYd>GhJ2)%=7@FznUt@))dZzl;4{6L%9$9|Qg4t+1z&;iO8K-uO} z85IMUb~NlcFR^+bcdQEsuh%cJn`3MGVS9*v4BWe#{ro(;_X7s4n-yLHt*ANkGXgVx z1w=RWsHm@pZZI~+Wro%%VE4Ou_VTup!W?0RRpKN$4V1uw1apeK*R)-5Uvr!s&VSaH zh=0&k2B@;B=I-^nz;!6a*5AqQ1!$sOBk46jLy89`o|>k5<;KkiTC}+fRbBHi=xM%@ z1diTX5Glb<7VQk9YyZv;Z*s2dkrSxzz#9X}Rn0FM@wo%ZdB`(tSmUsqp zKWyAtsh(*5D~RU=djL~Y|Dnc}bWUQB>^#+{1stbOR zD8+W%4CfDF45sWR*;$!SdZ*4HbL&igbCGNp8Jc_#=7l@;5NfgO}gx5piaxP^$yVcoJ3{$&K9;z;g$Oh&1BUiJKsnEM4!RAT? z?3?O^V0c}+J{?qb%sdz|tc<{88DzQ+I~(}HS>TYu?38Vkch~h{g(YZa8;?$yHN7Ia zQ8r-2cD>mC?%^@DC~DPRUZIMw9XC<(UAZY|$q7I=A}tz`pWA)G(t19;Q*PY!|8i}> zA=$A7h)6Bl`iK!R@;~U(&K*+$)?Sy0YdUP5@^V{=%NJdU1(0gMr&5!Odc^`vrX3b& z-63m42rT>%217v2I}?doaDLNqaigJlMzeeb4GU&zWG6rXRH&u2txxaWI$*Ij*a?#zOf&s-&pJu~+9vU^2&Lg|i4FiEU&=2DY&dYRe8%%T) zs|5_flN;588!K^*IpDczq=iV5YGFeK>LX#^uZmlwBW$f;vw#>~){|6D2uVC@dFau_ z<MgaKJqH@Ng&>fGkL=_7MwM5R;W)0OpP3G=m=(QAa}U1iN#WFu?x{MCsnx*gcQWK*9`@CcI_+N&dk<$1T1lT@NQ~eT-L# z$a|SNQ9|Y}mPfAAQc3m5a)!9ZIEh&$&pWz28TW8 z85%Vt%wXXycQYQt?z9#Y+3}S}*xNRu9lrg-S{I9SRzE2h=o?&vN=x~aW0)GrP_YM2 zW1Ye(9s=?h!<3_%$4->z064mfyt!ZBrUnw<8wP%IVh!g6*j7TMGt4`Dwv?T|jBz?f z6G-_>Z>4f2?6+E0glT6K@O>weq34A2yJyvdXmP6=ir?Cb&0R|LHhDI&v$xw|M2KPl z#kjVk6CMrIiCSz_Idu`gE`YoXESt3~K`#)91wA=Vqutm$4U-eoBnL`0F{(l^g+2($ z536MGZiX(;&nHW?9&cvnw_qRWf`ceP`#YouO9nqCt!7e)T3DNa=T?QVO`r*-uT%yz z@lR^?3dk-!Ee--=Iayy-WF|Da9np(#%sa>_LiJ{z?x{Ob^um>gp=?B%)LoVNIo}Z zuz^>4P4Y!_pCgi|3~C}7lsZA;T)5l6y^<+4=jdI=CVDb%TdbkGAkDmNa(n;l7wU-P zPSl>cW&OZ%HrR;HRr|N2STF33W#0VEIKkkK??Kv!2O8eSxFt&!Z@D$gNm;(H1yg0n zj#Ib^zlCh=G$2#N4*FYNS1GoD+U!OkspyY3D5S~9Mjua9J4crG!`jITpD~I2`$TMt z^!(MZ|Kdk!dVWYv#Fz2*xD}BGY!;HWd?0bL3&i<}<05^KBO2?UP7i#%-s$Y{GC>Hn zb&U-RTQ?lM%76M`*!8RV`PRaRvW+(qCaTyF-fMiOJV(pyOX<91pCd4;GWJw1lWt2> zcc~T4fmA^QlATpWa*~0xp!y4EzF>i=z+UkeKK@J!uODqSvW`yJk%-1tMx#Jd_y6J! z;kJ;fdrw6vY04NQf>3I6U)AnmJ+`fmHsY!y}B|xL`1&;PJWF$Jz&EpOshw1N5yiQlqJT@Avx*MDD2O?Y# zB9`^3kyhBIAf<`Ib?4@@s*M#FAuTdyPDTiu1J#dXGhDVHy`eSh3tuP3uu6`Ir{d|q z?ZHS$n(ew_Qe}U$nZ&upucBs-VQrlASf#O3B9D=rvE$V_z_zPBKGa%tX4H#QwMRgz z@gaP!6?c)QQ^J5f&9*yEY`#$u&bB-lT=!ai#)@-xItFpC3gf2X&tnh4uc_+@k$f&y z;{v>4!`e}T4SN7|TY~R17-BSD&-lpJdx?z7;~M&vQFsf|*8zPfJ<0agB7ydlsn?W~ zI-0W70nIO2NLo~Sn=#cm=BL0xb&py!v#fdcNV}SV;xo1yL95+FcFeoXm@Cme9z(|M zy_yY3ZM_{uR@Z-=24-5Xx)6$nz4CKAc<|N~1*J^?GAgw(+>-_aoZ$7A#bK1l(VDc2 z@IZ`VU5(o85iT&^>!#(Z82xX#t_mIcG$@8D+^lIT@j3%Xi<81~x%6!4jPd1L^B%bX zt`>Kog&*^K{mWzpull5+hUVk=Ai>NeKrf5}wD81hV0_Fx3EIur&(QYz;M22IDW7_i z;3uKscwVQ|@XmF52g7Iotv*fd<@h8}XxTat7mzAZz(inTXv0+f%0LEA54eAKF&w8i zD@+5(8)@KkhOYVT2>(*^-wR!E^`iz8Ba2g%RD-F@3%|A`y&_EGu4K!l+BmujZQA*#o^wll=r~{u85%Z|&Jj^@GAXlFjngw^TPZ~wErWdql zTaBuxugNH>G&R=^pMf9wsCq93gbLROK4pN1@;Aa!(INBV>mxGxlJyWc^wCUT5YhR< z27Ut6d%5s@%?P9@j^lw8xnc(5h+JXQNypshKs{1<*zL3tjSw+qgC$pmY;{>yB%eoS zsgJk^{Y5H5xU$j^V#nw9VX#SF=1H@;J`xv%eUXy%jvtFdsY$Ah{G<*p)5{#vcU z{=rIvO2Tn*yK=bv_K>TA2s|NvLz@zF19k&eMueHmnsl)aktYEGGbN!e?z?=w z?95y@F%MxB8x)!0Ui%1E_hGA{$RwAuoC8Y}B$;EaDN#DlC}S+ADJ}yIYfIzP-Y{o$ zpiPEhC>sV{57l5yPG^=&HrBEFFfLl-7+LJ2{b;hn)VuUwAqWC=E3Jfo;**Jg3KyUm z;Z7Ae(1}GLv(k6mqiLte_|i{s1Vcny{`8}>Koq$i8@#<~n;4sQ{$ngKaA&)bUpY&p zaa}IX(zZXH`>jv2{wQ3O^_<^>FD&ML2`lccPp)@dDR?MpYmTbIlre|bH)5Vg=D+xD z^D0ezJI~&+M>sw{oY^t7q_}WADhYRu?&j%Gp@_7!7)_C;>e!8O$`B^Lg**o8KZ>_g z=%N}aWeMHS33VfUSd>lw>)N~eJkVk&0Ue}_*e%DIg!M>zDhg1rn^h zZHV4e;+B3$kYGYAyx=vo7zGd?2X50Mi?lw}LDzqAB|A4!jCPT98C&2Hem09Y$SD~; zCrGqy%e0<~8c1-2Yu@So-?1i*A6w}th&AN8Lk4nDW`Z%Ep*hU!p(fAbddNF(y`&wF zo!2CD7eMv!B3K_J{>xUM>US&~1C-CTB_|8}SII#sM!@c|rPvV^wVgm6$CySqk4Z>v zMlP+AQIILXe-SGBJ-|Zk25^OIkTLTs`eV6pPPkHbKgdd|V&q&wnJ=!Y*Lj=^y(AgB zuBSy6c4a!~A#A1k9b5DTwT))Ja_zk;XFB3!tneZP(P=P6e%0h4exC2F_T5cN+Te4r zdM*!8`s{zu^<+GN=5D zC+ZVuKJEbAbL!sYW*llqY}rIGJGr4y9k(>fDoc?jT@w8^r~{F_tZZ;klROK}!R&n^ z@~16$^{Nh9hVckT5)C zxY3)At~*aEXIk{x`nWiXefmVPz0ple5g%m(FKnUIDy8|K?f!RV)pU$McCUj+;7NX+ z`fMD+P|Un1(;O{Uo_gb$ z&640g1cRk_HZ|-6wd>q0z5^x5yGdpN__g%aUvH%Aydf3wV=x@Ghy{n}oi(H0Rl#2- z1>5}9I6*n2&Jpr$K-9Ko?z?EO+P6I}LT}vb+;Im{o)Kr56~?$k%MkD)Wp(TiEA3~R zBi~?9GcG85EP}ar3)k}_P&Zj%lG_j^oegx8$$l%F@z72>+x@yDu?%&=A>Bq7=9Q;~ z1`h1joU=z5f3HTuh-fnVUWXa_sJfpuiCUI|A~Xn30AzYKTg1hC&THl0%D-P)c4F{svnT%xnZ zvO@97Q*kh?t`;?~K@KrRa>0@?Q8D}Q#()JFRbit3{ap47e#7<;{*Gv#2rv3F%exFU zFx8}w4KT2xiR#WF2mkgY1ZmFAoTgbH%fb(VKAlnAU$wTq3<3j<)=_Z&>kG#Hs|BBS zD_vK7T`LX_Z`sA6;X7)V1kymE?nw$zN_M_z+zUNwU-O_Q-opbHtJL*e9#A%x6XDfp zn+QtEgj(FxH|9dTgl|hcfu|GlL~=Z|ue^q-{+SH?dc>8gNa*ELCY%&WEY{nf(|zj~ z@`#0krw2ivEVq$SFqhoY*v`B!%uMIx0kh&0jLS}=05zngYApJyAb-s$+@ZC(o`+=% zkLBNAo~tcj5O`QuSZ`W=HK)gU&{Z+A=XUQ z@4XLIqej2&At553f`1QXev4HSYuweB+V`r@q7)@I1;(C#A2H}0Yk1GWWK>9ZPv5?X z$5O0UbLR_*;gf|Tyst$yCgO!uV|*QZ4-*WaddmfWl$eAIXaS*7$frY*mcT}ueh-3a z(ik1W8$9%vRIu18B1;Q^ZU=!3Xwy?|KU>?>Hi9hW{o*IbR2iV51Ink-HppTsL8=tM*&(UI#66bUQq zN0V8eukL4C9(Qim@mEL<#3g%H&^j|YNqNwZ0aY9@5^ppc)C3%Y4w&7SspEC~j3S_Q z4^fB?wdcGo$-NEYcze&%xOsq+Irq*oR;HS@i<@*aX~ZbLO}H{7nGly5hu-y~(mXj7 z{0?>j3lg&C$W`eyFrHj^t1_+mlmI_~qQ=x2IY6a+bi41KIR-z|erNr)=G^$BwW>Wl`3n|riXm3DT(b!OZSmDZN}#QV>6?8UXTC9FA=Jc@fCJZGJ{Q} zbn;iCL3_)E6~by@&UUSFhoq;2w7#1jnlgt2_LB zgLAaR(*IAx>`Ku!eFDbmAd zfSvg{!pRQJ>AEW38b6eg5J4A4dnI_VY8`7<<1sm$wI@OsRw#yQ)N>pI+Zd4bm2qOa z!RcSSSI=`hMmpA4_M|txo%0h1Bs*~;X8OfqgG(okL$kSld}JH8^y}x^FFxD}cfsLDd)-U(K;?Sb`!3!ZFHN7T9KFfKKc>P`yV1Ay(0ABPeVQKGvMs3wiT+;_C`xPc9m4 z(;fpENN~KMXdq^FB1EGXQ^f9I(@AQ!yPU2|=B3#n&_tu=Y8fdqmV41-nfXcJH2DgYu0&za#Wh zyLn(RIm2T-R&^yEOB&zzT_0+90`$ExMT>^E{q!8bMbU%Rx8A723kf3LUw@j~Ms(Tn zZyL@GMr$Qvxr#CMkGqmjg}~aDIhOS8gLLUp-nuJ`u|o=RB;`}wof}wn;ti0t9!KzC zO_83O<0c&MwWp4Df)aFx*m$lYlV)L$^O-U+mYWAn{)i2)9W<~S#~ev!Ab8(zH)>Eg zaP6k)o`~<^@_1^!GDo*f1=ADvQm;iH^r00&3-!%wnlWW#juXs7=E+FcZTWPjk*2Y0t(E3%umnF_!*N_uNCxrHOeYE4!v-YKMK)Ejd}3ITb(&sFv;Bylby5 zj!yNM-+?CPqIc5$K-n20@I?UL_O%C1ZNP1j`IJkPp`^OO%PDxHdtW8Jvg)2VZY$ho zkHwkHO$bA|8{CbT;4h3xm=BQr>}5D7nsQ{&-X_bg3wEu0QBVV9`nI4hB>t|cRrtAK zJXe)BUEUPNFH~}=SqtqPN5~y7kq0ALt?Gbw%4F0cM)4f)qGggmiw2*+&veAiID7?Q za31M*yl3!r3=Xtg(Q&@nf#4`@Tf?HTvLFitt4b~&Rk-*4bN`%v_WqpT!qr^S+wGRY zMv{wd5K#PdEVXy>md>=RY>xI~J@1>h(Qn~0j@!j=WI;XlHOe`XV{2?df0E0PFl5SII(=1}S zU|qaHATrI#Z1`eQyzJS}Vg7M}xLz`h5D`3cQR6+pGY}VPMJ3oV^C=K{d@UxA0?9k=9P6m7+tyf?mSQamL11hvtmb|mws&a1)& zNAIuI{Ecg)s3iI+)E7ZmLslw2G5QI({=}oWmq!4NPT>3YOaK9YL7I-fH~d#=Adxqj za>nPELrT@^Xzf!n22CHe_@cDFAO-q?t;>>wHb4|NkZLpA9 z+U9qd9t2Diki%IyL3uv#wR^o?GMSl|5C(DwSSmkmudAL^r!ZkAX1RZ`M*2X z)bVoy5Ug!(MEGFeKr7}NLYaU2)x1hE+rDKDH=|C+3-xK&of+sz!|#(9o>Mk-$!7p( zvo~t4ggDjP!Y?}3j9dH>mMm=mISZoe?2Z7)95y{E<`U0HX(5RFq;dx1SetQM4nx}l zAEaAck&>+KLL0k>AuZcbF8%?oZLVXE$u6|P8r}^A<{kR()gS@rRA-={A;|%{AG&ud zHYHJ=2FO);vZ%hceny8|H`iB6gHz55&I}B$OQ7WGRK6RJ-wnYDYI~ZqoODNpxzDGo zRSTF5=l_Zp*iHlyLA~dW9m!J?^oo7V5x(^NVLFb1;;&XrT6Qh59DiOLgHv?uL8~W4 z%4^5fJ8ifl5&>F6svMTFicXl)NSt7jl~gFNYm>;3++vVjHmcf0MuJ~#ze4><`FJnM zkXr91FxPqmBf9sA61O`eAdWkE8`+=i;gCReJ?5jJn%N(Uctsm1CB8oG;>?nu;Cu2L zy`})^CrD_Y)E9hP+?L`NM05*U4ns0aK1NSDCJF7Cn+aC4AunCa!tJxJE!(qDAMM(hq;el}3!lEx(XlOUd0mH$ zdc@d-NnbdIkqsJT=CN7tC#yJ+`xIr~aEtJ%Qs2s>x1ga%bZN=yQZw@ox0yM!aG(gy zIaY*9t75lJ%Dh8&2=v^&X4U%LAlOk*SwAd9TjTu}B55hbg}Knj(bM1G^@e&5`cEOu zO5K<{;eQ9iiPQs;X3=s?g4uW9AjCZxRzFkD+K#zUOL)K>$-wce`EuIJSvkJzAtdAE zToHy3(Q$|qXUG3_WroGfr&%YoA^Qvq{1JzkYS+~AkLT=Xxy~KMe<<{$dC6KSSJIVA zYzs+wy0l7SK&7yIgFeJly%xuwXar-@5QP;z3apATcxftaIHjs(u%Ubug(VWZ;MCih z&PkWAQ{f;--u#AKEzhqOT4AoR=SeRoSery4G=^J z{wYEKq;O`+nBcX4(}$_)Wrn2kY*1fE5|uq1QPO$W97lNUMc2NGe8Q#@0_0IXZBNJ64$ z@~zT50_BaHjvNN|--)OF=NO+tk-93X+x}vRtYO9QN+8 zUbu11moIx|eLm*2e)9lg{9z9S zzShiqOqsx9fRXiAKm#cZ%Hu#=as!1sHLN+MDpOCxMd;Fv{{I5?{t*P{*md1^4DRzH zgvuTU2;fas0B*W&D6C(6cu|$c2$#i9+G-*2Bp%WV(e5{{OUqXzNqnTf(1-x{Cb}B% z54wrDE6%RQgp^o9DW4zar?7veI{lFkOK@=8Gp}=k&V%tJZr`r)wlmz0k9lKS>|rVGBv`)j`whFU zbTnMr!TU4JUW=|Bs{QHTgbQoD&s2E-q#R8d_;ar%iEVr)EDb{;fa9WTS#Cx zlH^si@v^_Q;b$aO`defS&o(GgsiucjlCZ08x6Cr)2STGA`sXZ*yb>869v+GOfI^{& z)XNPzuvG&n)}Bl?Y%tg4nes!TBePKY=ef<>d}1b(8^S?PH;%eqHc$?U&? zZz11oSz%SSma4Oq*<07$yg)I|jq0<+2O_a0M+#eDn#?eX|8xo)It8zb2iL^jerQRC zMv@%b;0(g9o;ow)4>;F}SYKO*dXtHP{4N7%D z*7pP_5Xo7%Wg-O!k2>c#xN`3QCjT2Ia^E-m8{^L4Y_9AlX z&TBvpxb!2VYknG`Zyi?aPkw13H{g0`n}I?+D-?V(eM(DIFOD>;@FOHTZ?K(QMYs4H zF5^ztgUIZQNWIJsO4hZ$EWx=wG@RZT*~6(fl@%+!-hHE;pL)dJp`T0Q5QO*=Uw#O* z@fw83wS3}ng4~|4v)GWsxpolyT%wHlZ;XS%W7Lmpk(l(Ymu=Yn3R?4vWh?Zkso0I; z?tWqTJ9{ag50Y2Q<8{AwL;{+>5KJ+oj5fAd0> z&!(FdaIq^di<#Z^-a&y4pTi*`Pv}$2umNlE^1o+MG|b*-`)17!R*P`WT-BErjd>RF z{u(ygD2cgAcoW3X%n^QjkrO!}u76z2(rvge(7Bg7vO8g2U3PP0bVm`zlzt(Rh*RT6 zkTBpc5nbIeCiXV}ea&u4`<`bdQcmIZi1*R3EII$gvXFP%Lk#$XpEpR}#pA2tA{~uX zu`2nvxGIAl&%OXB(5@%;z7yof?nekpLk z;m1ih%OtNT_+U&QJpSP}9~^DxhUj$70GnIA&x%2aXR4cem}x;-1kj&T#a?4-8dn@; znp;@&WJ{wbJ?tvWJco3Tr9GAoYG|7Z$jbc48(aWxC~kvf=>`mQaniNN2+&q;cKYIh zQ}0}7_1xfOh0&MZxUf4U)))%E2MJ5m-mMqGmG`ZU%XOMcNPm6M%R2LfVx(?X<|Jk{ zdbG;85?)lf1LVZH_gLMi zSW;gqZBDmTRh5Rq;W?JXl@xs}gj`@r*}(#dz+?{7Y~^T_3!L3O0*E$VbuLfDNcfz( z_1<+{(<-@XTQ@OkD^jE2o6Q(yg>%U06HVYYU=l9Z*t)OLRz-OmV~>}4#=W|tFYtF59+k+qS0vGdCw(JM4_i zZ|!5ReZeSFHwS*$=InItKKr5gU^?m*3K$mFXSSmPLZL`cy-Ngk=3SWmcsLZmWG9qd zt3=*YNsMUr8*Px3N|VDV*;SsFF7)NhHi}1R?MVHbKq{ddb|J-?;t;8orfKjIyGRAu znOA7VYUt3Da1@2ItbuZ%fdn4Nr9XnITb_?SF0^vSM3F3=j;x`rIDOaou9^=^oO0P1 z)XSjYH2zw?slqLu3sEtCb|fe7T_?8`)(j*oekchJ?>EUq%+O@JqsZ@{w>Sn&k9tR| zQKxCJ#g!HHk3H5T6Y&O$y;cZdZl3R7M{<62Nc-N$Cloa>c+q+c)Bt)NpP$ROsxM(9-ik6|ROF?Zo$6wL%r)_~XyrpzNFfZ*>y5W% zHQPC{AoQF)rRbodnF!PR`BOulR6k?EKD+Uq4>TKKe=f^h=R-zOVSvMSko)jpW#eKu)^I?Q(iHD7Ij4^Su<}ef$|x zxlgqzJX2i1(~Iy~Ajha7CUNbe9f;zGOg(tyCY%c!UJA9P**Rv6E0IZ=KDpdERk)QM z-J5hjUU|HL{j`7QC{RrPna+QB9Ji%O4vlH8RL;0ZnkDAP9u4bABUa)fQn3WHqM=N( z1c|C7=+V+#0PEas>tRCd+90>?ohq@4V2u&MN;Wl;rUfcD0v|59wa(yW#lZ08aT5hz z!sLnY(p(tPF)sUl5<0}wd@mt5CVkC=IAsl6;DGw0h`a6=`dez?X`|td;(j*b6qG5t zxtG%`er)Hnq-o;oAX7;UlO{V|`OXpqou?(leMQS~tLAW*C1tb4dk#hxZ`c8To5D3+ zPzWMt_EWRge?8pm!}YDDmRJ2)BEKu?c1Ks~`l51^lU6!1X$Z6woqKFRdB(oKrsZt6 z9K4VzW}GIL-*KWQ$QyI@(kzRgI%vdlq@dJ)ORq;mR>ss%_9J1-G) z@=AEUvntccDF1MBkYkG)!xJKrHg43PFDnjFdlt!&3juf1eyx(VOTx~A;@Y$}9Ziup z3=WN1W4D%K5uQOev**LQ>Q;}tuFy-wsUu~%Q1pd*eY~U|4emEc(Js;X=bs5Sd*9Ab zfe-VRcFGYmWYeKRfl<1YZ}p z2~gLoiQ75^*B4vlpYWOWGVUmkKr%Nzu<$L_sPoa29qY+#Hk=58YLaq4ySL_Bl-2H7 zs3sv_{}R=6;vNX?|mBE>oIBe)}cF%&vF)z|J0+FPH^Ow<(0Z1#H< zYHrjRj*7TiY;C~x98cJj8*Ba1lVJXa+6e8{2y~_gI~K3fb7Gn<38POzxLsEO*&Csl z3HolCD#8~?J~-E8*b$}ARmeywkMZEevN*DnRU*&32Oh|%sG?-kg{V2wn071;La-ji z9$*p^KBPmb6ADhg&yZqJB?Wz&8r7Wy;j_`k9(iHbJh;p@aLX6*D&zQt&p2NKgzq65 zej8BZEG03UmJKLwAsqntwxL0LhVM+)$f4&{e3q@wf`_Z^2YjIL1Z&?q)6(^?3Vz3Q z9rOg6KgCsqgjAZu?U-h=yvE(jGEA*6zLw)Ill4VUb1qu0J11q?wBjj_mV2?7i7e>f zrOxQI*n~$h>+@jk(pObw&_5lS@oC!0x84tN*_FnSgd_k%b36e z?nLVy&#J~~V?C*8fonRG;K!-txN>p!2Tzgcd+{ZZ12{jc?)lI2qoUi^mTm0V@GA`o ze%LbuUr~rY*AvxxwgP-xz8BH0&jKo%mF9?N7KY*ReWlsmSV_b=7q~q;H{REsrZs&6 zKT%>2nM|Zm8>gVX_t1~RJqSE5L%zQ9HKFAcef-03)=g~tT6h%w0_ACED|!+C6~$Kk zX`L4xJ(id2ghirj*^Q8`A@2(8)|RJPx1KMPA>D{tDgUI%jYmAe(dTS{Lsv+n2EMSi z8q79bDMRpnGZwsA1E^p}5U*64ar1N!k0h5(_8R4H51&2HmO%)zY*M=GsKv*yD+G$p zqN_*%ay{Fw;kG3HCuVF9Q%l-uEr-(SpP9Q3%JH)FPC;T@EH(FWW>lLzMY*O*R=7!> zOUI{)9?T;(+{K-j^LpoCXp9kpp$sKsTOh>o&oZ0gcvf7G)Dpnlm+4wMwHvut&&5V$ zjKz{&Xa6&b(ER9q9eqLxx~4`}8$Use8Yh>W1~{MCrl=V=%Ub}T=cdxzE%!BWHX%ox zzjCg*n{amK4!SKM{Mxlh_;W03>Zpa{?|;%?sB0MV|}!d6`> zpW+c%&vZgm*Ftn}P0AYP?iGyRZV8ISXJNeF0ZWqNV5xx~a{a+FtvSYrZY+A)U*e1< zO`&p>-d^s+k3R-g-nh`br64<(UbKSw$*s!uJOZ8ybA3LAVxuQG!vYzh>n4gmZA4?| zxksiF3wSp4Cf30mC>KEeNjA=%3j2In-&RgHqR>R>)Q)U9VZudX5{HaY^V}h&(m6JW ze14bHH?0fSUWK0|a$-SF#Oh2aNH6sig$`!hY#amq7Jdd{s*Xq)KfyUi6WuY;g{{*~ zS3ghB9w%=nEF!PC=sH{med*zU8dEjg^5KPqsQM4m6`X=#DBXB@;yew?){ex@_#j5M|Vi7<) z|5>n;+=msjF)Y%S!VJ^G)}5Y(#>Suj=$}Z^APTTF^q0E^VDI9xcMEQPGj7#r6)3~A zg>6h0RSdkg!r|JzaP6=--#=oWW+8d|zaqUrHo2@%DaoVLQMiR0GN|QmGLfsr?9n}v76?g=F|msR99)?vj(()l zust8A(}wEas8^wAz3J89HEXAEMAg(CPvC$Ns-{-7V zfAsV%%7EfGfp9AyQ19(J@&)PR_%@Ydh?`kaI@vniHRg0r1XN63<4nzJT?Lk~j%s^i zr+^V8)M3ns*_sjcu;T1i^iObDpMjQElW2;G%@oL9>$R;j5M1PobK8swKEnb6b+3gqYdoTw>fiK z*h(YQ>{ZjyA&u@LCXZMM>AiCbwEeU)EE*#pF`@R**8wO75)SrVJA&9EEy^$S#|8IV zbKLv!Ez_^>u1ZG&q#$sQ*bWNM!Jhm@5tp88gG%1PHm_9M$tIL+xHY}6`{mjfh4j^UBP3MvE^p# z0M>UX)i^Cmn@zsRVbX5+N{=P;#s*rzNfC>7TcE%4{V4Geq~ZHgM+pYuFs(lA_7#|D zQZ{i&KUyVCxC^ibp+~OfhH2leW~=Fma<)sE&Z;l1#!;Dzox`TsC8MTVYvxE4xJ(UY z%1lsZiW!C1w=;#E%yNuXz{2pg0itlkqdRn;K z7S1OzTM-fF9=F(GI~6{&H*qdoUd`1YhMJSV>}Rk~8+9mHpUW5ZY_J{=YH~Yu6~;?< z>S1uAKs6lynOUw#&5!Krdi?ld>B7DL5H@FsjhvLo>Eg9Tazj+zPMj<-Og8@4LAf5~ zs&kk5%RQ{gZulIV0%9}BBsJ;WO;?`2HHi?f-y=mO%tTZ15OBx~J*`mfwbVCW6qQ_* zu;&4(=NKz{L(r~YM`PSD_w!`qZmuRTd}N>|K!{NJz3) zL`5v>Nq-+#*?9eVu}&flksWJh^U3CvVqWfRZQ9vT|5^P*4wbaU=@-+PR1kuEeBzXJ*R+J_& z6r%X=TL<{m2`uFqU9_mVguQ;z(&=2+tL2fU0G z2wS+l_)_g~q8Q#kd-Q~wzQ}KBoz@J^Z*?%v2l6fS?Ue31yL^-eafkNlkQU8#iKk+u zjE#_89i8zTLg5u{+3b$4;w_B>thPlGy@((kKFLnJ&xIKl$JttbYG9O>%|s*SiY64O zG_~`7>mj@Pgvc4VIqA~v!TqJbrl?uEW(l3T?noZKXjq(5!lnWC}{+I8Ar4-QG3o0CqYBP6|ftV#^p?GIqwsMTTpcmzaGvUQ9Or! z3HN6vos`%3N0w5>LdkLaTKvc7>j4)B-#!&ex1o&9Rh7w3)41 zOYml|{fh?{y}qN}Rz$QRcxn#ICS$J$eKTa#+JXe8%tIx=io4JXSD=ZXK$|9vq(Fy_LGK%L43 zXs&mZlsl!eyvx`1Yoxf)uqoy#o8BHHG;Cx9h6`fb@Q^gw=`zBHXGpO#r90t_s+?EV z(#z!`=#It1ghe4pY`pfXz38+7cQ_HuiG|{Akju6o?bax%vI`fX^b_fmBSlKl!BJeXe)@ z`NA_PwwjcH8%V^xx*#IYh)GVNEr&qYspqSL9i@ug4Z7Sv<|XnxsjUTMbb-*NH$LF$ zX0&Tn3yo(Vr19?l$_xj?#>u_z`Nq-zJc|_M{wo5K)Ltjo*R@woUq!iE=@ghF9E^7S zw+c7c*2q>NcGx$6(9s~iUSgdd7lChTn4pL0s;niYk@*aC_eAd5T^mVKaYrM1AIA?W z3tPvRpeJ9{l`WOjdNyH~d^^sP{kS8%zvu*PnWKA>0>ZgYizM{kSU>RnUbo&hLB0J< zx7Re_{t1wlEE=w6WG>$>VW+b+yaz0eGKA~|=PHwn{Y=EX0?{(yV_9t`j~f2U`&1aP zsgjP%a0YepXdxy=&n{=SklG}vGJ%ZI;PDp{1LE|R7aDQNC}keXm3vM$HTbuAazQ4VF`V9v#VQ_G61)%kF^owQ7E*<*{1{)pwy7)CX?vMkU`40c9D0M*!2&Lv zj?^r`xM190y~oo6s5h@Cmo&Ektmhki@5gO1cism zGP?{GjDvHi5eIlqX4U}Bk4E~Qqd6r)7l)3gsl}9nhIcG*$DiLU z+V46U(}(f)Z)%!)hK|VtBvA>}f}lfMtKrYNxBO20#43zRC6hh~sl3`DS{xM@6hThw zzt13)m5JRI44G8Su_!fF>60Wh!U3KZ(Zd*Xs1@S&bq1aFxk18@{147xSrglN2hXCg zi6oXPaTN`9GQL(00G(8n<*SEPB09rVyJV`=nJ4r*DU~T!x7f0re8r0SJ?76RVpvU? zh~xMX?S)3bCpQBnAWqODQo2GU1cIg%Mo<*-20*mJ16;I3yDAhOO4Np3(T7|~BVhvE)TL<7&hax(eWn8DF_OUuk<;9{`ImgVD0(+_?Nq2n>E`o zRnDT6g4gAtea@3Lov=ToBdYR|+gTp7FRp#5bEHiL0g`bACqg|-40@UG%3eMOrQ3p? zk)UB|mf=AmkXA}+8H;W@k=IctC&}@>&1wNd?+9>R#kl2IQC(!c@4yd=*Ix*Z`1rJFnfEY{HJJL;j}dB;`z^50 z`+=WVU{jh0#P&xXRyACN;>+t6e8O&XpA+mPDFTpz=XH~C zmvGuP3ca$U3ZPW9Jg58!a2!3(>ap~sZ|N!HufJ!-i#zqIHIldy+7h2YN_Z|MYOmIb zrJjv4B-wJkeb3a2G+^}#*0<%>Svp%?`mjtMYq!V;*YkWj-JlNZG_~IcMyWA)6iXzl8lq0 zI=i#Xd5MP%>fo9)TKMbpG@AQ`m2H=9cNMBGWgqVho2@ca3^5q>; zht$D+0mU0kF5l^+?3!)iNB22TO8^fk=YiCv=UQrd&leiHS9U|cCVS?#T$|I%WQZhk z*b<(z-8Yr@kQfRfs9$5-!Jj3E_Ot$2OThy`RE~f@hem)_peqQr1&7JIv_XT7bCf2p z1;GcfYKDMKzH)9t zgCz)YX6V6;N_ZG+*fu2od-tuNQ@4CJXtZc!9L@a1yRo%7@+F8a03q-bHVUm7;VWF* z4h!m#_S`PE&JG=L8}L_3g2iXfke~t;Hv=Qcst6iu_(*+O@GscSK({V1$D3!#5#~V8 zMwQeih-1k%{K4uP6`Bh*3NEi}q=Vmtqj4X!ex!f0WR^zY6?zzl%?QY2L1iu?YXPU$ z^SJ%h84yI*o#iZ4uOyV8vi*=aaKdG+npOf(Hw%T;*z|Mla7;-XPKHHt$dUY^h(SEw z`fXgos!aUpdARS#fr*$j*Xr_d6%^BG!f9UtywwZn91V-a*sWVTAHZx}HJKG9L`+`K z9Puajki@O$xz)#b2zrjD#}YQ!1FW9It4 zi@KMhP2i5gykbZ%9W!dy02alM>buPYt*##uPrCiYE_3+pm$CS~Mu(6Fhm1Zg?E-2H z`S~+0C$YPlW2GZp*9RT>7TlC7YIfZboht6821zZ}5<^Z(vdn4Bw zGdlu40I&p<{?nX*{X3g154DF>`c4F@80Rp+JCiX#4?~rLhSFR1_t(wFHp_Xe;vJ;z2e5bE0hk zq-sXkQpo@~rIGVRXwcztG9dNBn^6oPfF7zksKv#&^&N=xfMm z3d-}r5YSDPkU=rlGk}hYe>Ck*52haFS>}d@kM-B*fpvbw8yG+E$KU*lfA6_GzQm1! zjST_QwKCfPq61D+T^(e84`erHrttdS@f$0u2K{t@0UUq8@&6e@aFzh20*!u!y0$hb z(KZ19R*GKQ;Ogl4$O1b%C}$?%Z|JW#a;d)>KiF0#)|Q9wzt~@X#Kr%xA41`^nJ@g0 z^k3r!=hV6m0t8xss*5o&v0-`@OR~GWp;S_3KQDrukhI{2hMSjRmUv;@92z zZ&hh>>a7;d@MrZ=U-I`?^gnizJ98bA6ClPKM+P8`4gVUTj*U*wFLX^rRTA>t%<*pV zZ_=dSvmZM$!Wke-fVO@!`#x;Fls)X{F}WU(KBOc&zje7>>jcn;SLv%7`m*ENz|-kG z>rN1sUH~`HzD_>l@6K|~lQ49JA`im8i4|8UiI5-aZFTbBg{@lGPvQ2vZo+{*Fd^X8 z6%oJ#wuc>3Cu3fT2-i$r?%P7Ok@{?W)kM;fxTzKc12mN&_zUT6{ zYjfY13A){}qHfMs^!|3Qqq2mz zk~h;4tgbrMyDn?;G}_SrL0eA$2AZCxovRG9L0*kn=ZIHUTm3D{&G zfv@Edk3?n%3`S=+Hcb-|eCvJuc@UXlW3s?883s3pwIRreXt#mPx8aS#+d8$fIpLHl zNJd3z*BdeqL%TvaK|+%JobYtYGgyTb7<50F{uW5-QV}hDOGQ0#)be0e`$_>KbeLKd z+oxK294Mv2qo}}$K}LSSonJB+&KZuvcT$w3c7 z2|d-$=u>5BF>4d5gRIHwoamkgnQWDK$l=)V>MSba&wGx7Ro;T{D#(NU(8 z@TD23Y5=X1!k#Vu8$#v1<|I=(If1rI#tc_$28NxO0669EK*XquS5B8P*%j0_oEh2c zif~%|TnEd)2}YXpEzoMWMTMsOnw&ZW_hkMQtGiqJ#m_B9Q7JozUkpKYxv)0UmtfI9 z7geNS-f{0g33s47s4Jn;7bz!llgCPYnlNPB>o0vJyq$@LFbY}j{S6B!shc7}8&5@2 zEa@Pz4r-9-7xbf}apEgCI&z!y)Mf*w)Fe~zI|)CXyp?l}7Sb#i9A}#yG32s0op18T z50(x@v&eTe4N$N(S(06&;dw~Iw?|N3jbOHtTMO>F&Yeeb+}?i}`tGYixDZ&weLY}dAsH&zK$c8n#>_tCJ^nfJ|v;al&CZS zkK_@7O>3U6-N#u+rN3AzhJ)mu-$O0H25lnA9_R%?w8B+9F~;+)(uPXIGT41jZkx$L zH&HOtF=sE-F4EGHoSapW!5ItNghzN`W!~caw~v(F_&7FR?}V2r@rOnU-<-HQPo}?_ zX~}Rltv7@G>&B(zZp-F39%XZU9X_dk^bsL1Vl7z&ftQL=LCSa={TInk7v(wo&hVAb zM^0ylB96T`4@9igu*OnWseh37!#Si#2fgAIgcFCrd=*BvFR12tUm zGsi;*=1=7)fHdA23!?vOBbsz@sb(O_IC{v;L{a~Q?LMH=t-Ba*-0PK0m3?gdYP2z1 zuIO$)lIvulN9SMvYT1Xo$>%XA8Rd@nn1!+|fALg&nC0 zOPr2*iDJPDkmG<^iTCbkU4WH`;LbEOcRdfXM zl?}ekEr#?^yjA0rs@U#?GTjtt7_^4+$%06D+YNjG4268f4^)MthHV3y=-*WCysS^D zZDkA`vO`i9@yn}6Z+fZ1`#LXB^AMyko+t3E{|>)quIrzSoI z#e~ccZoAX@lPVpOqqpM|Od#%cnyI>N#V5=26DtOihXe|1Qn+2IorTyJZbJ|a;@}3w zi}+8+){O^GGeDLP-FBaV_eX6m_h*FG(of9@{{?J(xU4H5+un7th+lH` zj-tI!B*s8)W-2>d{sSkZgiOkhPz)^UB*Dj#fnyUW{cX_k=_O=`e|4zy<{Er?`2UoG zKFK@-SJDok^@xfJehTTZQ%7P5%_W(X#V)?fFuQ{Fs5XEy5)yB|a15oKcb`rj8T9^* zIG=x~^`)ML{1+`;M8qWjeF-~<@OBAeoaTDlKN2&o5t7lC^!aimj$ee_@41x-0}vw2?qOPtm$7;|&Vh%> zZyxDnFBmx&^(VsLNsym;J~X5E&GxpU5lf&ik15p7#$)`dp|$JeozT@@Pyw!Fk!N@i z3&vd7aex|9ZjG|V9VkQ`h(u5zUZ6^r;#l;GC^DaySk`kIDInyhWv$##Kv-00?MK9j zG_r)gmwhzdS%=^}zLRFb%o)cM_9jlGI}E=GN4ds`>mvT<&+PsqI(ZeagX%#EDmwBs zNNYNYS*qw`XU9vi)EatMXFXCvdmna74O^EUIDL5oCXJ%V%G?b1EEGO4Iz#{86>-P6 zvwz)@lXqkOx}d<7KZJKOYCT7b*O#<@?sYn`t1L-3UguiXEASF*EbH7(-ao37hvFL5 ziQ;6s`(aG2<3t@5{g!<~0jg+KA2!HCr()lA?5Ds?Us*)5$`arEE z&F#B7i66Xip&I!~r6i9?W^k9$dIx3m-xP@_5+IA}ft4IB=eH8t&_rlCTLQe%Rlz)1 zwm>_c%$&(m_F#todJ+#U!x2-a7*+nrWbYz%snLv{^-K*P5;pf0wmLXZl;DF`x%=8c zY8@t9b$vohNBITsL&Ng+eojUwS{VZ~jqye=%}^$MWvQQ}BGt@A1>@Qv+lS26aTn@x zJPrpSv;RowLC`tb53&gqS05_`(uo;)%Cz-IFkr^LtUgz+{T%Y#{Z+3AyHp)i`Pff= z_7Hc<1lA6VROf*u10C-yOim`BH{=K(zAKbL^xKl(&%*@n;@nYbAGB8C0%GM-bQ?h1 znI$(&m5k7A{4wz~`{nZ5+grJt9n)?GbGxi127JX3Zc^YeBY0SB%?PPZ zT5*oX?s{1>-cUT8*?YcqG;v&H6mi%ZI1)>@8o>IuB_}1OdYuLwJhqASJB@nmav(anfSewttrc*+XytM}tUB93fv&$R@Q?y_4S^eqa-X=S zFt|_Wz}(kxuq?Nfy4fPT**=#4&$ddaFFETMR4M zUo(=%4IhWo3}ZmiQLXi7J7h>$=kcC;*E%_x6sr$2sUeSIY3>k}-w{&{GEj1=WS_uH zMTtK3?*hpP5~d9)#l)>H9@Rf#DZ!yKPa>B1vB2^JSTKCzDP$rttmoVNuij)wCtisv zIui0~l@Zwg4C;YxhC>fM`PiOKG%H#4Rn%88;xtFbT?8;ZVf+xGU^oso_DE_jp=;g6 z9jVyX;jo??E=B}EBsc7j;B1xt#dj@bl(qSGt^d0(%-) zkgA=)gIoY-S&n?%Q?$MlJpt>nv6-)+CphhqF*>wV2o9UY{6Y)u4DPJVvp7DYV8=0H zJ#Kbt9gmR_Wt&h8WtuSp(2r0S$Tr0E^&j?pDm7hWXGmwuw>1PQB_FOU(CsNwN6j4d z|7>}epEqh16LMZ0i8S&fppMbsqjp8m5t45NTyY1Ly|M~CDRMMDEDW$kyCSW!(t>4U zq7qHyT+EkKQk0|w#e$J?mjmWWX~3Yb9UlcXq2d2RMk@nn!yZx-+}*Ki8^zkmn76Md zpU`Nx+0@j>`m|U+==KccyN)1^GoHmRl^Se&;#V%8-~fFv)ZeMJZZgipb1s1XLS~tt zMY*AjHI7}5ix%U0LUuvD6iO#qntvHOHKNvSS57rKyiK?KFxRd#vG_2o>YAXw946MB zaNU(=td7bZa5z&;c&X0~h4jA`z|l37al=O@1`eY#8ONO31;DQ*@JY`NvbS?6{cwfH zB>r9DCUm0$3`cnFNIY@|N_}k`B^Fkl7pUL|Qn5S0`83Pfsy^~yJ{_chA8W~T#JMt~ zDVv0|uGSGuaIE&~@+{lsp237H;DxvQGrL6k{t3X9YD@z)d&gyMLz@lg_>Bc4Dt50> z(Mz)iSe5NK+v$O_X$-7W-ENv6xlN#A`f2Da-oC*oc;z zQYnZ{x7ZgGchF86@CS5AClKNjXd${78+D%%7f@6zU(j#TfxHR@+1|fr+h&N{_M*`(iCQM& zr?c;>H#E}-P*6wteSS@mxFcxlhM-duKepFvxFRNvbMd1A%CLBYD5@bZPxg9ka}eiM zE~mdP{s3nZcnk@3SzeEOqonvgK34K_4O|yjbiZ;lG2Wv(s`nj7bG}={#HvQGBM8ek z5X>f6GCz~PhvxPToI zk){iu1CIGh^q=DKVU5Y{`VcsEhwDb4lvn!ib-K68&xc@wSr;(VS~J;aOW+|Y${~9sBC&Y=#Q|z+M9lIm zlJU_?>`9>qj+^e#QMjrOmHZth%Qy*tcv0SuxH#XZTMm0-)V`i9Q4-Z;X|3GBzfWB8 zo(aT%DTv9Q#==3AHh2#2KNIic{qi$E(wgc=37%&GMX>lD?xpvq5+w2Fg%NXg>Rt&F zo1G;(tdW~9&Cg(`fpksDS$SrfD;ba%6<6+e#hz{5q~?=(8|FF`NuG?CU@n}!Hwm!` z0n+1B(D@LT=c7Lk?!U^5I{sE{*-5rJp2KeoUw2XHNUv>0S*x#C3XtJ5D(~@BldDea z_^?mMqmm|q+xP#ade-+LZaiOu^d_AfB5&wR00Du6lE9=Z=n?wbbf(SK<+M`DY*1E@ z7ZZ=WjpG`MXoz6H=#4eaU2V)YI3wXT)tL@RGt(uo{l}Yg9$u zv_$f^S#ad5_thUu(yZeaP;L% zHfK0Z_a_@txC@BTeAnXvGxj59pGn9N4TZkz9f++nRqbe?_AE!VSO5okPk?jjQOLo5 zsoK$@hsV+6x0}k>6%)5)bXH@<)Hpf-oueTcu4a+CS+1T%)&f;V5g$+X5z0r1g(*X~ zjFInX1v+B4_>FVn0Q?OV5S&N2UzKM`FTVs8k2SD%iQX40>6C~Tj;C+I<%4*UD^jlj z8sqBnXPF)r+%zhY5<|>3KCR&q7T!>gCc2MK=-e2}`q#O)8kB1c|0RN9lG))@wn%s) zhR5=4H2?!uzmnZ~omFmfTgMD+riJA@KfB}zlAJhLAuDiH^=dda3yM#SU!gc!ShlA~ ztopAV2)oNjZN>MEu>#lULtl8xGsP4Z=b7HEw72c?8{*Tc7K!VgLj6HWCx>f@w-#~R z@B;?4VgiK)TQyIUL$j$2$s(|1&f_#KQ4++x9saASC~c_cek+cbEb!x6fk=h{7Lmd? zo4^Q?j}SWVvSILdO(Ry~F*)MW5cTHZ&IPMI%W9G^4 zarG;gA7gO_{6-%>c3suZQ>g<`+vb^L1yfg0wckV~VSe>;R@su?lnL=et70Sm=VPae z1xQJp{>!;m=6rt(ECwfpWgQH%Cs393VzvCK0n(j{+QUj%4nYfy9~o(t7S6P%a5%2z ztlH4j#r(%wO;&wveT-f2fbOv(Xu8@{bB*!x6)strDat+RF@%?T=F=_aE9bt#aifSa@ED4~vxnK$d+=`X*_gJIHD6oq{avbkcHWZ1Me;Bp4V`l#T~|1&GXS2zqB7&E{#x z&n#aXd(fp4{5cXuU{6o)7g&0+jOSS3pH$PAtPN!zwfT`3wcsG9oKCX%3#MH2xTBPKL8r|jzTcX7EmBhfIacPUtV>hZc{iGdi8*`7|7xzY0bhhAY@ zt)~C5h!0yVDvDF(KUkXeSU})SyzQe-%igR0BWp-(P|tq#?h6k(H+V;$61S0pu^dMf`<}jjaOVz+)~Md2ww$|Ap;rPZe6q$NR+7QP{9e5n@K7f5rs}d&dT4$H zX6zaX)dHo(v$I`hf_RwpY zT#O%4MD)>DqL%#$ock3d{!yy#>9UW$*Vdx?74ZKrWrt}rHr%|ktYt82x zX^HY&GWshiAFF{sBz-b45}9vDZ}{`5#2_3d;^ay<%8MX6er_zDgWEB~e^K&Vqw*%y zbP0#tOVz2IGEnN7-0N+%A##oum)blLt|D{He2weU9*gw73XY)`VPcf-2x|BWRfk$^ z%Sdu^@%Jm0$lV5zV9%F3yV(}Qj;+mbV5C<+vyD`1$bMuni)FWhE=

)>FCV&O+~l9RD%VPghy|>36&1`(O#hL{wI4PjSkgCOq{ZxTt5lX|@s!z@w}OF_6}GI;t;a zl;h@;3oitWPh*SF&UpI8C*i1yZv4fPHj7$X{E4qgOP&Tq$BS;b{oj^X(DaHi#lnm9 zxs4MA@uG~9Hv}t&vTHKML`au)oJ4jqAE-Vk|29}SOvHj63se|sfepTq$Hv}5@6P(chIG6{(_}n1wzD)0_lGSR*Q*_2a$AZ-GQlMNVC< zy93dBrIdv_AKW<*Fae*X1wylC- z1L7R_eiZqiD>wz913&>e4GuB6L8Lt3~4iB9hk+T*_IOp0jw5zGP(o`TE>=!fi z$l#KL=m9wue=ImZ=6F6hFC9>Twi4EDah9yUuQlN?|1kZ`t7K6T*kj3pRB1*5E@Dg2 zREM=_yf@?&kS__P*8f>1lxZ$e2~3_F%`VK;_ON>!FMu0~p zNETni0^m$7t*GKDo% zB}R$TZSBThV#fmjy+kF*%C%4+WNEN+ws`S8K!B3&_Ek!4H1tRMEE#20usd6xpGSpI zZTLf1k_zy1y6tx_trz{l5XiEcVN_Pav@!jDuq=%=PP5$!dOTPu3Vre2rI0v}woi`m z=Or`FuMN9crYL32!C(e)Ra7k67AVK!JZ*3)iNQ|(ar)_lltpu8PC1@cQLXjQT@Igz zJ|B0+Y%ATMLhQXlIgt3@zGe+bJm4Bz#&ore?7r)Josv36rN=#nQSrslp}-O1{R_QO#FP?>k$`83CrY)yai($&p|!IdP+;eU1`b@G1r zo=>KZP!C_gF~xHc4~ef2LDHN0%~;PcZTYcadY~Pkk%ZH_=f;`loQ*QLaD6Aw40Pz$ z8*edOutKFWHv~YX|hK#3|qd z_$*^0#taSzhYI15T@o@if80n8%PJlYZz|@D2$FIohO(@mJ7?7=Bg~YSwTFRR$J~RS z5z1$`b%z+~59`Un$$1HZX{)pN)DS+fJWF`Ko1U6wAyg=ro4$q&v>G=^B&#>PhUqpu zNSx@qDSf^1fbbd-3)0@}OY33}p2ilC317ZL&Rsg3%-WmOsWZZRo!|XeL=wueYnYmZ{yGT_;Q3)K{UU6xTZdUp5x`&f zNDX6t9!ZSXkr*J7PnY(_AG1*ZY8MJ?{DQ{#i9mECz0-OESQAt&`7qQO9FzU%GhZh? z-oFGSwF-qNXOo;QSzRw*Fz^XsGnot>^=OH`v_&TtM&K$X?Gf*(vzBA^F1`YQPZ~bDuu^7Rf{5) zW+4b54|!m6%=Mro3t2Is;U`@nV?1lXINu1BBaj3z_xDmy=o?Yv^8kbNMh~f z7XihKiNdTr!MfBVvif^^q5FhE1ngQ)*~ z0W5i%$UzbFo!WdpdgKIhXNWgZLEFrRNRy?NZ$PsJ-^|#lCMWd@vhq~!@%A*^1lUCG zTR*}=sz+yI&g9Tac$UY#T7AV0@rRF%X@-QZ*}x6>;rK(4msS&hu%R&4P(Hm3tam$D zdxW~aygO1>pNrt$wND1Df!d9H}Pl>+5*#%(lDHig?CkkBJ71+6@CYL=o1ECk7r_Fcyr?iZ8<6~_#1zz+6b zbRJSyUt43$>}W9;Ue!5RA@JH)9H-RF6+@HHX-Uw$pHtQ@2{p6;-O|F-B#NmpKJ52WZ5lIEPlm-hiA#bPR$56qj_`+$9CTK z;$Vpzd(u0B40iIot#E`7^wcXJ@rsii0On+@RQe-j=cQwtIi2XNn#*T6K)N|L1S06k zk{LY|C@iGd{2-b<10cKYZ(qKo16}#`Vxt(cbNlP>MvsGauMXQNh#(maV{X?Ywsipb zqHJIJ!TQg_HNJ^qX-n^0_D82UfaJNfq z;3@AR!7P&okRJS0^_|Z?Lw~^%N89y}XXFFEwRn^fq?{!g;y}{$ZwF>^crR^otgrY0% zD#BK@7x!>2d9A*@8$Z!r9_=X+oU8IMaxpGyKwZ3M+if-Q?6BngddfiZxn7hAagrj~ zMS#%8LhF4Idpu2+KpFXv1KM3giO2Ff?E9&6O@e%SY}!d4hE_|7YN2fkJN5x>JCMrO zUAtu<`5e5dAx4SocsXKT{A!8saS95!ZFbZ}UcW+G*{3F+V(*OBo`XQ$dbNge@#iek z7-duF(t}A@5xQiAqlc8kTNf=bSihOiJuv5zwqTb5x;{qCX5Ma=6Ndq{Nosr_x$R|{ zUDKeFy_>O=0CnWFzt(_s&>%J_Vm)rf-2;d8)#ex!IAj}2sMYTa*rd?J-9_4T55PZ9 zSGZhEoDc33RN?j>kwq1xRanz~Gw(-ZJ-1SlfbiY2uK+?xg-7O~!jUbe!;2Boa@2Sh zNU=HGUWRE_c#*D=t*f2-VRggka5oZ9z;YD*P}`{q4J$P&Ad2Ykka^piy0-2yZwUXu zS^KvPBF{5KI-|QmD-(=Wh`o*e-m;uiSG6l@Pa+rnU`d#1Q3I7W6(m7*k{iJk&+9X? zQ0Wtz4Rb2?UVHG4P2G91w*0aRo-JmfUfX4tEw1p0uVD5;1O%cVWQYxya-<`2{Y zeY5K@={GY#AzVLN7G3{vbb{}j;i8j9;OrhvYPO%r{b9J42@^(9PqTqTlmBBS-7N2x z3Q;exr|{S5As@^cQJ8Jo)ZU^E6-S;5eEq0kJ4tTP53D~wX&G$e27AVa4mmWa!E6$; zYrjde#9!apkSdxvoF}rt3j27~s^wtW*3qdq8q-6CY>L>N=X;@!hOWba11mx&*zW-a zQnu+bjx&}_8<{NLFxG1wIQc}WcQSLokp47(RA-jDLM}Hwrq2|51+92rWlxwB2&!M9F(M$QWQvDOWT^4jWbYgco018UXpbInwR}k%4O7zZw z(`r3d`v=l=iWWyo3ucjmT~+0|pt9BuEW*4z_qJr4vxGldmr-Bh={HJI*~deH@eg0= z)Ui4N?YUurFv5lNfpFnitVt1-oH>~v5CRZ9o~yuUI(8^bR#tm@sJTc;mcmJWdJn_x z1G2(I$&1ApvWlxH=-YR2-t*q8T-vUH^KyfEk?jeg7%_DP*TX}qSes>Dj?4W94iU3b zU;Zy%b{eUOhy^d0eR*u0dm1?`9>sL(bFlA*-MRP?CZU_Y8_to_TS6P~BMicvx#7s^ zhQM}d#ILvKACY-z<9_u&?WUPh%i9HpxC;umt7Zjzoia&3J-Sf19tGJ7;_{3r)nM|Q zx2ZT5PkzJ0tMYV)!Ec*J2RM?r&QW71>F@9)lect-=eaeauz!(DD0q#uWlsYG!Q}RW zy94WmWt{QB!bA4k-EAztC34g;6rJI1qKoK2Si1Udl+>WG0Wan@@T@db4q&r?C&71e zDwxk3tNNcG9TV~E5j=aQuW>n5)X|LwX$4N3`MV<3O4DfI!mw=2V~1mD zj|}1-QrzrJdpyex)}a(}+T}z{)FC~}BIkZLj$;o7cooKD0i~2K6g@Ad+N_O)Kol

MnrS_8sZ7rKYA zcf+*%2qTt*)~TGze*u$+U1|xspJo|Y^xHUF@CfD^ap;1M(LvaG5hZ^ctjUl<;=&ka z@My!TR3EpBPlKIavSTw=p}yUmoiT2Mg0biFq;I2l_bE`zgjCCCIQqB-u;-9v)Fw=b#BTrC;eVy$)rygjp$ z)d`E%W_$inG159NwU{F75~{e)v*vM_96C!?Ht+WB9T}yI`P#)4OJIbb0ALhZSbseAa%oH2Wmzs5=N@*3%u#=75G|B z`E)(Le>G#4fmMepW4ML2aCv&L&Q%V?MaW0oS`v|zKe=rKLPGrto8v?GX?jO0*(&@p zVUN?esmh4X={WC&xF(RY8dV9%GDdu!K9sUq%`@$H z((x;h?Nn74@)rrMzu0GQKE4eKt!%W0tFY6(@H~{K-M>J|=)=N|&we7^Gdn$9A%7ir zJGm^*VB!<~It4}ARA!hllVxxRoj;}2jz-QysXGb)!-SKqUKap&Gj~=<+cCjP;2?*i z8h>XsZe@c{r_uWHvIK|_hSw(`ys%i zDs}pVa$fugl_?;9zFI!n2o)}Sog^z!pEmw#RiS#;Og{vkcU{8NUJFLX>qGqmuaKqi zdC~--pf0L*1by!v+GMUlynoY9`A?R?^woio+IRAW`J4kf>v_3d2eKOy)1#P(AVYjE zpV+O%(Owo3pr`@lx?l`tnwanG14yQpDJwDGw%GHhay4^IX21lJD<30qsssIg?{D6= z^PG?h=1a+nY9eU%=Ej&5HD&uN(FmTq?}(=JQc9)I@pqFh++q>7^q!xpwxr~0tuO~! z4`v+6@wbY=^Cz4$SVfV&yzmfmmu5+X+35s$wlja)yNL6x@GVMaBi8TM%wHv_HAzi@5{050oZ)=5C(J&JXj}T^k-3#SX#vu?K>}?P z=q&&W>{QQSE$?_IL)`$E=T$i4CvNm`yd*0<)>P%JeQwhZ?QDOrM*1NLZDqc7zTW{ETT9jjJk#0j%=m zb=EcTwiIP}=IdT=Rn6+A+*Vq45z3Ca)BsvfG_%(Bw#=~XYPl~+1j9-W!=|XUPxXMiITq4RrvDV zeJ1`~Gezdy zSp1g~7rVb7u}$XX6jyU9n%6rMLnr$F)yJl|OAs;Ts0%pcFj6|+;Ui%cO>xb;I@QFy zy(Y@rPUN@rnnz6-WljM@-Zd@&_JvCMmq!Yj2#vK;?!m<)PTY9+gL`t#YeOF!*P}O> zDpVG>c<=#uMbU;g^f^ZSGWar2lgubjzA)OS|30E&UBdViPs<~AyW|lm+j~5S@)yRA zY-u&Ov%O-Yl4pZ)!l>9|`=H7NJWUC` z9#PCnpy!eI)Dmi54_j+Pd?W+V-WDAiNN@fgfqYUFU8&dBhfd5UJ;d)PoJyH#$VH?O z9#5{cjy>a4X1vgf8fla&Vh2r-=+fq_N?h{=laF7&68lvtI*<^u&Ar--E?tq7q(67R zQ2zRA+=0~Z3)*j7%*flXpD{3Dfs5Wp@cQ|q!If-^A}Yu@EI4SxnfY$1Mf{6}#$oTl z`ziH<`x_v@ixJz^D^F-xJV~vl_B#YPg9?Btc@Xn&5gXdYK6+5m7te3($;%mf{rfz9 z+2i||Es<~3mK=6BSmtvKfz#=LM#v!Q<;G<%E_f3OU2bS&!eC$(J{PxsqHp+_eY-d> z?G=B|bS3js1Y${<}l)k z?a0}0{{*H1#P8 zS??Ii3Z4Q;MZt#?J$j#Y*R~9`oD0!geshOeEKDw1hF10ChneBfT4GI(PdU!UPA{cD z2C8?5GP z+@>pBnw6$+_j%^K9S>&ff#jEkG?nz=ipA;=&3(T5>4vlt>thwsWj0d_RV)C?C)PLl z*NOSBm`S4sAO0g8<4a(?dR(O1sN%TYfZm7Ky+kWAM25-t!bFFtR$H>jI%U5cUFzqr z&v<^X{KQ4UI$9FXZfTfoYcMa#v?7(S!Vs>F#A`dk$)-PQ@OSV>nJ6elV8mlQNFmc$ zZlRrT6_%qAX;!VQrBRl#o35$F0ekEcGOTRm9R3YmkRlc_$bE* z8?;sjTC=GEI}41ncNp&7T#bS_x&q?&y9MsMy+ifm5Tp>BMqJj~EKAC`aY5QeN%}G` z?Ot?;S8xeI=FjG~X7h+#Yy6=(P-U$46jrFX%^r!Jz1We$H`(atQUs~{8RTja@h27U z9fSTySu|!J9+l;da390tnzTA$3*}EuLb38{qdk!LW^l##??1(oH@$~H(9vPXhRu}M zbFw|V&|!TxvRKGWq%1QjEYE8fQwi#8`}d``Ey4Y$%CMeccB6p{6Cs=#cja(I$3 zNECxQU2dkMnPSoP8_2TSUx2inoT)#kQl&LBhD1}~79?RE5 zKMh8PXiJwDFva~frs0yaXC-9eU#o7hvKKAuVZ{n=th|X;ZoZk3skTNWqQG)(7Ecsu zPn<`jXu&;);!2WBlN3)UwD!I-xz+SG*F)r*mnlXkSrT6ME|p1f0bBFWA>}Pt>bla! zt>oFv*8{>n4WkfGRQ8HZxgYV9<}qEE|J^9@!a@HV=LcdaYTgJ#>!X3{uKf1vqk#4}Zy}BsmoGoxi*@wWxgd zPg|3`ta9%twzSo%uX09sFBgcVaGB!?o#t5AVb1Z}j4q;6`dB7R5aSrIzDwKbNh72V zq&)GJf8H7IpfB7K+Y9ol2toWrc?_>^&O!cz>)!{5#mARq5g#{ZBR!RS^q3JJ zVf@2em=s3PMfOOOk6maq|CVFAjrxsy3m z-WD96-(%46jspbp57^=S;XpCUy>m1bEm!q6d4uhql6(0^EdCR#y_+2$kT)Oo^3@lu z+t)0ObOrOA7Fy6dH{xzJRZ;Vpb}HxS1AP5`zD*VeZy_WyKoj=Q1&O0r(IZQHhO z+qP}nwr$(CjlFE!nlrh7?wMEUbf;43`s&_s6AO)j;WdW$AO2lEVJlOGPAl zsgVPr0x-&el1eG|9?j8ZP3yyXGj!%RH|&84^i|^=1{uu@1gf({+(2B8a1}4Uk#PIG z`B$(}4S@FapME)qKkB{7k1^ckY|IHEoHhL*GC- zkM!ma77}*iU@Ye)e2?V3iSqyzy)kCTOzq3trodbReRnoTxJp}73)mhCgQg;g;W=~n zn;eLN9ZFzqzef&Ng&>n8|77;4R1vCr5w}V81xU21Z9sM=^Nx$ypJze##u8<0=6BRw z+dBt?R#%`7oN#=a+`}ND96&)(r)%Wbwq<9yd^2p07RVNQDc`(rhLr%6tu{*>QC~&NqVo)##wPAoZNz!eZU2vzPr3T9L{FWrT%cJPj z>M$sWLzuoSc@qm7pBj9sE9q8a#WCOM=_r=UDQVX>FgW}w$32y^p!8mxYY<)sukwch zQOPfXxsInQkEJVW+2ioJK$dEyYm>>Fx)A_W1DpB=%T}pjJ?TLkK7-XN z3=CHnyi-HpW=OIgOJh%c2^>fytpx}G1ejT1JhAi^zIQ>AIla9(w*4c}K8xxx8k6}) zt8#59by-w5!!0ShlMw^K=I&FsomUmpuZ43yTSuzxV4@UgWnMP=d^Y_S6JwS0a57G! zX;~eZ(w9Gw5blVC)@HMmACcEyAc+QmwKD$Q>V30ZgbGnIqG-3#(!cA{1V}4XCdat+ zrZxnkq5y(QGtLKO2E zl-B?$KD?e@_GKo|D>k|IZrna$Ymt)lFWUI@iVaDF@B-d~%oUCVL@oSYA7EC{xYkqx z=O|SDhc>IFT|?$L=-}y}Md!`@%>AAukwpLFWyUc3`JiN#l#@u6D%h?S-2yUs*DrD_ z0G_9na^t9~HTaw&RxGY>!{L9&)s$MCsIC^Hg3?D`YJAPnW7MT;Aa}{!D@zQ&%Qr3| zbFYX!PVuRbdoAnE`OT_Vdc3w|M@kAld!L8FVo`CAg5gn2j1PH+sqyc2ZSRrNg#??q z&8zHPUIPclGY0oN(-EIC2m{8s7PO0o#7GkgTiZsb%^|%@Zz_hK`F{a65v+eNN;`~c zoN#)kXvmBFL6^Q8QSeR5(uxWZ>$n5LH@P`h5B;t8E9M{SE1L_efatXT81Pjbj3ABG z>~C306{1)1P>6ih+cpFufd8t3(}tj1-nX+Y=FYfCsnjRy=MzS;aLEnUhTGdO+Yng> za$*{MW24V`_PIqx(&%cJJrGk18|yk|RF2xwGI_?Kv5nR?*dk;D))-%^SA2clRxc+o zRWT_Tk|dG!0GpfXGqPb>zIkigUKFUTnVF65+}k9oGY=KC#y>EGh2ci6V$geM3;i7t zEjb{0n16E2!g)jjM#t(USyR;9jrSumtt-JdTMXYL77ui$(QUtpz^tiuYR#k2msn_! z%c68VRa16Hods5v#QPKLoOLw@MrVx@Od$e|&CVG4bRw)E6_aNkWk$$Beuznbvl)9L z3GblXe&wfF5{rx&%+C&NE@gF)+*hZ<7;w=Kcf`=tA*aB z&@k^OR4hG7fta2DTm>JY3V2Vn58mdpZCnPF+_@QnH(s{c1K5<0H6zzNu&<=rdkjMVf;<@BS)BceZsZxFawDY={tZOlVY~MN&oXqFp0S`E=#2>~;a7SE;kaeG z)5#^8Fua-)B3Ys}f%FCN#mzDUH7-;jwp8t?+7hVgl4(CB1EU$NB_be;36wqFTlMSwqWe97X52N9f;` z7>4`f1p3U@Zec@vguY)qmKmA!ejWl}Dy9P7U z*Q@&_)W+6cj1J2qBmU!3sVEF?{R*YFCfOXb`U`dhE*Sd#)>aOf($^zY!N+(EC*{qC zX!~oy0)oBY-iIUCObvm2nI%{GwG0T78B{Y;rhq>hO+%pj9(&&88;=}m`RK|_ zZCfoV{8{Qn>@B6AFImP?clPsuGFXW^ssj>&ly|H;>1HJcwU72l9M7*40!sq!Z|~{! z=RLd~);hKqg%-{?yi{k%<^d9OQ;sbqOxFne!gDy7E`?BTJ_;NqbadOXDIK?e+6&9! zT*Cspt)XZ3S0U~sR5{0w&%P+v-Su2KuksfK$5k%FLW83I80s>2y|st@dBh~p>M~qd zH*Dg2l^A^1{z5JvW;x+?yRo4+ftG-qo5J??#)pukem7y21=sU(6b z#_{r?BSns?wlJr%h;pq$sz>bgTp$VtdRzD!S~G>nH&w`BGp~N( zwG~=fFYmYD@V?+?gRMLig306Ce@){Fm6xtfJ~4l#tbE#uTu7=I*Q~cIyATLnCT)VEj5yVJoTcwOC(%{@8>ljo z_PmdAf=PU3PS8JXKC!B4wLUJZ-`54Lw=H4$CH zfs+)B2S8V zpc{B9eQLxrSk&&23)O3g|8mFR+2t}(=^`G|0Bt@6sLSb5Nr5bvx081DyVcApD{RNb zYllOTogEISm9Tj%nD>6Kx zZ003Fs`Pn^N+FvN3XR%bYPdnA`NUj`3q7vY>rrvXB)rD%z5T_Q0uOs_Ua=B1#^?sW zJeb7`%2(OPfbYxm&Y|aN<&!h`?B-n})EgO=gT^9TFRT8VS5N73O>>5t1_A|Cn-0?R zc9Ea_futH@g7mTdMale98JG{O-I}QRNc`V*#pAE{xedkqB5`bMxu&2Wtd+x7V$}`} zeyc9J9k~td>jxCYK&1T?va3U9Q)|Qii5cvqg0p(Vu#5Z;u$$*WRXb4>(}dF@5s9l| zI97`yjf8zk#ROjRr@V}H*htD<0L~VT!^O$+?U1{z>@Jyk32xicG^fGZ{o4I~s7EoB zaiYmVHCy)D)n{7#;Q@^3JrYwFG>_wYJ`Ho=?(JA2*TJ~Dxv+29cyUO*LfgmDO0KkB zBxU+0qohD2^1=&F8@8Y!GHs|8gj;g_B+QukZhvp{omMx<6Xb!pn9r=qxoT(t$Vn zv(l5`#On5L&^gu$f4Qy-KpX0;a+rq#fpy^=EnwN#;7d$&epUF9r$1ND6gJ^2iFE^D-VS%_=A`xh7@Zy{$#F@zP)q9}uyV`L=Z(P?xHD`-n_s%GL-N1KCb6~EK~G;r{% z2h)3UhRDNYlZGR?sT7kMTFD&{b}B}hhsF7{HZHrgoRfJQFng8x`G~SQF6m*zCaL9f zc0^M+4{1P!i7t69WesN%ht-{;rjdG|jfc;y0!bhJ5hr(lo609Nz6`39uRhotcVf|v zkflh6=OOQw_LYK5{!=XutjuiO8JLQ)eQy!Rt^yAe5~xnQq?)uPe0|SKF}3^`NS`=>mNXp-Ey2e zBL;s}u^)0{b05uZcSgt_${??!I7bW z5u_)9ez7cuZ-eP0Ol9@$GGT!)@sya7P4qE=7wEfI(2|>)Wdc+=iqr)|6nr6QD)oxy zWdf-!L1^P*>3|VC(0KUTw_L@s)1Hbh88AJP77E`H4W=r>z$pFW&zfdR%9R|3PB>#& z7#(#;l)eAGCH=iL){mICs5+~cVq%|8;U?;vj$e8P7+&>bX5sA%j9l~@=te}xSz;A< zBSRPAXcn+G*@EWy-gvF^Y$DJo=1!b`M+r|)mtw}E$~#KTfs)O)Q^Ky`Z&e{l68m|0Hlxa)O2kz5Kd2&9eqH1$_{0B9+2mCvy?IKv_XB$HURlcY~7rLI@F&kx3-D{ccaW$?x~N!ifv^84^Ssq7u0mZBa>B zXaV>yv{KQa%xA1l$3Idd8`$ee;2gGT%9#B17(zqRK?)id5eRv>=O}s=RIsuu2s<4L z@R&Oc>r0i?!n$a5i15O@Zzw_ob}EVDuWa<&>W5d{2;fxP4NI&(c8TX#gT8zfo$BpS#rU6x-)i<7yXE_cbTP6 z2#i4Pvh{wUJNZ(*&7dd7uzMrn3CSV{O&I(@9uKzOdB0(bb{s*rAt@zR?cv4>n%t7z zO1&3S=wJznr>nfx<9sLHbG4N8GF+XSzm@_>?szZY8zp^Tmx|DSSES$Q4n2o~`f3wW zF*-V0`Iyp(F_R;OH4jU$G9K+^Pqq~ArBPhSCezbz*sg6H-Da;v+rL-mWB;rV=g{Gl z3|!=t$(jo(6fR#87C;kVqWAOUdJ1!R}$Atp@k( z(h?pH^(~N=NN{1KZ|>h&GB?8H`y7H{f8RzVQ0-WSoF|R7guqi{#|Ga-;kfLLQv$H9 zduvOR$afF&jpM<3LFrH^zB$C1VY)+MLhsDQ8RP8z65?EJ93TYq)3FUDxk0C#h;A{u zlsDr~p=zJyVczjbo!A)kRB@PE9ri_EQQH}SGBbzq>suDtm@R1e#!=7SXYRJIP7E-c zjL*~#&nD)m>~7gc14_8c6S5gTt}48a37eCWdGKttg%5+7;l763^*=UVBrNzWWDl=* zfkH+L(|8Kbz`AlRnp5X$+frmHraHv$Lfd9_?x8+xn?aJAms}2Xw+d4;-L4e~=~!CC zFC?x&_8RA-aeOc+UUUGT6X)n?3kP3PI7 z#6#=q`Q*cP;Q)kCd#nR+h3@}Lxyq7h8gNk!T3sW9E98|tP^sIlW7_$b*gStWc3g_V zwE;r0RW@+THjonp7ktlG?qU7mIl9D)7yWF!ts?O7mhvg|wUJmE@E(kosWy&}f=dI_ z_ROA8|Guhz24z_*e@m2p;O6=Fr-^aiU4L2C0@5R?;DjWh*>cr)3TWSg@RJ39Rz8SL zB2X~JMx>B#KcNauf`(bUjZFg^#T<5pbqPn}F=&U>WnjfL=Wk+?y&oDK8abYhGLT6+ z(#OX>fWbn_giSFSq}M;|WR+|%g(5C;0<}ax`?GwqVs=hs<2TvRG(z2{1z3#a_PXKN z`OV)Cb{A&-kHF)?&J@)d8l9b;-)H2|R#h5etMpOuc^@b?XUWuXamjHpP~$O;q#!(Lg1ovIW~u>Wqi0b9_eW%^?^@qJa8Ev2=B zmiK@6Fue77O8W&h1!VKysF8(@5)a!Q^Gd5MxmCfkGstF6tw5?7 zm)6tY?j=p}u`O&IeXYMYrh(=kdz?EiN>(?(?aauZo!WA0Rd@?DrEx>+ z{8Ai4`YC||kpzojp^-gc`5UDjZsTkbs7X6D)Et=&31m(9hs8u`(HN`e6U(QL-Y}Ki zps>uX>MH%=dRXkmgE5oSLblV=T^I(ii)x-b}yq;d__&O`4_%N$ulF?CmBEbHS zmby3JIz5J26^V!j2H?tTccoL3x&{}!@%hI=!`66obdl1(1g#1H*pS2_6a3qXV}iDy z6?ht3foWDkYab_4`u#Rh>)wank$AS!EIi(Z89Wxf0{sHD$NhK(V@m z3qE(Y?eMQWg0KPqDE#fQI*5jPe((N$atw`7!)NZp3yIQaH$dsJ2LPIY-YY3!fPqC% zq{$oNHe6j{<`WTUF?eY?Aznv^_mNHo6?_ zL)$y=V~&<`b1**y= z;38Oh_KbYcQ}`l>bsiFPi;i)j);wgN23oP7osUJUb)kcYF|@Y71f*cmaKmyZdMU8_ zLwjtTe)+ELVg^gy%ohu$021W^*4nH4ARne^3Z{>iYdn^O&Uda`qJDv#=xFs-Vz!~5 zdVi(i)akp@$8~x<^CbpWhRrRps@zy)D-H2ee~yvGgByI0>`y)B+8HX9?j_q-Z2i~ch1+$Pj= z8V|{GyRFSCyeIg@D2!26llJ`y?1YC`cY|KL$7Xjm_md1G40d$9Ot@e=$!1fFdQ5pn z87meA+6QXctzT6J)Qk^qfhxI&fti@46*W9NI1BMY&!5eAv!6d@{K+*ml*HyF1--a8 z{HJn82x*k$%ua)^>B;zbEH)g7ZJz}j7V-%!d-U2UnL(3u+p)$yI&RR_VBwDv{wW!d zaRFQw%(-gOnX;9H*U_09gOG`#=*Jti7vF3r;n$RA*f@Q58i`0bRJyjw>wGj9jQq4s z2~ZB$kLy$XmJEz^A#W3-!z+O6L8z(d(yUl`#Qcr2_H8qlk7ucNp=!z=utcWVi;IR- zQpe3M{D}G#W{E1p6DYeI_f7wondAdO&pt{8i(XZd(O;3vj0@=h zhi`(MjE+B4wbISi4p8vKd(57O`l9l4(^X@}}j@JJ20$xacUZ6El&1mc&+oP0dwRs|Ggxn%B}%-`~;I zc}I4Dw&?nPOk%vJ@##&?;5BC4LPW4AMy%*a8s)zJxLod>JZzp-&V5)WjZ{|%VYa+J zMi%fMdUP%*Xn!a~F4wQseF`c6<=UR9dQO*Z1`4dntF?r@Krx0^#zQ~|x*((Cj66mK zr-ds7;;~T%r+7c^AI48_r#`i|6D%hvjGFCrdvFMP(XvI}mkbiBzjnS7@Sfn*-L;=) z#^#*c&Yp3wg5CE6yNxood}AOq+WDShzG%s+UyZ)uBt*au~>nLviU_t z;~Fj5Hxn|J@Dfj*2Z9F=W+%usImoot!9$WrO3hhQ{Lxs~dtmkg1phNwCGKo2Ne$A6 z7L~p4$6i7xeAc{;BACeLJCW+6!r-~X?@Slcd-pl2l({kL5I-|g>lHxrK;?3myl4@s zI;NcMYefya=px)f z9T1IyGiUfRL&$N7iZ0!Qsu1TtI!cMCmco_6A?G!M#rmkhq*2rCIzHE1nw>TtfL~Qc zqLxER|NWt6EjKq_b}tXUo_tSu^MK|aqm$SfzEei#!Qq~@yTzB{Z+i%5dbuB-c>W!p z)>TkHRVmb_@8s{LF)ocoZmZK@oPnA%{7j}2r07Jm6x66b$Czx{OK_HU+JWj^_Y{w) zKCmwPVrm@VkFivL(SaJ3pI~Rk%)gzzDW)CQ~49zg!`mkqC0AwVjL7<>aiv=pG4 zoJKRhj`F22YwxQ#`uwt3m02DMeuV%1(rnIeZSh==+It5Omm zVes@MqwxS2h!NYDFlqq@R*jRg;zNh!A#E8pzZfnmFfPhGN4e#W%Hc)qUk_xjnqg9c zN$fqUpO6_liOv)2bjxPMqX|HWz#ibZtHIeqcPvYPgbJS?Jr*t^BkmKz@Kf~=&rmb~ zAs@EIG!j5oi7Yu*iV%87lKPQ};yhuLie&NAIIAi1BJOfs8@SPWS~*n|gaD=>34aHF@(@qCBWyzQE}I;Eit{wjyP#dd6u%~%G3owl$F zeu3Y9pifC?P6*9UsbN&dqEU;dJ1j&m++1-q8)@kxJGf>M5o6Zxw8pstXOYW-iu)o_ z>L2D_Lk2AObfEJxP`p|V@f3~h&cn!UTO-s?tmeWg=BpWZYIChSBr9(Fk#L_zU%d+x z-Z@(ez4_TZge*Sn%w5<2(gXIOI7C-No@UpNCTb3LGytD|+#!|<#Ems>0DWK0y`aj1 z{m?)i+pcsU0yxddM*EKtd4!&$rKIm~A&TYR zQM%UR0jbpl0_nB<^XnO%@2Dl?C=HjwdB)a1V7X@wY(WUyHBgK|9VQmoo}STO^6mlN z^HUM)2o>;gw7Js(EiW=-+8yK4@~xj{V7c-KuY&)ObqXQ|t)EAZh1($&Dcw`$A7u6_ zZd-%k_aNT;bk-*=gQq2z3gm^O@5>-fvqV|bCyL2{ZWtYMu-Q+8QRK52px?ZMk?ZFq_rEh>;0|HCfNoe%i*j&=@D7gkQ~X;9%n*Dr{% zS(6KLud}84gDf`rKr)~X7G3pei@G+4L=d@eD7ImJ#ggLz)uX9dHS8k*<&c#4Ki(@k z1_ns@kQhQJ26pj7cwyzd_83?ExFX^t1}Tdubv8A+rRM*N5F~lX?M4oBk0>1+Wpn=w z%Dhba(nCqU4Fubw=&*~@v}pg|)uPCb8NJ(Xck3NS3yh0(_Z zA=VhkppMzO0^^Yd^PX-$&_-Zni=J7fFsRvOncN`?A&e}X#4{wcePi|ZFjQr!$PxgRwxB2k7+8jOu zZB?lyEJd`)aUVKtBH8l-5acFehJuCe#SfHEdSmzfjokn#k>Ds?yP8U3{v8m0o|5F3 zwCRMEO>1k@QZ7UR$MVFvFgKk6wB()+E_m{h=Ib`+qIEvtG75O>8HveVvYVsJ*GDnC ze=^}EpVXZ%)hYUHlj!E_Ry)O`*XFtRm2`OOAXIeWU?Axjg-r)sBxC*VN(jU01MT{# z_$Qs5{@G(Et3z3%JT`Y&z@{=sVsbmGYUYAvM)k?jE2cMAx=@-%5+%sC@%e4pwX8Q( zFI%*SAWOnG9^PgT-_1l=Rl7sr|ODib1dpR1%?Bt$4z_dHCJuL=zWR%uT)BC zYu8ByplWYPa*Qb7R1LNCtw*8Af)&ULzD5M@=86Wm#jQp4T0kME*Ry+%^=4@PKP{A+ z;H8A-f6KHC;zVlv14xU9GP)F|xB1kk_3OWz_5n)z1lWM>=fbkC&*ZTMoyc!tXt3vL zaxw7^&2p51yr~7YAsjHi9zop?Gqtu>#i5rTy*Ctu8PqCjuR(bws@nB z0!Pd`B~n}nYy#`#o`|SrTPaZ~NMgV-o3Mc-o?F6yYCO0R4aQJkxFL6<8m?;d_e-eg z-6y_o&CC}kxeTjqv_wD$?XlLZnM)aPrvTUm^!t_hLMqR;nvuq=xOF|E+R^*yvU!wk z0_G@3tJ99E4gDX!obm7U=RrN*z!yytr7moDi>f z>{B9^4T=WQ8zUa8NrOdeG5bDO0mUhXBRLWuVPoK;GdX!}yEDPG3eb%OoX(2v{M3M( z(d_gRuqNTJhE{)FkL3x`eBy44Xm%$Ilo^AW4qB8TrXKORiexukvF0JvJAYk}P<2{! z;*oa1Jv#}9Tlqyxc-*+X;{aSPh+=0&Uk;&dewZ=XN(Z2BdHuyPE-Zvd zZ@m`k6aU5Kn{=Z?Xt0Sdrzn%caYasBN^mB!exJfQb)gnB03^-i6^~yD$d+%t8Z4~} zfPD}GUlmr6aXQ*W z_T-Fehpg#|r7^D~$1f{8)>9>a-{9AT4uwYr3ES!s({r`i9eARZNuIUBfh`uKbjQ%2 zt%{9Y6^q22^v{1Yc#&UpT#Eh*5%P};wLs{irWg}!K!?9`xQJXpQd7WM8EMFdi3WEOa{s&asEAbvB07*qlb+#URE;~nY6(p z0dRe|JbBRJYU52TTFrrxjM~Qw5MEn^YJ?%giuM3AOM&vr_;YFo6_jzLD0_DF{sH7_ zbQF*Ty^06O;Yr+Nd6kY0`(|FyQJ8n~fwmWrnhaZPFjE9|VTDEnkt`ZBodi#cyBZ`7 zdJ>4yMKUfui>DMH#sJJ6CpU;=c*v$MHa7*(%j)@5m1QsHflTm<<25&7Pzqk8FX~JA zvIHKZ=q_pf(wdPhs=0tTHkoC39@EC@^8;VZ5KW4$2a}XiSREH)1gqNd2!2TB)brme zBhO6P58Bzj0|v1mm%Tj+d9OM*x`4GRc|&3a&)iy%zr#77u@#@dxtm@Vv7Gna&Eb5@UD=+LLuurN*SXr+M8txIRFbyCz&_f#3q?0nUS97GSI43T zNZ7Y0nJalntfbakABT z!28n2ZnKuT52fT@ARP+Bq4LGiP+WoePwFsRM@y*O)b;{E1 zI<8RbB8HeJ4kWu zwmh;VUkR=L;699m8QtNQX0>RT z6{bWHF9(>1t{sE$=7HISxor?h-L+jnPo4{sYy@s3a5X4wBRbC3m}3_Olj@RCcfiF% z>TyG8vw-vCLb`WfB5ffo-}Xi$?oA3NukYcg6YLH&q?%f1;CVoJNK0|vmwB1 zhg|CE>^1hZF?JU@C4^Y*1syV|C73lt5R6f@STryc+TY1t_ER7W8L`zS+)EOs4;S`3 zLk1f=s*2zqR5&5*bN#SMGj$F~h@yckpWty4_B1Y|alYcf*_MvjUc+t8cLg z29X9eXA$9d`D#KEH1Km%2PRGWb~>YgS{e{1%4(zZV9Tc)VL>=J&33o^r@%U^&d``@ zLa{jCA9ye^0L790if2Qh@-hpBj7!o1! z(4rRr7&X7_d-k|R1g5K8>>?5NJkgNN=}YymM-woV!LAvvy1z3te%oldeHM6+6h8Hq zw`S`$+}3m!(P^1I5Q2&!r85x@WZP0=`gMAJ)NqC??N%qAW6;h2qvA(3~kE&Y5Zfs$Fb!8y90Pw%5u2k!PKqCFhn|05UljWcg_@pU(xF}_wim?fssXqrjRZj4h z@R190Xv_=`H)ov+Zlm3xB$s^YVOql&I5zoKY|N3`9X?Jhi^rPeG0{keEy2}n)CEW{ zl3yerC^0K;5$Om z5=!VqItGDa&(ZkUBprdmEdN-2eZY~>t5{xmbe)O`abg*)n2mMsH^iIXJAg>+Tf{{l zrpAmKb#&K~h-FVCd#p~pgzrKPzBX;FPOK{XewgWHq)YS+^ON2@TuR43K?*X1O&aaB zcZGjvLpc;M+syVY_&Cuqp$mnc$6-4`(4e}rTTWz)HTS{t9a(uJR zkg<`0E~Bj#>qbHLdZ)K%6T< zB)EH=zunzGScNZW4BE@XW}SDg#H+$tamLpRqE^wRUdUc|&*pY{!v$142MzQi&cSd9 zG|BmZcXPDX!(5HIn4yM5qgI&5arJ_RreaQqljnz-bs*kR-AH>mh<6F60f;a;_><3$ zQ@GF&oz4r`KC!%FB8nTIB; zRGqHZ^!FF|>%ezwox3>ugFlcybow9pZ|(?8UK{Cw;K?8a6|XN|)#@S|&pI8qby4FB zk^m+OWkWfYTr*Emn6>sX5??;yt=S*2F z@LOL>-i;t<<)=eqP#mkwh?(LQaI@M|Abn41$|dH%4>C_dg0^BmdGY3-cq?OKvL1t#q&i<>N;1CG&n+VP+S~w>k2>{@E^x*Up zNV!FaZ4eJeunaaL7+2GihwWCa`h#Y~`TqPhtp`P*4vu2ioQNj?d)N?HhOS(euM zBs$r&s=04Yi?&5#-}gXFyPfkArXQ###hVEMJge(E2X%)-2v(z8)JaQ~G5laHOIbo~ zIsy`BY1sguA^bLYTQq@E=?dPqleRLu)Ia08_-^@n88@-HVq?9oxpX<&JtJHf#_{<* zG{HSgrRCJHLz1AwrWS{ym0?KgNej{f<^bR1Ql@?$4s6oDrXqpWzw=ML^t!BahBAhW zum9~sM7)Hc{LLy(Nt}i2wy>b1u@&ur&z*+2dNU)Jp3*C!0k)p$H)wPyC@a`In|Iq? zA}Mb>y4KQ;@)8BK;`@x=Y#c$))pqD;>G0Y1+G>cc!?_vX5-ZUu8tEsW#xL3fZgrT^ zvgkUP9U}rZrQDQ)iGOvO3$&JN-Bu>z!G1}WS%(|uMG68KDjp6~CL_UGMH@1J=?O-P z8F{ck_5pX|ZuiXF0oW~X0?wuCQe2(}`jLd?MC+s3*+i!v-b|igDrfS5_J*ez_8y}* z0)!hQRp9m^(5P2EnabF1-(BBM+Jh-PMxk#(l_36qM7EtR&h;2_jNM&?I}`t&JK)r^ z)ve2K1~@k*UL0HE{t(Axb+yOSduSAFKA41`n$z@Rm6DC3DZOp@-LN}IUWv_z;!P}( zMQK0#{lAJp?=tV&(9*1 zfc>?utt3djI~n)>0NP_u(*K9`nE8KLj~Uq*S^l5rn2CUqg^lBXYL6LNSs54z{_p$$ zYmaL@l$=j?(rm6HXOOoKYwh*fx$P~q<=x(dF^}5O zPqVINTHU1y$yS&Dqc=7*Gp4dNyON%p?jHu0S6Y>40Re)Qp}8@>2)Xem^Y1ft<#2RF z6jKs1lj7D=_%B&pzTw58nW@DAT>fh)zqGjcQ+ASv z;GZzo=k;sKrIEP>MDgp}o(XhwZ6j@y^Y`zYpS&_X6DXTj8qhRVK*>Kmu&^|_8^mAo zpDrwcfu+@@IRpqrCk7yG3}9pGXlbi#=`sK_w-~_v9vpxXw-)l0pQe-Hdlcz02m=Vm zMi!RVuMD#bJ6p@&m-WO7Xgu7AeG-ZdHB>))*ttIPMAfBEkQ=4BrVjLfxl03HCc5;KRW2lrVYDWLM7 z9ToHUT*Nm&!NXs8{~z(=?_b219_uGR-NWCV&u`uQA)P>ecR|cWUn0QY?0zIL`ri|c+4;5k1>F4a*6ZH1U*_Ll-yhG#FFFRJmJxT7pR35o#{BB>o##*3 z0e)LURMC;1%Ad>8AKTB}nICOuMMYNy^(1NZsfr(t@g$iIVJf({s;Ut*| zIQfkML6Po8TeMS*dEJ%Bh7ANQ9NEjzjs&Sm&!QVe;02tjSo#&YrJv&3KR@S2F)v}g zqvlYKXxU>jgyqh{Ca1{aq%yI|f&V~n1-V+|y}&%1+Z^hSx$0GNqNEFQaEeXHW%E@I2?DfG>)rV$>D{-6RvU zTQ*n29F7ka5zNg_6Gzexy9%*NO_>bdR}g@|_RzeBUX4hHZ=aavYFoEKsah%l#MjOM znmm3g{ayC>FJ@*S?}FEApg~IIe{+-@e5_{e@p@PK^ZY;HmlNeCa+2`99aDm>KaA-{ zo)EjMUV7$hvPxEqd^uJkiyQ5h;{X&)sJ^u%gxN;Jp_rDedrhai8vC6Wj4WbxvhwZx}r)v5V@&`TQPsRpj|Dt~hNGfdd z;lkPYHlP>`P#nK6bxwNzGiepeFfCc76Yqy!phmUSqpP{H#g!I4Wit!CxS3VX$r{qX z1oL78lf|IVvW1N~oF_*uQ1MZOXBTLZ?gTq|mr+lfhM2qq8!F%$QfS84RSbZ!mDj;G?Ahq7T3%-}wSV|)*)GJO&eCt+@yCA=%Li+f&+D(gn zP^??J9pKsA6o(Qi1vIky)>iOLpS4R{>e3dMGAHDE?y_xKRqj^-vwfK0h3W%9jYT56 zpc{iwTnHb|`K`0$B}Vh*89|0%?BbsXEnb-?3baTx13CQ&3<)(qD1T>jnLd8j=?$Em z3Un?6#y;c^MR|ydv5?=x!?*M%-OqQM>8*J_adVy@(ukVuXeJZL7fbo=pWxdvC}@%B zlb=la%D3i*9q>u_6-X1WZYdNrjQW@n6Nsdz$-=tgIg6a4JB=rthuch7ri3~0lcV6&YM;GM`A_rWxYP^c^2q?x@VR&fiC~RF zq=7&>Fui103CGI-tt-WI$x%ybf8)FjFW;uCYCeT%P?iq<`4lkTe(%!djyrEgh~`PQ zC?_6H{AGa5*QQLiKt-elKn?E*5(@SBP+DLCJ^-=qyDomA-?!b>9CV?2HavID zL$1_p(?6K6m3V)Q+=qd_R*M?TD(48RtYoGu71lpev2gl|&yB?Q(!KrDX|@k`#F8(H zQn|w9mMFKwlqB$X`=f3L%Zox1}s9zkvzZ^&qTYo zg`>q7lWW(q_#wF^ptOKMdvs{e-s2oD0=)0l)lG|)!*+6$vsG8}Ps@W(Q~ZURL7n-n zI|3(H?KWE(i$2Jj+O28h!G84kp0g`HlZ)af>h63bD^+?4W~7E~g_C>%hqf7^>mtM% zsU?F13#Cz%KNCP3ptec+O9VKQ4=qyrqby#;dP>3kpZ8q@{UNnj`0Re@u6i_W7?jUD z;Nl^LGN<^Ux>QIIiI#`GLnM0S$o6ed$32+Kn`uO@x+ojj#sw*|-wsSWj-Ma^O?IR< zq@lq_UQtPGAn&R5Qjz#YY@8j9I}FP)kJE7t%52L8&`&YxCvPaj&6CDn4S_-KD2KdD zn~62g^#{}(Q(v(sG1F6SOk|s{UJnhuH9VIkhLD=Uu{^2r@9&9NE?HHoko7UsEqaG$ zisfrUJaRMcVl6>XueK@u<>lbc+dxCNjO62M{O#f4%m8P3@kUVioa9I`r-`%q&JbUn zL#i)TsN4x=ud%Ev3iua!N%cQP)6Gk?#;tKhO}Ex6Siql{t@sW0<~dZ}UTFyeea9wg zS!#(0s~HzURxVtT!ctBaOp97DvlFtn=QaV=UJ;w-Fr32c){w_$vov`(aeCHJ%Od^N zm%uE?Y)o2Qqt-B07E+vBSMh>%{Lf@N7b;x1jWXCLIZ62>)Nnf3LqK(C&*L4Aj0{>t z7&QB0Fd&js^=+$_C+^GRgb>PKZ?Jjs2E<|Cb9za(gG8+PK`DL*LpvuDy=k&kAHjlfjw<-pGgqioGuF{?T?;*A8c|k6xNfa zE3wk#&=M4&F^T$KL%ds8OoH=x?ELtoB?_1w%%b}hs}H>^7i4aY&ed#99k>e6 zON=?5yK`|>W|uyp`3Q%gR3^llh>MFynp8VLiKx@em??Q~L97Gf8-^{9?yWA8?WaG*yOEy-7bW3_qM|Te>#zm&p;FE*Xo+Xgt-hB*=5_}pLDf@V z;%gOIq||k#)z+4MI@Dh~l5Enbt%ToD=&0T78H@R=`IYkn&uiQ3&kKLq5L`pom<3fe z8Qkzni<&qk(ZKK;%$1vD941j$SowlA+qP)3@wvpQ5uV5c;(#{%Rt&yAfYu>S2$#;< z6geU)X8C4vlZ4nt*!3yV1T|c9NuTJiPtK!R>=S?-ZlcM2g^@q%@Mamov_KvZhgm1~ zbYJM+)WKT>)ym9fE|R5{wgfN~5(zDhzQK6cQ9!4BV2JSUg*vGZYT&KVRVt0%^>^!) zmvZM}mzo{!rnT;JP1T0CB&Xg>-%O_zl-4y;*LXjW4!IE31i&^gXefa0g-CH$VIh?r z3bGy>>WVHr-Yz+Ivt6em257W2tp~obq3qb7+`)U-3XR*^IhPxD_T12&G^3ti8?oIL z40%Zd<6d{z#1W-em2wokohPN{&JS;4Y`^Lk;rrCu4vG6X#L;!6+*l+`iPL)x$ob+h z$ga|y>DDfT3?$~RQ^nuIyc+e4)$7{MEZOT_4R>O%AV}y)}wpGUi;>s-Pj*E@T7MiE1Qv=JnN{tbo@LHR$tKhP`975>2{fp3YgYF>k zKu>j$2xw=RsSX4Mdqbg$W+S_N%8#3+n*Q9UHdqaL&}-=SiXImH_e6T{B6?AMs5~g< zv@eIOCXGIbnRqm4@+cIQN*;D5{&IHQNgo}n!@bBLvnnb7t(G4*>Pbs06`Oy_r_0J+ z+q*`dP!Eeb;H9mLAr5-1lOY6-((gtPV3Ul}#J@ULCE`zMNt6?*gI+^AS)Epdtr?Y< zCu$xwio*VIjx$U;(%&yw>^Q)TR|rXGIuqa!Imid2wQsXz^GF9XO(eDSh_KUx(jeQDF*oD!TEtgeRv{DbC}bBWiW3oiGtVsfHf%Gi zK8Q2wd6bl zVUD37P5l@JNPQhgWA17Kjn0*NT(Ym))KzjN2H`=VNb6}k3hollyrD2T^Fo1~dBBQ5 zxq}K551O3gWfq%Mf}0C?h4x77=+mO5HeCbhQY4RgNb|Z{iv|F zOBVg;LfJHg&YLHWZkskk*zmSA4`Y@E%aIYDrH&RnKHY?!JaXpc@5p@|Gx7+S$u0volu%K@M^*Odp zweKoh9J?zgr^!GYwQ%^v8y=~mI7y4Eg_tBk9w$4k-?^%W{|}+)`m~h|NM$r*A(~sP z$*?HK66{SS->Ij~1aV)Y4RW#PMy)seIec&GM)TyXDU(EDQitX)D{H)t{5SiiuwG|6 z=3d_&T$?>Q;sQ~^U&YwfQr;pPS>L*7m zpW`8z$;Gmg9Np1KgDnE#;_fopK6uN`jH+&2Y2Wo>T#u$XzkhQFTdKaD9^|0naF_)eHOqYFFI*$3%Y z_NnJGFakUqDQmFS?lr&exmEHHE}7JcLu_0Ix62VUUSi16Q7@l(2mDSzMAzEH;a2w} z2abuOoBu76OIrkNAsBoyn4bw^JMT021gz;gKx>JiLI?b^votwl?;OLS`pZKe_t62( z^FN{kaJl*?-%_Awf#mFc?TOV~j!Vwgq&{yHW@s4Eg84G>dOGFS3THkFhIvjyLP&%I z$MR7^LOa4&l#DiMg>{t)Y$;+g*-?zc@x#>9{1ds-SX$`T{L~j^^lZ>$#@i3>LB*x{= z>6)2ftI%airbIQQgZ-M+qWY~8{`My{V3zcRadotS5Z+IyonX-5k$}Dn-)-3?Fb>xQ zV~kZ{VEsh#_aKCYHdqOPyL4tj6ttMbw)jhdC6{@=EtXy}>tXAf2d1g6BN|MHbEo8| z^sGWnmlRQh`S899Tc9zf3q;8ZW4M^t@7zRk4Kb|NuSieL#kg?7kD}CElLG4wn->6| zro6&yFuif`45PB;;!F9DFa;Ut;~k5&lc^dmqUW~=lD2)H0{){7&-=R6ATvD4bz7L%Nlw;+>Wm_Z4?t9;{(F_MXX*LrgQk{($NO>#iO8UX(6?pbJ#@ayd z5RN88$e4hJ`6$cm3S#!vbVnTx!O=42iAOpVgOL~5DU?1O_<$)eh!zSPcbSje$IX}v zPJLIvosn1m_J0{Ax^lVm@EO~Sohgc2!i(|ziBmfkm*qYEl)bESI=uKMbw-gX8Ey8G z${Ui_@Kl(3UfN&{TnU3(zZqr&KY%d4AEWpI1=#6Q5$t%Brvf-xQ zxvG_Y%S?ud+Yv?b2^Pbf9>%ycEQXd1J(tFP3}f_!-oi)SYYhJ6w5v0|SU|VFjY%}s zlZxWCI%l*dyL!i9g? z{o<(imBUn|HwfvXbSRnMGZ>E3u5~tl?$yc0y6EcaQ4fVT6gKu(K1IKuuAb`3AHdL8 zxkd-U0knp3hDXKA)=RYP9T#}c#j@`efTEN`M~TTubC6Aie3P#d`%y8O&DqEZY zNDeQX%tn968D)gVj~O=}?3}Z(I}ApP{5TEqZxawERL@~IBgQ?opd&tPWA9=pQ)^o; znxJ!n5$^dgrJ-85Ib>=JHdIecSaQbsFD@OR0|}#6w<2--O4_>KZsomxHr7nI+5l?0 z>HkeqV(6sEW_j);uoj(F3m9bE>Wc)goDr`$8P7WiK}{C(V!OAO2|8tPoVl*hT?L~1x?yhMd{C&jAZEAPCKI#YC&hFEH4|E{(>Cn2O#BF@B0~(qj47-l6goc z$j{3hh9J=aA-aSTr1?D1Z)En$S^FIB(m{e9vVILT)G-WrtyB6W8 z!zF@`SHrnV1=1$sE5%Uc&Yc~VP0tx5Ez?k#Y??4gS*~3fE%TCHB@|mP5@ylOs(-PP zA^&xvFRR^F@sl4q4K>?Ebnp4dcB4E{a9(2HB*@ zn_^$9hNL`QcLDkLd_R)3h9MPlLOr4h7i# zIbYdRgF7G{=V(b111XqGf+HSZf$M5gC+CLw`vNmJY(*9#y$BvS6E=(Mk;YjnnJpwo zuaf)`y|$o}M^Dv&aB*qWtD%vHqunmNf$G8^4EYD%3BCOy(-p(FtR!$pwy=91&@frg z*%g8n;4U-$pqkVG`+$IfQ3xAo{l4pyyY2`M^I`TW{T)*)93m3KMPS}szGri<9J*}( zvv?7HtQfzTWcb)J+8z(KSkO*PYG10N-K zcI9w0e82&LbLv&(B{d#mE@3yYq50tDf13H9qK$}aU8|o%Y(YZxDQR6ha z)BLfLgeB+E@3v$+G5N09MSc+lXUZVnEY^%Mge}+xP!G~lbp!gCBAiJNK4Vy4OGZ(1 z_-h6rGG2`{^6we~zCs|~-?Fa9RZnrhsd%`Gi%!Nfukaz&l}V^`X`LQ;>(hb*_`~9%GDz zoX@i6Uq&Boif3@ASJ;7&?j925fBL}6FhQlzKC*j|E&papm^ZGcO zim%r{#6KA?FWLMgqBQC*fC=w2tLZH6Cl>kL9tTXy_$S|7fDi;2O20yA%wLRUOJWve zV-s))L;rdC74+Y~q@h9@KC`VL<#G@5VhA=Q(BZNmO*5-A!M$F>dW-)iR_ z+xo{cAqohp9g-|jIE8lVT(57}##=t&Y(lsM5<|N%+SK>9x{D5v@-p%t3si0yl-7-W zjy(W)STB5Cmt!XhQ;;}v4C0Y&V8OaM9vr{T^^L{qUy$kLT*G*Avdoj($$*b*#0zp9 z0=?Dk5o}35b0-$JVQI5lPv|7sxujC4GAn+FO-6wGdCZkVj>Fa^fkWX~Z)9>Qn!xV3 zmO;KRznJLJ20{(E+XO1u>Y2_E{SpXPKsL*YG4vji*YW=S$6f@m_$I^9aVz62xLaHF zcXGsLxF!TK8akmcySyD6Fr06U#g30>OOKO$m3nqc)o;Yn-7`Hk%j4aeu zt*mQJrkQaDQ7A8N6F-BS>{=X7I-{9iEx=3EfC^Q~0NIzYWB@^af1sI_D(Sc-71OjL z{#M;*e=+^u?A~(W6&nx#;y`Vyi4>;CxMkK{Z_zTMfacA!YBCGjra;sL0wQ;fL1mUG zlvC_xh%e*9Z@}VpTz`j8$FbjZkgk8JbrSi{^o4uOStxyfuF;vO*>D2k@V;T z6C~>Z1I7pKnHBRR*v@Ju24+zmIq*PwG|}UGd&cKh0lOE6K2KTA2wdUCct+!9QGupG zjopQ-4lVQT!ao}qNQsQ+hs`;P8B%s$KxQ~#|4e}2));a%Hl14S;gL!@o@|H;Up9S5 zs|B+8fWOcVXnay^k3b3RHI}UPMI43_TG(^?n0grHPNcSkhazA0x?%|7gvjGi$3qEe zP*qleE)4d#@(`?8zkq4tdkY^b*l1{JmOL_wvW|a_{sSzzexObt&#U5!cz#Yp?!^4a z!O;+NGzA&vn*H;ks6LXnTe`Jj-Pkm*e(F%}xEy!cd-3^5ac#03A4YThCpmXvi(t~Rhu1hE^JC*Eo*yZObHU`3f>EObUjb&Inzw81n@=Uf7`<7i|l(dYJGUbGrJYKE}Z zCVe3AN!@f)(BOU|N95A`2Bn(d*W@Q+y47+IE0_Wup3j}%B2As1PV-4Mg88I#w7*1sXX=3{~ki1RTrsJJ^mh=xBuP;3C(7wi{EZUaPa{7pG~G^AA< zvRoqA#yWcZgoIlT8=;N_gc!(&bH)U*v7FxXf2&TYR-V^VX75irH>VGk(+iK%#(w5z z+TCxvFr+z;t-*8>O5)a5$K6=hvgeckKG2%N<7dMp~F#{i`9hOpsBc zMk0NVcZv)x@=-Hk_xle@z)^VFoi^&v-C^rH^?e{lu3(@P{;lADNCv^$##othDLl;x z6L5)GI9y=HgbcXdnGMx2%WkmkxJ>4ZHX!MBgrh+>gR`LG;Y}BDD^y}FUxX*spmzix z0SAZLq?h7j(S+w*KJD1sLZZVK_g(L~HbJ<*6d8-7Le2|0AVIn!CaEImz^g|M2fd_o zmh2@x*}#+|sxn148cM@CBs8odH_rKnGz+?k zx9K7%%0In0M>8tDb?_Vi>*_v1k4@1AP!3Q?7AMfRT&;v7VX$lTGi}rngpIg%Ik5-YWG)s`0#A=zjeK8<~19hoJVW{>X{?Xn5 z%T~l6jliN;91rAxU`Emu2<13^^B1cuP*?C)|LB`?7}Pm|5Z3Gly}_9Cz-)4TU%nKZ zw1Kdxcy1F{_Y6YM5qYBXOsXwMp`4q+@HfZ)`IcUlKc<-Eigu^x-i_D?-JnDgKGtP= zkW8i8o0M`2rh>0y1N|ub5KA@~D>P>Jr2Sl=%j<>ex`pFw3d!r1y9LA?qW zW>e`P;QDVmw`z4QDCOKet6vWhsLB4GR{dGZ00x^;z0u>CCpZ%{S4R#VN%Q%SE$}*O z2$Q-o=qSy@LuX6C?As;;+kI6<2GKXOZL zqd1=*KObKStj}&LEy!`1p6PX5*j1e3ckMki_ylt*twYi+{I^fsFxRj_>mTu2i$ndm zDZekaq{5`464OWPX97QGPIRt2BZo(nob)h6=g%as{?U!NM8=)ts6eY&8H3j zVkVa#^k^$b$CJ;DiP4j=_p%s%Q~7msuU={VoZ_!O={hpK*+H=^%AZ4cXJuXMHiNy(VjiQGk3t=h`QXU?k3;X?w&`>+yyCMC;}B~+{;k;z41H!8 zh@P` zd9ox?1uiC8z)6rNdoGBTqTNjr-?6GV`)j}c&iD!8<>PEcSfKyw6{aC(I_UF#yxKJ<#;k|>rff?CXEgm*mY*Fj=@vrI)Ht#l2ZDuznqnA1uoonK z+w!#KOQj}RI!c4ns7 zb>#Xv_u0vB%sHU8@I3gP=gXv}N0_V-_wmRZusxACnLN$7zsoWYQ&$3m8WNj1`SL5f znpyb?NFlf7Wf?C2fRYtb{6>nIsV{Bcqw*F*t<7doH+uI>YGogt9#Xsc>BVY^jMUHG zL{e6WJ$+dP8(Cw~S(;jt!yAjGk^!w$FaDj{JpvukcH2|TcS!v0~ zEhgySt~jC|Aw0N6qfWcQqh@!rB%VlaL;Gol^XE69mxrE3lZ6L{*Fz=bhS%#SQ^~OQ zcnW>yKInG)lmf?dK~!O(;XxBOb83>IV9G0{6pAk(1#+EZ)7fEk?r%W!WEr90_KLlT zJFUjN8~i|tp^BRTX~{4GOO0H*&S^Ff%U={5rUsWdT}Rx%E@lsWVvE^Q^Q=v_(Oz!t zj|2#hOuN`do?S56+pnOOO_oeQnm~%fm7^l8wbUC(!q`c&YftF}lSEfhmiKE55;1W) zq1E3kejd;=QT`|pqYV*e7+@K2spQ+^#!A4n?m^8BX#I)LWdp&lg9=x#Gt-bqciS%MK zSd9VDo22JarmNVaJ=*dmS^H@Cr-o1leZj+E*Lu{fm%OUk)__gwn^2qPkfCzRkG-~o zF6s(du6smX{DnJJTnl<_y52g^pyz_79ZZsJun*@~1Uk3K7~BZ^2H(3*4ig8;P4gHZ zYw`a+jq7p0X*NQY?YX3tqC2Y6ID(!iwcva*yn>hj*Q;(iWxdCLicud&0iMjJo&`mK zm1k~(C9HhQqF$i;?~|*Dr>@!L0_o4xQE8Tqsr3EJWqxxQ(^VS+9}%c(X<<7D>HQ&# z?EaPhKi#z|=|=McWH;CY=eVBEb7crT?$wQJpTZ6k`Fz)h^^W*2BD!Z^GpfjK)V&%S zHE%eh19!a()@oTIBrh60B(nxPV8L-iHxM$-!H%CQLFO=BY}OHxzr=MI?iL-T<$hQN z1-C)s7vejNed*rkW`Kx)8rtu!l=Wq>>|&rrEpqxO*99uF%92w?bT;4x18A0GwMud* zCz+{eg~}2!|A(=22o{Bhy6m;ywQbwBZQHhO+qP}nwr$%+f8AAok9yFvWS**2cFx+1 zX67@JI4k)XLtsQA>q~uv0~Fe!?8kZT!i0%(L%?6m@D<%%0pjg=@ijMjijzN2#l{y z`M!CuXuQJ)UT&_i!Gd6b?TOzf*qANsW9hd%r|cnlqR3~NsacT~W66<_aRTgL;vU&O;p%n~Fj>LEbaWekbc4CE6*Rrxfw=cZ z%uQKE(%#Bb4<$ef+&KeVNNTLcwwfYxUmRvS#)qq&2dwQ3R+^x6an2adz_YCI15LxI z-7MzhU2{`n+Tujw9IN_xdr_rcmmYJX>S>54Z<{JJFJ2z#>fE9c6){lHp_s+=LCZdB zqk!Uq!B3YZ*fL`T46N&JP;k~jHG2nV$4~>%NF1}XtZJ{gJ9o_adi&xHz1{c{?!{6Z z>n$fjp?jxBH>jD85e3=8QC#qayA6z3Eb`UCVBa6K_{j#%fh zAQ%XZA{XQ0ve_LijAPdfk*&q*n70L(O<1jC6##szPJUR6Rg2ET*FF;p+l@LX>wThf zA8{V-%FA4qajwU1K-{nqABOsi zI;Q_eYb~m?uCiqAB^rT)GaEkV5`wu>--6nF9WB&x>g>dNzLcI*$XigoXUB^zw`*X= zi3%4#5Jj}f`x^mWN&awTKIf!Gcj1Dr!9U?dU>0Rzvy+F6F4nDKD-A4n9gT?!4aGCY z3lj}mhq9)ORiHvrrO7$mi-A2q(tgCzOQGb|Ow4bM`502vZf&C$d{lk~5NZwgd~Tv?BTs;6e#Jz!(IqFF z2$gt=%b&e04h6i>YA>&Wsv9}3(eNw6H#X82X>vnP^5|xl78)xXOhXO?4964V#|#jA zW3W(@ng4K@x@a0A*Px zG{X&QiO;6Qt_#p#4c24IGlUJq{pvk*>7CO+bE&5!CLdKWKab|85bayc5RuJbTGret zR@Y`=>(NoEQPH#u=7zlNVU>3{DBGKs!3iv@6<0`DbD8B3uRHpKX-5KbJl3X3ZXYj( z!`>AnS;^kf%rZ2rYqg-@I2EX@H_=HeF8z&|>7XaLc4NGx^dj+RHqeY}^8o9y;H>jS zz2>4wk4#obU|;4mT|PofQo#W zlbW8ifOry8I8wnbW>9PdhfU#qTcYH6SP(fi^EB48L=g`!K03NpNy_gyC^9Z3lsM}b1LZ4TNai?bPc!#-s^UC_E*aYrF#M#3Q4nCh^eaL zd^BBcj+M=F5i1eduxsN}Uc_Nssj?0`sa>evjC`v(T*;$4!Zi2}B`&{Hl*Fe$6Xbx# z2Yks>VWPt^!J4qhnVa`dzv};7NQgim<2WUGWK~KO|(_L z!Qg^yN`Y(#bo_j9=hgMh#0!n-;8r%5X_|>!8#Vnv#3tES9fVuo9{m%gexB8+FZu|t zUGI&*WPh6RbfYV*cxHd9rk0?$-IjK?0AUP7C+-!3?rujW?ub}v!`7s*Q@}y))DjF4 zUQRe+o5${`Q5`mxNv%s5z_itOyH%{VmR4$NrgsXDR%%IAImOw8EU*tE4xfSkn{K&w zJtdq?RcZOl5wGGU@>lU#E7l0sr6yDWojI!Ab;E66_IL z*(l`-C!6GcaW1GhR~k?WVP)Ir_6DM6)$c!$34!owjV1G^_Hsa7CHrNK1lr!?I5EMV z0f08INS`L{*?@kVBs34NRy*q}XU9|k8ZpR@mWP%?R6h*!OaV~S+R>{&QxrtH-G8qstdc35ikJgQ39ZOzUD+Y|CaLq9fa0u72u(-HS2pcbVZ~ z<45YKRdf^=*gT5p_uVH1vhT5SGe>_2g&S$tr~q7ZOJIV;Wfo(ibuW{L?cbAEF&2@y z5tTS6utJUCy#rdkIlQ6ol?6M|S}bixYi@rLU_4BguLx&xYtw*11LYioHbpsXf*g{> zCVO!py$mcVdn@lCIiO;hh&!4umn$v+p5&wfIAm7!w%Plr(go87$B`A5O`ke@)6%${ z%Z60r#Dq1SnZ+08&Y+KnPwBh3BS5UHy%T)XyEjxV#a5eLYksppy!p=bYrzo*gEF0N z@QG3v_8BZriMyU6BYc~XwH(N%oGnB1?KHfR=L;Gu^cDu*tI4`T&RiaJ^RJbH)Opi? z)*VP~s`9iR$n(b>%(M-u#|PCv$QDfnn?l>G??+Dci9Aa4*O849PebZH-T}XC*LL7g zrrp+vSKt^_1RPq%v^uomGVkUwam~^WknG4=2TmH`Wv-knlRW5-*B0*Lt*CImHx#T# zq65Xrha8b5Ik<`G2YLse6$3=*61*80$%{tH{KvUk*Fr4SimD=obCXui@o70aPISFh zHj$ct)|vYp5f&u5AhDYD?b&-`J|mi&qOV$9oHyAf<8GDTw<8!4uo7Bx%<(4SL>G^B z8sN#M>T1`Q5mloo7Nhd%XaarA;x~bi3PesYFu1C5;dSk(n*tOIFD$pO5-YKO;_%4+ zIX(@kS?imhazBfKE;L+1VizrqV|qMTEZUoC&IvRPULkX>j4L%*`|K~|QJs8I7fKCuAb4O_~B+RJ7WYEgi?7~-88;Fz?TX0T-!WOIN*7=pegV)!Z4 zV>mV(YAU%F&N@%o&Xx%+6wE@~k_aIT4|bHwb(64XVjLsD#7=EDPz24Vx-drr)ZmGt z0d4|-10xD(sC}|a%)L20K-jZrc3)yG2G_rPhX99BOyKMsHMq9c>c~fXkrl6zV2Qj6 zb&WKPI))}jPkRA;g9lT+JGGeB3U|coXKG|Xd`5qz2sm=$L7=`FB{O9&(4x!Feu1r?rON>G zsb-%dKO`cI*!C`|dobIff;=8vX3Df$>i9(xDAHFI`4NSrqX+Gje63bn5w0&}g{3uQ z2AHuH!?fynf0j^)lmAb3#Re#jR!elVKebo@Z5FwM2rM`t4w~$p`J(K41Rr^Z@Du%y zjg6oS^he?e{0(ib=L`9txj+ZPh3ttfL7xEo*#zevv`EP6kXJzVplD8`qJkV8#~uia z^$&qCQt1Ir1o@j1gPC!|7e$hzLawoSI-l(}6@AOr9iB4% z*_L5tp^w|qcsuvQxJ#cn#$PS2bepPPUL&hr1rm&OmLJO zCVGaMVFx#I5|p3{r2#kdQaLJH?lI&Eq2KfYj6+vL1ys?#?$$3tD0XjKzKjRxklpv! zi^vw)UIEeJ?a>x8Nb@l_+)^%Q8P8mcZ21$kSngP7FO<&rsk5@MU7ClI=AnNTL9+oAJ6Mc>R;;)7;?|%GAuB8Mg*fT zeC>PLX_-mqg5IBSu=w{%=vB%smLBSkBU5BtQyjXUz8@`CuR|3pBqzUh>a z4iNtz3^dFCn}Pnn&@&@GBRxAC{r@1*{~^==v&3g)VEg}OpsPELoK1C_NwBwEbJzcm zPPNQ%t74s%QkJszzx`R&TaVAzYx_>$=M|n=bkmxqS8d1YwpX0fEW5FAB&D-pDeS1} zA?$0dv-ETHHUNtWj0lmI7LgJaxCW;QI2TdB9upQcMn-s3MnY9eP)~V66$Tss&@?i> zrRjfEEEv6mgTp{PpfEOePj(G8wGLpiA49phx%uDJqZ~y4`V}9KpIN86#yar$-)?)> z1}FPw#zxm~$a`OIxuGeTeG4;iy4FS}pfECWOYt!YKr-T^B>*Io7n2#0mVaSZLrn@K z|LWxM^zKMBl>Y5Lbp1~pVE^#I?(${cqW1ZpA!G+YGyrX^DXFSoS%ybuI>+x(At-w$ z$CgG%`*#nxddGjfRm`={-)sL0puUNn;g#v<|Hh!5!u%jPIJv%K>c6hO{*|8ZA6^;JMXE)NXf-6TOGf!z3I`5nN|5&w0Ed)XnmsrYx*~3gd{Xo)MP|W>81Cr|2d!aU4nem ztzdC*ZhHQ3Z5`~D|4j@`u8d5tX5)rNeAvk%t@U-#R9_pQ|7uVwzMjGYkdFSw& z{l`J?v3%;WKK$+deD4*E>{#2J#9UAR=77AT_lBQeraGqVj6$ z^ZebC1i(QeI`Vs}(A3OWU;kTjZ~e2+*vR^IyY(aaOydYjuFTBr#+>={E&atRdsp*P zQ=uE{TmBWJaD*-WbGnC%tgjCu>ko^K$id+so1S=dn_^%BY**L#{)NN%12z1tYsgNh zYDyvFKeOA2mi|NiHIbAJ?!_kd0i_HUHTn;PpL2pIwu`pEwb@wG!{s|e+I__gPhYiAbp4w-cV=?ru zMKf+2Xx_kBfpa5ENq&*y!@n={ZD1GD;Zp)lY)1ntOyK1pe9tOo8!d7pU;!>zM$5@b zBFp3EQ-F?%f&RPg0lnkvFZsZLlNmJ%zR2?wO+LIdIscwFegyqJolU(r%pRXFQCLX0 z@Il!UH*C1Eg6%|tWeVsiDO99GTpKBz&ZDv0lM|p%lH+)5GfRS&;i(uLcLJ?n4{3U3 zq-Al+2Q3#US$i?tn#avfq^2{h++}mhj7TgO!Hn=#;u3RugE5S?`)AdsL!Ic=FU@^K zq7rNxf>ruFet=YtLif?Z+H_7-rreUiZP@wm1uH*Wd=0XxbW{bitU$oieycwPjCz#$ z%743Y*}^O_oN59Z@pT`AJ6!U=oT;WwrOCG&t7p~OhEN>uA1dr!2s!7)^P{HHzpT9u zwpV$tErRz%9n_f%iGQL+3yJ*fXi3!?TUEM*4_$WLtux~vWXw8Z&CBLeIT^s4`GfPd z5UaAX>A3{Qkp1cdVH-Z9!MWi>1fu;wc!!a9i0b6fPt0K7glT-Q*Nd8k0KKqP$>UvRSUOaogCn}n}OrAw~+|DNy_U0`9i;S89Dy1E{!73&&KDLgUn@~b08 zpe2;Zwger*Oc~itB(G}j#bVZKtLJ=Rf&Md68@quoTkjO3SQNa~kgCpvxsk6@(L9Z^ zKQq|hRzHl^vBfO5xkNne9rbmDJ5m#h z?SqmK8sF@KX`^=yz!Z;M`yfq7sC)`NZSI@p-5X3ViNZw(xy)zCc~u z1J$q`B*ndcS8qWoV7N6)PcI|LQ$w+I-F=JpEITqjU0JFR05`@- zscmb*5Bi&AtyBfhFEds47G`mF?refjE*fPFW++eh&hqTLZv`IZAO~7>(piSZt2M)< z02tXBLLmJka=(y3>@WYfI>l6t&wx|dK60rJK3q7+YdHK1A@q#*_n2(s)&U3cNg9<8 zX2KG)T=yiSJc-?9{_#{Au^3Ybru#GcMigteojAM7b2p(+4>99}VsXvUEFiFHO2lmr zw?pao-7M?O(pcr%_~{6NndoACMay%7B!7NM-JL+BJ<2A01t1+Zap#FhT%Y#xi3;@dYx~D*#OT%>W9I&;wG`ZG&&3Cm>0NMHcH@| zAO4r@$;51ty_fgui4SdzO|kO*v3z?F`geMjg`wF>VGvs!ZaxLdj35eXhIl30xvi!T@vQh9G`Te z0^7v2+XQF*<#Y~mm^t14%LPYfDSSw49BWe#?}azj6A#1!3hHA_!Ie zMn~B(oaJ;zXOD2Hx$HctZHVrZW0u#*Ctddzqpjp4AyW0W)rHPC4^dUsUClK7?n_vCG(dX>kwC#Pq7a zYk%HTAe*IgU?ii;t%bWjzjOP*7HI5&MF^9ea~|AWToAzrgg94YNSz*HSagA#i71@B zQ`q6E-+<0njzf6xSPB{^cR5~}&T5(I1m0^E|E@+ZE2c{+Nil;bn<~}paq2tVnJExwnb646S}_j}Om9?TG->p+kT(iPY?sRD{9Yv`q7m1mEYLrv zDl_qK_&hDHeJZjABQgK3As_Y4Z7t~Z_#{YEPOEl3p`XJV+3CV`iTfE#*< zpwl`~e+j)VESNNUN|k9@2NLD>)_ zC(pupO6K%Rc4-C@6))Jsr?q`DzLrC^^LyZ&Z3#Y$Tj7E)to2hs$Wl7AwS>)$=1lw7 z>XKCs9!b#-EMyYbM8WFxZG2mt%8OO*UtSoz9%_}>S=`aTDE!vyNTx4cyPrlI}+&CzJ{ zVtDIfQ*rw+d&${n7NtR34*PO~MGQOEEB5vvFUG=Eo3@eO(@XDEPY>lWxWp1!0)9HG zORw=BSUUO3PlAFl&2BEOPsCm0Ov-}q{b_|!sD+IY>(!~;G`W8^y`MMq;~Y9@NK|zU z6I<#qNE9`|c5b~RDklinkZlRY1E~*HIv355nr(}~H8fMDaN}+=pSxcdfj-pO-`)M9wSJtz*U}~m&-lIXs+$_jYJ5Ld=1pr^lcAMq6 z*XW(AisHy5Wg=lR#P-s*A^%+n^HqkE9JK3PH~ua`gY_t*3)=9QOz-nq@f{$0jSBoY za9xf)l-s9YxdScSuQu;wb^#xnWpW~Cj+}Y!y70RcZ>Z6UjdY; z81sA}^*V#_I@5qnM5~yL>mKC$;s@+iyV4hYIkUiPf?Sjb*S=2C)*`*;^h8$O*v_Hi zEhZLV{|y|RbGvBjn!DY>_%!b4P*ny^tbTzX-f45UiYFi4$FtiCI2ysO&yG^14ytqz zK(u(2{CP%_7Mah3!M(9v#d~Yx@y`~9QCA!6tFGeIThd)*I4YW#SN73f6(WwG)xv4G z8XqNIu1**+B*tLX>a9gh;K!CLFsrm^E$8BbIS6SL_cmH7 zp>83dlpFwAhsFHUJ~6fILB8UZ)2=Zht0i0Bq;g!wH#UGReC@Vy<#@MzOfiN8LS_R` zLkNucL7LHA&%p5;=rrV8EH?fZV2uaUUaaG3MAna1>c!wGqueodCo}#1VA%I4I>MxX z0F8)i^4BsSR;Zc^8tq5t?%D;SCn(}R?)AI~eq*+qDon^em3G+(lg$SFFO{?D#xt?s zWz;E>-Hun|0BmxHExX0ZOU;{3aL%)k*ZJW2^oU3H*gSTG$%rQmA?aTD>I8S(g@>p2 zaEcFV=T}3^v@rl=+vx;g-fJR2-{ehu0qAyE)Q;sf~y z(sqF;1M(+3&;?P3Ch2vE@Vqq1(k1Q9(<;>{W2Y|o@`Q+1AH7weV{YRv3MKu@cf>^s z)?%+%AWvCT^bG}<>4RmpPZedU!ykT>TmFpyRnYEmB!*fa!z;Gv`@ekEL^TFqO2Mpx z=!-Siu;|s>z#XZt>Dy!qewS-nobOCo7L(fHdsPbc>TrGo)IEeUt8)?Sd#Heb?$M?2 zy#EhuW+(Fk!fUa~LiU4Jnf(FcifiId9P^x-h1_>s0vO^N`T_tHLoN1+?uS8vGMPH z`0Ki@5#37b44QXLz@ZXVU6GiEJLB!en26i$yrT-9wC0kf zmesz|yOiU6x&2qa9RjFBo{(4nAitZE#95JHm#AgNfW5tkb|N@1X}DgD0b~#5`HEhQ zjA(4n%-80Yd<&Ih9)4;!#{AJB+|2zhSIz^vk$e;d%E5aXi9UOq?f8aUZe3uPf2jmx8=CTft4Qf;}IsYEEH@Y ztfajX{wma-U*e&pIV=oVx=x0JWi^I_Cor|9vA#Gkb2Xy77UaU2UPW2l%XUGA&uoyF zsP9hOKDHPhHlFBqCz9x}AOG5XCyIbF2a;OZmQHbfCjeH1!$&hk^pf;4pV3mcAey5p!e?GHAuJ6_5ObZgrFDz(^bn6_X}GY+3dp0Twxc1ksxu zeeMRG`frl~OGz6AN75XScATMBSMG89mE9-TykRs;IYw#CrAte(t#Y0+CCA#Wm-;Tq z&#CKX++}oVR^&3y@pnxZ9ZhagYA=}hontWL62`jYI@sAF-l!Vg_7&$PmS}LOW2j9= z(?%7ht%}h2=>7sISZx``bomKdXBVH`*+rdf2F{7K7kuEj1L@z1pp9ZepdTgrLch&K z-7Yn&RiQ&LdrbGX4_DwHB=HN)!_m7ze2(kKr=ujeHZgzxN&{Q?&6Ua=>>ZjP{;8C= zGrV_6m6aN>y`i~yKBn$Y_>?(1MhAlHc*>!h5rPWjMx+BH6H%3yvkSt&+u3=+VGy z1WGqq`1QGftDYk2$pBBg3B6Ll&K7SU}5oNen+s=pU< zB!pcimcXyZC0Qulqo`Ma5z}Ooix6i_4~wHtk$jp#uUjsrd3g6>1NYo$SGX|Dk*~m-ZPSGc$Ej&izZS`A zNWe|gOHO`GwqS_wS8Lt>7nLT2ctv++BC4jut#=v*jf+!-idO%vNnd>5gk>Le5Pyq@ z-K;M8HuJob3EJ>@$Vmwum86(jx;rozyJDx`uqOoWiTe4%4TizF%bj1hat`mT)Ap<@ zG3G9doE{2t586Le000FKaTR|5PL>22))?UM$zKsvgk_79ZcgY!m&7y%DbgqDYu^wN zTZaJ-5<%<(55^$a&B)X2MkD`8O45T{;2`FJp13^KtKmIw*P)C|2&8f3j);NPvE?$w z3{Zs*_>m`}swp(8a<39_)lO;wwc#M85Ixnyb}7)* za2slX4m5a)<|bBHibnZS2DP0m`}pL*wp?c+pd${Mar#_g%N0J&rHDDWCH)BfgH9$o zPZIWo5<>j1s^J6(ul5*JB6#mcF}pn2r1^Rvnf2jZmBXUcbDV?e$(>fl+*96zTvetU zW#KR&SPYVj#YK66o!~=S!U(xkpz~K`04xCpCm9ffz;=th@FMLs9XAOht6}SuSc1b9 zMHSs8jIXOzivW(J@m8zb7l>=%`6ox#Ju7!3@8Ho@2q%p+k+VknmbCZ3_GUcl)o`zt*N4bLo9!JUhZ&{Ri9Kc>Qi;1}sG|C< z87CsE_P#Gx2vuUpks0^zs#WfW@aM-12KSmoC>TMhe01#((oA$qdCXpi5*m2kw(k+T zI_>DZtUk9ZpPN*imi5jN{>iH5n%Urp2OMXA%ErgfrS876xl!21)Qa(UweL@&b0CC>A&v114fZ0X$Jd>}=?gLDNzOlI|a4b)&qvUo3WWo{)$o`UMqCkLT|rkY5*eFZ$X`l>5N>>MUeE(6{N_#Pph{6|7NB<#FosO8!`XX zRfj2~nmF}RaIEA(U*b%s09ZR``TYd#h5=d!ET|c3gSAhR1Imtl&Y3RH zHin{>WxHMqk6+r*caLpq+mPvT!0UL6Y^HZ_aYJ8qGZbxIXUn3U0Ti}|SC=)Ljn_`w zpy954Ojx0P`~vFJ@aQXif_?!~0dmjJWUx$ezy)y;VC?l%`ORVl@{_@=c$& zOGqSNV(~oavwpT*_>u)1{Hz{tqGA)@9D-3PKBzZKf@0gk6~R>?AThze?zU}s zKtTbM&wW(Cv5h7=#6r!HtN)R^lb$pNgknb=gWeL4QGfk6ss{P|ZW3)VsC_CBo9k1!@2kTRWd}iHiZ? z1?5tDS)D}Me?M|3dnZ%6#F3{z7)oX^CM$u^^Xf!}lVTk=jqbxI5@IH(x37utpofQu zGD!aW?Yw(@ecjVbihJ%e)uSl4PganPNI_o$8ME<0fw~Jz@(f!WOF}Frs2^q|mbXqO zP=C1f1l$ecJR8gGm`>a^zOIcL^EwprGS3ErG2PY(0|lirEY#-*v-HGM(H$;8Uka9z zP19fuUsn0RVR(`JK5OcA=Wp(aDCpaOH`B&YcvAj>g1JXqN#()5jy)|=yg|nuZi^-P z1GojOC!!?ttIMYu`%cW1O=I<`(w|s$<~3ky*g#)g|L1?>4MQ3)(M-G!O&CJ`&~-O= zJ3c+%Z>6MogtG$hRzsBFJNVTcsG4w$TVl&&I9iG)Pvq-&+?kh*jq1F#z@Xd{-Agcw z?iyV62>xBRbSEUyYDha0w-6H=%ux8OFQRa9{eo937u*XUa7)~1Pu-THl0~e+RAKoe zX_t~#Go6%g4X0HG*CPt*h;UrgCm%Nvh_+J+ zQqgOMGF#=!-CK{N0Cog4o;K~RgfUq~Z+CucLx$<^PHBfb@K;`JEl#ZSiYg@YY*GE~ zD^&#P14dx216Z7OC9LFhTD}TLK*#w8MwM5m4();6VflC!7vYnV6N^8}G0y*7*_lbx z17Uz@yDa3Al3x9IG@=>pQ81pr41Se=Uqu5<<`MPoY6A9Dcrqa?2o_hd(Mi9G?e&5nuvaokJZx`Iop((-80A zjyS`;mqPCAg5cF`n9lq0xuS^6ClNk+UQ50+!uC!2nL6-s$F9C5|IB-Bx7uigD~Pl( zy9{89xXt`%;~YHlu-EPI76n@j^gw^AKPjUs#If;@*YpN+n#)N^6dLc&_9g{ za~Kb+HzrBD#`*5PDiOwvJ;iFmJ&Ts+7ht}&R>Y_++jg~?u35L^EpA|uuS9qrFO=7} zUZE9Rz}j6Xqwqg~QefCW3ES7{@1kbGstm{;@8ebq@K55tXJ{K@NLo526uR4#A#IX5 zj-B#(0|dD!9*l$pLyVJCMN(^o-T-tGA{N||Q2p3>#1md;^YxJ`I7#1HkUZk2Cv+!+ zLuLysDe)^K%kqz|jktDYNu}W}e!C4Zc>2L?NyqyJm5a&Zby;Zf**p@@0rc7oe??UsaPSVyGSilcfzK6Aja{=l=rx9h7t zgolk9d5PZdK9EQ5w1w#2?!V8aGmqE}Tbuo;c|6GMBtOw9ZI-tR`D*baUo+xyYBC~e zEG*t-xBx{nfDElqV4X;w!Cn3XNR-;0!r+1skemGOPwwf}s}zcsSOr~OtfM}BOle}L zMUZ{P&$7LpG_razCKUz(nePRBz`?6thbg+D7{(#sPiyQ-U$s``Zq){H2lLwLajeZ2 zPT-knb^sS@(Ann!)=Tvqb&dp5*XaL@U$uWdV2pyYSJ+4$VLoD5PnIXc_R#}Q%opWsf7s9$1|z494(U7Yq5GSk`7z|bu?C$gw6U%sE#+Lo|7?~b<$rX4 zfDYp4vqr(u^bZjnGzj0lvno)PYMB%(DD=!kRjYa#!y}xyo-k6E$Tfv2#s*15n3(w; zlto&Cy1O~AiCn2gM$ZF~Q)`B1-ZQ_E_%d6^ACOB|s?cu0U^HP3_ZO+Kx}* zl=w+0lx)Vn-syp zo=s*PPkE`$n3}DN`Pwl3V0yRJJLk8kXI}qo5VjAQaTv;GCA8VC7$W)2T z=|8Rd)m>#zK@IPS?Avz`Aqu+`9RE>-rnC_-DpwWIDqzMC8gB4AaXx3ac!)3-@b#?2 zALeS8?clF9xdXPN`#CA6m+Y!X-pB7huS%#p*%T!Z6|epCk7fpJ9GY)3cbDzbP`3FO z*0`*yb(J+cN7hgfkLy$I@Et=@EBal^KAnre-xqjO%&p+i*q`d)iEwowhg%*YW9k>q zWF;L19ir7{ssEzf8l~?!Wj1EeiH2mNH`NzGEE#7mA|b_q`$7?F0guzPUmYqhHR6Tr z-wn_rA!BtOIJ^I~GG6bXBq+jaNk2LCuDEZiL#YU+t|Jzd$a*V~4J(sGA+L)u;|=#I z;yOFH^7s_n0uxajqC?&LpSqYFjnMtu;isTRJa#fO8~c8jBZ(k@)45A=YFi%7RMwIc zsJQB<8qq7TYN&P~q!QsMg`@9WdJP=x^nn`{ds$9_3{By&=gWRtrw@uX8_L&VRbPA} zpe$1yoT-hI$2E)^d3;e+N0Ab{=}?;WQ3fOVAG1sVY3m<~vRz`^li_>4J30DhoL(y% z$~|_LelACXl8Zo_0uV`C(tqJD6apy;-ViL+f5&Er>Q)?sOy(ZxpQGP~SGFA_tLkb{ z9|aSXK_-zTeDQML+m83s*>ZUy<*#k-1UKRyyH$~yP`}OZzWZ=E;>;%dt*zb<-C^C3 zL#n;Op0@(W17H-N&VnvKT+43Zoafki*HuArF8Y>Lzk_w-QOfS4VhRB7$VvyhLg1Sk z|GO9|*x6gv!L&EM6^SmXyxyYzpHvGv_wM*@$3NnMepESiBJycjSt8(HU-8Q7wLe5dDtP$&s zogF9?C07|C4!;~dbYEYqf6f^!iOQ8J-|o72CGBzxTF)0-ru7wi|ERG)S0a+ zK$U$Sz2f42Qblsr<+%@aAx%LP#M2uMVneiT--0}$*%<8)Q7W2a`f(cZHLZx`hs>6? zsUZ;fW*F%P$}`WRIYB9dR0{=^2pK4f2<+sHak!O3kxFWy48Py2Gy7qsRRxt=`OI6V zWAPsNw-z;N{96zJk4^pY?P7}pMAv^aIj80BDY}U{xOpO*L}J&I0C@xUgQ%4{ZwKuF zH%p?i-d#@ANJcW|9(0&PSofKX28j}%0~!P9PP*{9ENSv*_w!1r^`!d7CcCEMEOpz4=X666xuRsSi7QzxT4?em zU_R}ZF@`v?uNKwIc*T72C}}(8%)X8BF<|8fC-E_k={*GFMDAd6!N5wQ%>F~QV?>)h zNRwfmGfVBOc)M~G-0YUK#eIrDp&*jTx@&zsI&QmmJ>@h)L8J~Bf_Ok7hg&TkH z{sz72PJkB;#9^MTu}EXdZ{nU1F%Yt$L7DGAVvPw^*Sh`rG@_WIqAwj}cjDVrgsQA7 zYR6T7%7zVqe7aA`q;?B9o_;g{(;@&Mm0F)D?K;S>+M8+S~bM}&OhIC;!>CK+G`ajULb zSpUbodEizTrc=~@G82@V{)-gW5=!1TNcqFASKF&%aR%rrH)pM;Dim ztIn9IRQfDCMW%-}fsk5cbb#-(zxNFYcJtOWE3$Mj(px@=IgyM9f13@l0su_ zbRJnfjBc?{`$`V0h~kU1$Cp zw|4YW4r1`3of8_Ta<>o4ptg)9_|5rj7(q;r(*h?>#O!y>PDy97lA@9)FF( z3Ku*#vg*7gA(bz=;Ppi^h2wnaNt4lqH~dRzf5ia2ppH$U|CTN0bfAaOVX=N3K$p|O(V6UB{G!q@LHg( z!4y6Yo~d3h-m~ehSNH?f?$nHct;v>tGL5GG9R2=M+kX*ZS}J|S!e{k_k{NYlXoIyd zgPYGwtx^0u)mWPR5E{p7)uJz40Oa99#KOMI_hx~`m@Dw-aYQ*+9~?^MfKB<1@zcsN ze~i$*sqpRt%ovUcz1%adk>UyBfYMJu3jg9I$|UM_h&mmErzG&N<& z69dwPb%;q`PEV|Jd8_jJEsQm}4Ww}Lfd0R%=HL`Lj2{{B%iU-+^B<)hRas=QY4W8i z+r+g_+`&u0fJc{j-GyTei;^>=^7;+_nuN`HLAo?g1u}%(#A|DSS zT2P~LG+I6iC^Y;@b}m|323Nk5lI=>(KrZ(PA92ndc!*+$d$ILd-QU5JO+#)~)s-Do z39Q&R8K8&%8d)D@L=zYx{;o0q-8TH&ybc;KTU7iq)Q$R zQ-6>!C?pw#iQ2cWfv-7c<`$N4aFh}$`{0pL0*iLsJ0uJVs2tX~5C(~D8)i%=I-jcx z>JMA$=#IE`?@DZl*(%x>{Lsn7TXgL=1Cn~>l@~aF}Y)ZRC!2I_PHw8%WL@nDf13jxs%af+(mF2?Zd@_^wjiLqdICb zgxSGm>Zm81ipHlN&~%RxiH$#JWdYiLnrK`cW&dBVd(CzboaNM!xf4h9|6=PLn{(l! zEgRc*a$@_$wr$(ClM~yvZQHi(C$^3IR#$abf4J*6?5b6@=Ne;<#b4%gC8V~z#y9b3 z+}ATe!~$%kVp-5to7hY3dlvM$I;p3EnQP_Diot-IR}+oNb4-POT|! zsNufZ0Bg?@TTMCX;lij??=6F(2&zdt>IHH4y(X$%E=4m?} zs|~WXtg5vjFg01#)(qD48~dXXs=WnFy7tE+`U1f-e4ueAd=Ag!aE1JCLBwEe7$GO=*5#=7EJ>L>_|W$TlG3t3~>i z*P-hLfCa%y_99F^%&Ae?pcijkzP3pzWxRO@NDE9{HEcE%vn~;@Gog7Yyiz}N4TX50 z-!IowDR(?i#WY?`!o#qapkPa%Ubl{RosOMEsM6NB6Bq{Mvc26%!o?aw?(W+Y<)y*I zi`$f5z<Q zJT;EeQKWBFQGIE~36>5)o#b(t!N(XY&!r$|=^-Tl;xDPa#gzR^vKi@q!|2+8e5^IQ z-1D5k%;4YCt-{XFPm3QBF~OdyC?dO)sj}u!9A{3=5{I#SJD4!WF6RQ-bH1XuvDv&` zoyCp8)1v_{D%DBHiM1F5QbNdU+qP(hCp(;*iv#eU-3cNwc@~&$)Ronlh|jZ|#-NnX z_3-NlwhFfoE0mlmnis6hY^GFS1wjfASp0iQa_4x=>e3!dU|se}K;aW>u;nLz#SAag zFtG#``3L$H3nC&cYEfq{yMMpfVq;!{7AgxsnCP8Qsp?O|<75gV(T&Fj)#&Ap-mRU- zb3!8olHIZ=zJ6h6rTw@cE{LzOc||R)1=*V+wajy9MDmy6e&}g;kBZbz3s&w8CF!*{ zt+wvKFBuBK*snywpfTW!J2oZBMph#Di*kH(1tPaL}ci zx0BtPHW^Gys0MufB@sUUkBQc%Tjs9Of0irx?wdH}nZ4C^S zRCI1FGj=ufo!b-!UgYT!t zuYMo{OGg}4v=tGy#H*aV7 z#H6elf*VQBHn(iVm{h^;dHTRQQh{MWvoEl+vaFi$P9?G=LBIT*tg7jZo zv4O_7K~}UxBir1F{ zq1N0{qbsjIMr=8iQId*v9v9T8z?uoAcD0N15!SS$peq1R@y187Mz}$S#|93){6dFVHpg>U%t^3^BLA7wY}jhFu!~- z-$mt$=!V$qY;@b&zujoh+2bkO%*1^y#hg0FQ%^uuffG@vMFJ(A7NBDoJ0E~-w>V8j zaLGkyP@f}`7*Q+^>rGCiFHevAmajB5&WrkpsR{aOTP67R%{rS*tj(=qmAc-hT=H-v zU=$BtVh`!w%)WWgkp7< ze;&h%oQs^HXKTMuFRXfQ>_%u6q-IHQ)d~4}W`8c<3I=qI+B!`gBKWFQ`g*oER8C$G z;hKY|*`wgj)aTHJnJ>=w{!?Avy87=unfZ#%EolYe3NupbMf|I6Uq!lHEBD_=%QCFBmCmzY-T`3+(dNr}aQ znQv`^<})AJ{Y8h^>VHb=m=+~bU*OFw`7_-h&vC^}{XXL2WORr_>3>u<;l7~qr0r2; zrV-(vrGg@UIxsz`HD#Srv?DU1B1oT@x~ED`Pa?Px)HkqE&hbX4g;bj;J5x7;kC`*Q zxCEY;bkw%sL==n2q-6Cm(rIL%pK}@Rv57WL@PhOyu4a|aP?;}Js9MKz|5|5 zJK9l}3-h2{34(-W_IqhuhR{$+08L6edJ$oIY$2?!V~uebPaBX!)T_lmtM&n5&}KLU zo%hk<^YoLH`Q6~D$qrFv8vP_|?W4t!er{V^6%e+xlmiM;&*xQHdOvD$PVMq50|)A% zIE!3)p<@!Ub_Ig$bYmbbaicMRTtC+Hu^v~6#UN{ESqqNS=>(Iy zwhNH$EFrN}2WB!RX>qfM?ATJtk*WLUy*JJ|K#Px7fY<-3eTc^gz-1ic7SH>=Y; z0|%TVQ#5WitvG_cZFvtvbEniCK^Hs0fA4K<9c2_xTDW;z)*WM@PzD+{?!DaD*bDLZ zxnK0Z)+k?%*#--PU>R?pEM8OXIS0nSGw^B71PDQ04dKC=^otw#vK+wse?u|7Z`^{N z_ppblPohL$T&apTc5BJ_oPduN&HBlT0G)h3Qvz~y0hN8u4m34Tl93iiFHb+N7IF6w zmTJ{wFbZHT$l!(!uYNz+fb?l5^P&opzl7Yf?Ty7>8zAyzQ8=s5=Iag-hK9(}Zb?0} zxU*1xx%M%JsBl{`Sf9eaT}QUZ398Xov>bhs@-IqHHIR8QB-U82^btA{m4b3(m9E|B z=(4(;g&9s~jdd_W?jK*YMEdS1^@q67vu!-~;BeU+p9srx(zpqTHVR17A**LQXst9q zE1w?qpTU|q`zZTH_UJ!_gl7(kwoxVj61!5uY=-bpIP3TAWxz%3!6T)cJc($Cb9!eb z5y{s2ixIH%+<<&{*pt#w#{gVo7T&BF@{ITI;*&tRny(q}{ddK3{9N>zCZvE=$pA0$ z7<_3c%(LvDQ3-C(k75&F26-G0SR;t<;$+7Dmcq1yuOvC>YDZf)WPNzPiJ_nFjPp3K z9&D+sFN*DakZQK7^IOK38FC_X-1CF5xl@TxA%l!=k-nfwV?TPj$sATdnO*ynKAc=u3Hm%dY$HTNZ0%ZY?(S8!H4 zCZ3J4ICreQ(j&^#JBfi#*&WZ0Y4+@!nR5{VZ20o7fo{gQlktYAO=A7Sff68UvzJeb zHnZgj)~3c_%+%{nfZY0-#(x=REevkpODbi zQ3yzVSn0p9pU@l(YiU%=J0+MzA((se3A?4hVI=jmdt9-fi7RTXNQRUAG%oena_;<> zlIX0ly>~6_W}s3Pw8J9i>Mg<%BS&(SaWddfT+xKFn|_AWR03MoBLBh#TqEc-m|nCG zzG6Anx_2DCj_Mb7|gud@``#nh(}5%I*6t>-@4lkmx{|k+JgrO5HWhiJWLFJ<5A0%7ne6h$TG*I zUmQe4M}os&OQ&1)ILACaB;H$ITZbnzq&y;$kxgH|%s{ z>$35Pogt{Cl%ntIV1k*<)r-(%yt|4Z%-g7_Ec%iZG=ZXie^!#u7!B~Y09TT-jWPX) z>97ygxHOGFu1r#+UoJ?zQ~oZown)bn*`53X(;%}>nT|<)({>FUM9XusKCH}(1-uam zBaVn)3$*VdAE?{AEhtL6p2jIrRqNu4a#~g%KKohHid8DilXM6W{8U7(QyrXcHWcv^g82Ow*_v?G`K#!)b6 zNF-H!9sz&%olMx;>}|H&w1f+(lh0y!=aU4FRY-?%k>AySPV8S^$+}56$CZS|h@zEC z%I~l-*-@)`UE+9+5L8jLk7Fw|=D4tj1Ff-BAu{nu_04YpjJ3ThDXjF~V?K$&tg>k5 zHm$BI+-_?r$&Q^-2Dv?K!7TNMx%m#Z9wvr&d9cnY-png;9zu4AyPOc*F?DXG2miGV zmPxT96|_ngu)|~HLqI9~JOGKG;zfYg%cdU- zRhLS#xa6;~H~&emEY!z#I-es!1?_9jAAW?yvG0`pR!VP8)cy-}(d7~O<)_Q2$5gL5 zP>iPjAIB}MXh?fIKzT$0jpps>s%SZ|GFZ8XkXrlDXSVVojJOD^ypb{%uzZs01VT}Z zPe$RTG@e}OMjN>BDdM7p5@wk0sa7rRfrdS&A5`spMMIvBbyn}HpU?do#BfVr5DFccBWIx#7%9_UIN{12`tTzg(%lv z>B0h;y{bj&RmJ_LN6uNSn*My3cseb3Z8lUAG;mhvt_5vTDQvl(O zgb#puYop-p-?>+%f7MfRP9}A1PuA(>{@`n9fZ)$(D3Nh##BXqOcn%h3E;;6gor0os zWb6Y&X!2l|h;x$Qu@&9L<7eH7da*Cz5^YXY+BC1gbV^7!4fmCMtMu~8KrUcd97&#T zm}*-7cQ*fLL!IRxk|Io)Q_|zF-G;zf(=?Un?bAK!9Tm11P5R~ z^QyVX^{k78X?sBgo`8h$y1nUv<(bsoZy;NCL^0AV6n)7nwZFK)9cs5iGZPF8uYkmn z&FD~Q>^jik386v|IKm%8f@N|M>PoKxeF3 z55(8DxH+j05)1zl*Pw%R%*Anu<&1)V9maVuiydkDryqay8u(#4B+9mlB6at@-sGOy zN9<@61!s`QupQ||aKbo=ISwxN@fQ+cU66d6EnVknG_d~fUy=9G`}SLi)dycY@u$yJ z5GWViAjD%jiIp~0>xsg?I(bqm9G9Z zF~sa>4XIn&oSRUt3)8KDJwFcLP3?%CVP2?FIUUiuB6i}LmKSN&Q67|kNqsw3h<~Nn zXcj*4f=iZD<_^jOfEt%>$6d2cS2Nc~*D6e?Gj&widb^Mk<-+wBhHCFs8FQGiz3y{I zYB9hT#UemAIJ{Vwo|Q*3mrk0h;I0tHLLa5)zB@5t{W;&@p`2yAqlY>L>!LH-E?RL~mwo1Sh+p+>zGYeMZQ%?2Xid|OdZ7|H|y~5Q#hADbHl1ET?bkmqavHDDQrClhBLxp&L z@C&%|PxtWdt|;c^c||>GCoI}+B6g2R3}6O%i`h6!qbD>XP|)sqW|Q-lmj6-9x@uX- z`+ulI5Fs?=ZaW8#kSk1h{6_^~PyqP=B;I#fzi19@_WC2t{%XVvaeNIZ(t$J{co%T# za*Vg1pZnPa6QLR2=D=^}OscCqWq8n7LnxMt;#TF%f016kFZxf_C8<5;4#g9S^;@@s z)*Sk275CFsoBh$!&gF@znQ~Oipmp=K7A14QoNG_~a>O6oxt^ovMK6@5%%wz0c zvc`>px)@I-=w@+`i5R2-tz;ioW+i?hb}m0XSRxM>sw8 zaUL6WBpxDk>%a^7j!R`V4LA_yi^-%`sMh{8noCod>XDsluDyg-O5JF-v$x{XJpSU4 zj~obfBEV0{x|>1D?=fowH`x2^7=PD9zxxTmTfXk87A#GTFSz>Zb>cA^OXiV21+MJ> zp6a>#eRCQ9j3__o2}47;u)VZJV{L*GL1^Vbva)r~J&*<-z^2R1)@gz)lJm`FzUKV} zTs2;^hWQ8+n@z495vecFEot~Jy>Y?ip&sc&#ALN#G~=RMgY zk-XX!q*4|`QU~VMpPsRhoe|A|1{(B{2~ZzZ72PE}c??k*H~KhQsRmf(()no^4Jfm7 zOI5|J9Ku)o{@7|&2X(xLIrc;I5y85p4xtfvc2Fj$NS!OG(kK@7==Z&~xY-@9 z=ePI=ohWN7;4N$F`zQ^jUKaQ1v8#pd=e`5uz$K4Fb(X^XWCDrGwmmtO18P5fZBTix z818+tLgpcPt^c?m@>Pa`O=(RQO<>M01RAU^*w$*&8};PJ9fS_oy=)Ze-%71|9wkoo zS0Z~-+?xrF2*kPe&(dckl0(|R?7(Ld@yu}xlkUhZxwBRHh!(UR-<(98XKf7%DJ2n$ zts7QZ^c6A16zC*$r9+a+}+zJQOLB;gvC`e_fY z*e&*h6T5KYscTpLB+KbL%S)>_YUYAh7IsEIid2EZw*tVQIJ#Z)=|E~38y!@j&t%Z6 zvB}ByipZ;$R+td^jQut7Ii#g+$$3jFVfB4ohN`LX&Z47Iq zT`YZ|d{c6}&A6ERzG=_n75p2z`ZLhO+lbDvr!Nk7H z+q5LW9v|S*i_(bUN6|Uheh!OAXZsG~B*z%}GNn2`Km<&UjWXBEp+330XaLqtpl^9q z1kqMmqx2;yKS>&Cm~rs35`Gp&-vb6n|Fo(9o(YbxC3PyG!dE`d_D37C##iER6= zQ~NJ&qhAsUZ{AeV;iS}gG?1vu$9XN{hXRR#)E%zA*x1*M(=vk30m0*8X6X@qLt|wT z4Yw(wh`%bDZiEw?RTXZ@RGD+`3*S2liJY8as#t>*S(gB+BM%sqq(+{%svU9zSRQYo zv6Vflw#$^|bYd^?oCf;)meEn_fQOxiaiVPHC6y zJ&{AC-<$ma`LV@8q9K5fhv11WX(IS=H(a?1*WIEV74d=_#rl$bZ-zR~0l^sT38uP{ zm(a$>C}qq0(A+bYp^ow$Z3{rRG(dIW#-@TssAkR9gq& zIO6oA`o!)fl zYGjC#y1B1ye-5+mH41^$-IJ5muVNHtO|>^crS!D4xB%3pdLi<7WMO>bnutl!_Utl5 z@&s<)h`%!a^6ts*le|Ff6Q?zMs`B~n%}oRfUZeu!m7py|OSbEHjxdsuBw$M~K8S?cZr@^gWY&MwtrV8$a;SsRT z!rfcvVMRbR?J67y|h_7=u#`PXn<9 zZ1u{F`BU_-E*hShZBR1-TsP-%bYSCY7klE&d%kt}hb@`x*R%a%E19CnI9`SU`{tw! zO>l2e{wx85f+*YBHkAG-3I(vaSdg=gY~cB?J)VtUZiyqi+`upcGVWIyV&`GSc#bvD zy!{E?$1n6Sl$EV43`{KN=Ln3rBqLjU-MkE0hQ^(W1P)fagu}>OjF4h@FIuoO4(*Lz zF0tUuj}IyFpQh+9t1wR3BZvYnQlZzq8R-G}^)tHNY{<&aiuPGkkv0%bFG8j4LwPqx{w%@TKVQU$sQ4G@i~IDt4ZOkSO04L5q!3EZZ$tc7@WJ{{LZAlD zePzHUm3w=j=e|`k8T`NFVkD~1VpqFhr4Ir)u|ku%q&FzXJ8n_ENxs&oroC3Yz$pY zMNEzDO-y0<_+Xq}oJc}Fd2hSo%y0F*`}l7@+t*z6);vc#Ry)rvms{4!Xz}R;8eBe53I5|04;$+ve3|M_0jd|0$~vNlOQHA*0+EL92^XxgE=wqwE+WH_ah+*NXhO92&y9Vla^J2#)EPOWD{m8xHkj@`~xy&L^=WjWdg0n z%K?t>!vM-J3L<-Rw`Pomq=&}p#{&uq4A>82jORuI`-X1-&L=YWW`ujWg9jP{TAe*X zxC_JX#|JimBpM!ha0f!1|?l4gX1VS4o#{}zC7h4`f! z0*7#`|8WPm0Wyzo>1ZMY0}JAv=W+PWo$dPs`%1f+DNqO>%d;5c*ZZvmh70>gq=u)l z&4bAK?=Eb6)c}%qc28S$U|R%$;<%Q9h zO?0rCs^!^Pkz}scURfwz6k6skD%itv9F)$g*Yx$!-CF9#>gQ%;K`d?lz!w%uA3er4 z^TRn7)`zCrcjw*-@67fh%yU=9+U~dUJM^@h&4+-{ldNrA*2w}fJ@e=wShHc+HJM@O zPG`zkhCAgE?m_Zy>SFU_%`I-YhAhm}=$xJ%-94>1g0{NErqbS_VoWxQmzcfMh#>ED z&O9}cTLS%#2X1&n{g!z0_269*G#Xo6&%`%EOS<0LBtza`>M}>ltj`9{ZoAW<+}g<* zJKp(#Xj3uhFjSrF`zAu#Y^Yxq+NF}UVOAk_e=iuJU{2~J35rri<{x93!Dad#k@Qmj=WB($W{>;U#|lY67Ja%Q3KIcj1eaA zDdoJF28IpOoi20OE*?S6i&p&vVlL;UCCy7>K=#hQXd^fE_L1Y$$Jq*!mxo9&j-n`tIv+0~FPx7(q#c0L|(mcatSHY{tS1oSWhbKlGnC>IPE(!|Z9Eh!Uu8(>J zlEFhkzZf#|&hn1*$DA?4RT#EqjQYB)eV^Sd`$62C0tX(y<0-`)X}>9H#yD>fEiDB8 z5!cH#Ul~$w@6*(I*kJ3jqCLdey)aOgQRRvgm7wl2p>Iy2XKb{kA9nhmsV`hVVw*4Z z&+x3xf4wmo_jPD58%f3{mTs5gjewnoeO5eNhy@hH360DzX-EXCWR$Z>+o|3VMKZ;w zp2IX-(iq@~HIEyzMo!!oc&RIS?*+IPe#a7Al>&uoEGHYABDKOf!TP^t%8-7(jbGvM=biUVD_;zzN6- zS3EZokv~UoPAM2QhbfYav}Tm0<_lYN)N=v%rm{0i@kS}@ zgqJ^s#l6~j@Mxpod7kEnVzL5*D|sBjES!hwX&&NwLtj>@bL=YsQq5OH5TY=st- z*g{uF0{$>n6aa@UPVH{tN_YbB#icrwW)3utX_;s-vo?BfNn1XULx)pv{i|O@i`}H= zPdx4nNQ)18tJKfd@ax>Je-u-5%M*oa7m&6r^;eq3#akI$(dMklEK=S{n`s2fpS-iF3rwRJ|5m`xCS zFtqIbTSS$R)i<^jl}AMN#OYGV#tXqblke|t9{xA1U?_EJ1#wS5qC3&MdQp=64!EV| z0n$l1(Z!$7mdI@`g>us6@4nH}&e2V}U#k~nLyVWu`dv39q#&l$CaVq>KzUeV=F;4h z=r^1AkoUni2j zGC&qyoRweFfNjdvEkf61tA$)}Ce1#&iPH1pQc7fm%iZ!ob5ocmZI1Eo9!CeK)zz`y z{l;Qi3Fd&qz6CwMqK_#8 z%8{0E^)1N}Wz)1UTWU7OZMkvVl8L5pbnv)`wuNah4%>N-l#57N{>pO7mQRVL8v$RP zyxHnyZTgSs%Hdt}9pho2?A&d$|9;K6*2e3)>(komLLiEg`wG6dbmWr+!L&XJJ@K0> zPF{RNr(AcvytZi~dDP=4_`ZL3&GPt+mWX%@$X_k9#!AL1e?xCftO!RQ{ zSTXK@YXUZR>EDgjhxF$W4vOC(5r1LYV1Qh{wQ-z0HE3Q2Q?GnbnGup_wjcZ+BUUSc z6*9GAv-S-dHVS=v2c)rSm%_$NbUh&!%8`_!Phg?Ke(0bBkWb@_dZ3Yg+o3EnsRJbg zobCD;X|1W;6__JLm220P@8H$?2~x8VBPnY_lo5wEeTiPHgzze%Ni0wk#{>#(G5rRn zfbbyX(^%;KqoVnE2ysqC$>*JCXB6q-$^-!RYbxsPnh}4qsYmrSTTFY8!cE^Z`OKZi zoC)ZSPhCNJiE8FEYkZKC5;B}C(J=Yo5_kcRy-Q*atiBePuJ`wgl8O$_`8lgpQJjAtz1{xBMHNp;;|qiJ$9wSq1=@6wvX7< zdS5OI^^fIe7z#KsNJKZ)JG<45{xXi-%*&NeM-6q3?>js=6n$p9Ed`}xB#K#|UYpCc z;42Yd*mXVHja;W1AU`XDkfFd!XBS9G^ zd}(amvP15r>0`_lz$}OIfBP*k|w^F>gZ?o$F_7i|J0UAUcWU(KUO{j9T2{C6ci*ONFU$wSEx)@PCjVxRy$kH=zRn#};Pd}Q@2<0me! z3Wv){n?dJHbUi~La%{F5yeN1}iOogTWW#T_;G(p9@9kt!$Ail8P$G3L?iT;ZURdmZ zM=vFe>J;|pBzBoh`JfQ}nJ)%87MHh^mHixA@mx%u-RXq(H3?iS6`t9OJ0>`3)s4vD zFGICZ80FEg*p04koU;Y;sKoWky4FuNZS45tUyD(?6G@rs2P{WAHAlz*S2n|rxc)}Di6A9i1 z7xK`fw`yRjiq{CHIBsH6my;KE|HH=`u^S=s9z$rYM#XV$#0lM4mt2-g;lYiD-P>pZ zI9o81y{RxheCnF6(KLgwU?$#-#Z96r^szqATd~>mJ#lgFw?rvD--D~-c98szhC@K@BWn}QW^{+jv_#L3wUnS%)af)XMbt8M00cKZ(wSIDqy%)Lr88Bj+Qqwd_IT)j|NZXdyk+Y284L z{T$AF@$Z6)pznrD6%lpSv3e`|MX}O(o^}}X1D|c3c6Zc<*2eo8+UW40M2!g_vot-c zd;^an9N$rn6lqG%#U+a`S9vGpkxsmBe!u-%kdl5_evDPaI&KVgYSZ3V3pXwW;AMBr zhve}qaL{8?D82EaI``Gwog!-?GpjZpLKE|2OB^Yw71O=}4(_)*56@mNDCv!2h zDd9#|(-x!G;>!IeiBM|YAFY~$?g0cYH$meCrUbl;y~nkR+svX9f`(fk@qkmgp3S5+ z&qW8lyjV)V{JNKM$KzRarB+SmpGc?lA+D~Z;!4+Iy72^pg&fZ>l`ux&f#AG0kc8Qu^ghs;^U#gA38coL= zaTdcaeIW76*NVF$K6Oz6s|kC@oB?@xpP)IS*RLs5oJv2Dx%R2(h2U`8j#M&Dg;m(6lsr;!&@7ZqDN;6`_v1_m=)l-`I2%$`(#=(hFDj=tSS zk3P9#N;4gvqOfy(Ucx+QOVP7t+wB(iDi$8TvsJ%?rHex5f27^BN3kXVW&UwD`wV zbWuu<0TR|Xu8|RGM?wTKelJ$;>)KNz6N1Fo#q|J2i); zZ07Q1HLdYthm|m=aQ3-og5~azOf*TsO_m3;@RNH#0S7x}!>Oc~~tt}HvNvSOO zl^u@uZ_N`=5ZX{R;F8I{XHon=1vI8OWnq;{iFeHr7R+UKobt4fnCHzC`h-}!L$W>> zL5bFuN&ev%C?zvtQRd?d`)sbKcKyKx zJd@%XtSB-5E`)ag`YkfFPt)ZIj?t(XrJLsG3eU}iBmonoWNFR&>^1yLU6JCgZ#$B` zO6b(HhaHlYs-PljEhOh>Q)r_Wbz9aMUe?E?0a{Lu;dpP5Q;(t{`^FE*>%mK%X?DTY zP`~r67IHM6DFT@!H-;PB*GJwd_rxj?|DEKO^mreHg#q3UN#f_0+e+!rAB&oJbiaHj zVO#Qvh6S*(WBAcO=DC+Gd}5%kY$HCab&2MEJ}3$1<&RLGNHKPyKFwU*4H#lo3~CcC z^2<5I#Q=zloNHTaleWaqGq3J=EOg@O`Bx^+hp8L5L)6#xiLc~F+MiEg?Tw_ybZtVE zf9fsRHT#P1$Ng(Q)R1l3d*R_iuOgALkoio$_U-rcGClePWgm)?M|bp-G%-Kzoz^}# zjWi2get2mTax~Y;sBH&>9l5&lzqAjjzErVwG2{0KdCO#5_DX`b}mZExC_T6iYg1Vka7x8eg2$=gVR8Zb51z%H3iTWee zguUnSh+yg=$Dm`{ro8*W$Cx>M`}rJ=dBHzFtcK`UPAZSax7vZVjw}n=ju4X^vKX$G zSGl8vo4wz3qy+3C?+Zid6fh^y;rr(1aAm#DM5z(W=zPEUJ#_ zZLCi=PY0G8@^W@gaj6)D_2o`+Vfcao97FLem55nr#Rqrv$B#5ijK3Jf2LSI8R?W#l zSz#E)^GF+)?MK#xj$}|@LaId7oB?Q^Jv@c`F=P0QHNQ$>TL#YvC>N7$j^k{l`7X*# z-sKw2ik3zc(lg1r+?X_j*eOZ#SdRITwXYG+TAoq75c#BFnmgeR(%z=5h2{cBn6j;x zEe%{_8y428?bZ>-08v74qd@|ezpf*#t;v_kdnDlm1V_7X-G#~4aM(I{p>U$bJVK9@ zY3h_A7=N}^OusqPz>1=#H0vS9orEJQo=>3sMNvj7k=RaqOBTw8HOOf#2sSQ+0u(l^>)fPVd_(pA(gF9E&Od*`n1cU83p-X7f9z*n~%IwGyu}GX~<7cWNBkUj6a&^wQk|fY#RvwL^gMDGB*6K6A9ST zPST@rp5UXto3V`4x}0ENs5fEP4Amq^I;k~FlIfr8Esz?z;9X14$w;AB0Uzedxpj6N z7}wmuBa2y@(I=MOW~T*inFWQU1z}ERB#~oQar8waUH#1bGWinw-L4_WohASHWA^)~m zsSE!OMO|_8#aqz>{uCH;b6Hkvijt(bk5KKqV*^6C`-T!TGcPMotqR-dzA{mSj8tqr>6=btI)MvTEp(~+E{12hODc8 z)Sg?mgG9R4n8gdj-meJUn)ntxwp$|l0|e%`KAu{~kVHt$HYhtL0*3X*W*Y?*);6{( zBUqCS@ctOqb^@kxD{7ChxW4ArY_XeCDRDL3fs@6=ozv{B^IGtetX7uqL1wl0O9=6e zUfi7Jdw8Y-v0cD;fh97K6*()t@~=(R?k zI!&yM4AWZ=N-VPAp^}j9>prtm@)r9@rN_VKEo#3wypp$jrlm4K-3vc~8@bGc7vHMT zzd};R{E{AHSdNObS@zt)D&ux6Eq{SC- z1U!H(OW1Vla<_ej;~xpBnA|pN#ljj`KRn6T)D7zsVQ34KOrC84)h6Z;WuHky+G|Xl zIqe=FR~&WB+cN?Zq;vrTx!B_T>=k+z_I`ND2EW51qa*$_J#5yeA53C=S6Nr7R{f}9 z@Q^6(Mpk5X^S*%P5tynV76bX0ZR_eo~pSpm|-7SCqv9QnDXd z0jiN?POD$uYxnkrkAERyz~e%D5_}0y2LiGgFg&k&;OgX_v|BMfnncUj%40S3==W%*xBr~GkJS`lY`JP2d7=KF#}RCbY0-%P3BJWNw! zS{j$?rdk@2$yOo8EtV3HkZDrq!(|p2w;tf@)&sM|d?~?OfS^=88ZAZT)!5?DB`i$- z+_Rc{p+%K4fV^N=+=zap{DDTywM%XBN_t**0L)#PDb$LGJ|t&dbgd(LtSB{@+k+up z13JpFg*Jjm3TC~Gd%JdmYdtd?CP=6p4p!tzLH0pc#lZ)ZieV-<&UHsI;>#&LW95}7 z(vJ7sF!@*hr?K-6it1bTJwYTV$$7|07-nF|hzJ7`BxghzU>M>IIS0uSB!grm=Qv~# zL=cfESwI8<$yt)bH@|o8dv&Vrtva`ASM9a;>gw*j_CKquKHpx67g1cWr_03RbKtr^ zrOs2^c!`00xaj3|<=r;ApIQ^h}FTM80L8dS^-sa(a!SJzl z%!nfiEXfdPNJ35daF6VR>UQ;Gcl*4OORr&KmfwY#8Bf-4 zkrp+iPqJTBlTuWqEvKh{R26;&v1g>1mLtnC3DY(#;YE6vpe{xibKU>$B5{OUKP!JV zKX~?wj%0`$U3B{3Y-3=m{9abDKjHJeqv+A=oaBKmUK9V*G4_mldz-*ZvL(o=AfH&A ztpQz8r{=+o>)R_0PO=4lf|=W+EF!<=D$B|8o3<>nAx74aSImfn6SUVS-himo8v@?1 z)|acP4dj>hyhE+(J8bi&rQWvvXMrEi=tHPQeJNZcs=jzeB)%4i$SJBIL z|GNFmhW6hTXy7vhGGKZU6feCctFC_tKA5a;z4`P4i&Wf9jrwdT&?GEtVUE>h%?daN zs;_mJnY{j7ZzwV+bToixp;w?@=}J~lt=f%ZtT@n z?Kcv&rmoc4*Jqx~eP9$g;*alBh9y5aMgOKvI~Y++G~3C@o&hd`e(CL@@Qj<4* zK4~V*dwxq%ywD@1dC=RCtsJ`+G60=1lV2-tzQ-P3gbmfnWkcNAubWu2sJsuND@t@M zxkERn2Fw#*+pcz0^>>&5mQp{l8P)pr{5MXWpgoR3jfCCXU4D}6-Z6@hZKkS{f<1Hd zEgqe3axDF(St3)pvJRe6Gfvlx9o`xS{ZiNBjDnVe2?dvg0N(enZ8YiwU2lHc`-udv z1h)K@nT)OST%AdK2g}V~J=FN2*6GZggQt%FbzQcPiHzeU{!inaotvi*mAj4(IsN`g z=vs73%;NExy0PIT&gCjC4}^2aJ3AknQB+43#o%l>#s~{Z9XE!vtS>)(BEcqy4#5BGoRhs9jJu-ZxD{kCq zJ#Dc@bs2A6xoF;aI%Tcxj5e&TJPX{OO9f<2&E?ah{``)W1aD;C@blLT9Su)c=|WI* z{7GG$N8BiXRzGJ|+q#glb9c4E;13-~1HZrZDjl@Tfts1`<56WWapKuK?PN-gs+VWU z^`;x0ogtf=(o0X3by_QK@T_K5Uh7dQ>EhncQ}>(3^|i~kVHt>N$l0EPs(2tzaL?)n z`h3}WqdrV<>X=W}?P4X^7Pa~1L+|2(;jA1qnYkgj>HUubH@{?kw;UpdIxF02(|)5F zO_=Fgs@j>E#`Uf@@h;t1*zQ$vPJ^qIu)Pl&gjdC?zGO2HP)y3t&I$toZ zLq#RJiYI_KfQVKq7IE~%-tnTW+T$k60ts8PR39RHmtHETWZ87RqArM{`UH^noy`cA$=ssS4*{b;_i`k z48HcK-$V|T#uIkq>=Pri6E1AgODdWK*TygQRA_?DdQE7a1r)A6MZIq0Z%k84$tz)~ z{H{c_-&;SU2qs+95chxCB%!W&eT$zD9KiZ>b&os3x&PHA8rirw)e0D*!jA^-Q3`|{6K9tl#Qn~+>Ou0 z#uhUz1QHe#5e7-|1J&Wa-Y7R4cRqfie|fM+A(b%94S-Kc8Y}`90f9tCL?B`yh@_AR zgjYm_7i0GVW%Hj*^xa@CE^r$Rzyot~hZ6y{^`XYX%AOd45Qaozz#cw*J9~Ek=K5DY zj{$~oH+M{EfT%DC6HE#$4iN$ii~qkoG4_~m(y;e}V@_TMNdax(UO*+dl|2l}4{&sW zdDywbVF0iHav?5^aq^D||3AnO9BG5Hav%c#+al^?mIVORvU1S#a3%t30whKM0gl|< zJpkh1|9{3a04xcX{NLh8`=*Yl#kNPc2Nt~vq%q;ZB#scP5ZNr`MJc)1*Y3u@?-v{j z&Atq&ogh1Vg2uJUhZ}RGmsWA;E%#Wu)!alTw>KvS>(^=55U()?WW+QQw8Zx$4 z<4p*|AyqD864fNzF(nd#+=NWqyoF5f*9sZ$xeALu8%OYjalYq&6J}Y_mG=>=0zwiU z!uW|aPK5ETM_dTjWlhtFRY06_>@nFV8vR6v2v-FO(&+yF$q9a2A-zuw4`&({z=-GZik<42^coL{VPOOjx&Bw!BW39MLkO$tri)=AGcBf(WV z6>^kudFV@08s(U1H%Shx@>slJ`W-7tiq!V+VTjOYmjG;JLI&LtlduoABL&wh9hTsQ zs^}BD9)t)m;;ST%waHX+k6+9`xcl{(#qHV^f?ec|+TV9&U*Re^hd9fb;^53{)-w|GU zLIRam(_;6bO3nPom{yZRR#6ijthXHI#Zd5Q(3Bz2l2WD=ZQ_-JLKHGwwG1wgPjwdC z(Dm4JmJ#y_u}xR@ND*JLHN5W$jS%dwv^=DjAFXs`yxE%%w+QIgVhGOuQA`z-1FZDW zNqek2?fPlC1m69))LvDJyQxbJVd9n=Y-NN)N?X9{?${1Am zeP;8*yiNAk=J16g2F~zN?_xw3@aq`e7Dlt`ZZ#|;L=5o~4JkO*UlgPH2`=mDd zPG#|W--M^=4FD*c9D6sXyC_o8BNogU<`+Kp?wGcYPFZcsazY9_KLmQsLTnDqI z+)mJ+bC1@<-!xdLYIMnfj(I==3j}4rFN22hTcrYbgg`G&%RQrqaZ7TR)eF8S3k}~- z@EM6a|4B?X(eE7}bAH4w>o#*@7$g2+$po@<=wJRuxRXH>3qgV##XwiMikQd z#ejOk@^J$m?QAIRta0;1qwX8+tsJ7WB5RE~5$6icIs3a|a&puMquygdaL#Ld=eVTh3u~xF35Zai$#N6wDXP@D^L3 z&P->{SFHn+w4poZGL)8vCEPaEKGkdlEaxCc?!n!(Hum6ZirR^DW#n#ngH=Ns$ELTY zliKcO5LQ#XiozCsv5r&H-Ti&=Z~1_q%2d#2@{P}y2F#nh>@6uGetlPGbCx^c4)qd$ zB5wW-{ZLWsQT_FKkgQn~`ol0SYv-P{Jgl|a6KHap=6Q6l&{&THZ3prYKSMhg`gic$ zJa2q6r=~Ifz>-q@m?^@gJt_Rr4=#~-R$7wv){@b?J}zku!-9K(3Y`@K-0koA+KFvh zIvv;cCJ7XBMpJ`^m2SsboYy@r=F@S>ty}Xtv4c?0qlj}_hDk8EP zsYR63x_1;CJUxuu(+8Ms`;|_%yGu7^zrp(EMN;e&Mk>sM8=}<4SRMD$=g3y3^&WvJ zb+9dsX&o6sxia0OGBd43>x3FAP!sFtK?Q%Ofa?dd`+bij#hQ2hBW!^b+F~8HNIjsm zw_o#>BjTxxrGFA*s4D#ro`~6Ml?X3_ZJwq@PX~Xh9R!QC^rlQ|E?bU8jiNtolLQ)| zC*Cl@Y-FY~imSghF|tYixCHoy}S%&(ngtHx_og!dlH> zR+o^5AJ&=F3TazB+oVIvELHZ0KkYtn#<6epNKT*P=&U;_{3-WA^I$7_@o(L7evYhM zkmp@2b(@G5QjK;-F8&kJ#lpAcFo~@swMidzDpr#-nMW}VbIkk^oNp`9N`uz4CVw|O zcU}^e@y-A|UK$mf?HfZYmSeQNlyEc?e*Ysbrm1=+*LI8g%dPXqyKijfH$EOd=cgRE zf1Sbkyy(aBi}LcU5{g!i?RAN->oW^w5?{?zw)-rR&7=Ej&Dc$uUQVNXce_dNK;k!U zSAE%=sQkSAS1+~8osY4Rr`K6I?-hwW1&>aN%E@1y_X?J@e3Wn$rjWbTd_r_LF}yas zR`%{N$h3WhFMqs6vX}2WdzS3Br+h}Z8Jg2DP-ahD;(3XGWdE(P+Z8CXtE;UmAg~=d z*m)!D%a@hI8eM9fb!PV{P%&qLJFoh15yoo$r7j8>Bq?pt8b*z5;G|urz?Dh7Xka;< zS7?|*_w7QW27C9;YuFoh8J=y_k}zcc7^j;GNEbo^WUi0cg(mUjQaf~S6bC%|gDo}; zr2XYphE^_4xg7F>%6HJAVn@Z*lN^Hb9MBW{An$iai{lrq+o8)vQu)}}_ku!hc|hG) zx0!!-TAu6Ov0Ko7J5q`HjTJfi2TxZlzYHGTOwq$X`9L=la+An*Y#sC||Bv2X=ubJz z7sKP1f*Njjkv$kKYR}r{O{m2QTjsl)z$6X%QknuKpVk>H8b|58ql$$Xy36GIkU`oTs{4_9D>a5Zt|@q$6=jw0Lf(L^qbBE9Is@_i ziHZ&1DTfCZEoCu41jCjP`oxcy+|DA!!a89@x~?mS_qWjO0Hk2?d!N|Gm&da#sGBoJ z=Mkpvmm`yfIUCT92=@L`rp-6^swCzp&9^^gxEz$KS-Ihitc=JXC$qMXKIoGrC~Bb# ztK(5AI2W^o^6GwR`Hd!?X5dclQTbwj(fK+@ZwJNBL;H7XUOQ_W?Y_HD{AzA}WEasF zSjJ)xlo{G_Bg@UO(TbL<#~)b-2XHOD2sF-I8Ja)AyRmC)1mm#r$I16`nJPc!R)l9&aWHIFaJEM^p(+-|HU>kFENY}>OI%R8er5U zpbONb6lf+}A{|MDZ^vd_eFg_|P>p3>(CnADLa*=x3no-vB}^|pZwM@Qxb%B*NY=DO zU9=#vczQdQk>R&afCcYJa&RvGBZn0j>}iJsB+ZI^cZ&^DYnd!Dd-sz{ScN2+r3k$6 zMEfjG&q_({OD(mv?x&BSGnQO08Qwr!19^~V+s;Qya?0rjpb8D%uiAu!bfY)>yu5!s z?z_}t91@YbBmm1f8)K#pwUn8sH;8Simfs*Kb)X5tnzD8vCxlb?;UUKtY+kM z^fxERj_^XOEF0lr=(NyNKVm@tt`Jtif@T=XznIxR>VbVEzznOemg#v^{_gXh0*(Of zqSYj?@>#cH7Pr%f#Ra9m63I++>jU;BEru_4*d?4&!XL+W2iZ)y<^X6mB~ql#yx97h zR8chUAw0`3IZUcasE!FFgWi25Jumw#6T{A=rNtP8g# z0;(cy;64B|5rCAWIT29L-Vcr$5dn<=W*~ql0EBs`i$Zw-q#&5ByY4^cwkW{=Er$Mi zPy(3Af|NxdATfxjm;zW)SsV;f1dB>ZLZD(2P*D&RqV((u;6IySqG-U82u!gA7X2^v z0pLH&54a~(!MNJg5x?9Ed6k$7QK4Je6cZPLz^eKOu^{#>vTqMmGhS2K zMbc)3TR&G29QjDuq#)z*l=swB?Xye=fK;ZQ*uS0>UxYa98-g1RnkBy$AyPCfWv1(^ z$CIK*yWO*;M@VHf5?Q#4lm4m4Cax!pt$#3_*cy`nYOqQZ(5agJW2WD$*`ri5Uoux- zXnq%O8l~74$| donde \verb|| es la direcci\'on del archivo a compilar + +\section{Estructura del Compilador} + +El compilador se divide en tres partes fundamentales, an\'alisis lexicogr\'afico y sint\'activo, an\'alisis sem\'antico y generaci\'on de c\'odigo. En este apartado estaremos hablando de la estructura de cada uno y finalmente como se combinan para formar el proceso de compilaci\'on. Todas las estructuras que veremos, tanto como el Lexer, Parser y los distintos Visitors implementados heredan de \verb|State|, esta clase define un estado del pipeline que controla la ejecuci\'on de cada parte del compilador, se encarga de registrar los errores ocurridos y detener la ejecuci\'on para reportarlos, su definici\'on se encuentra en \verb|src/pipeline/|, cada estado define una funci\'on \verb|run| que maneja la entrada que puede venir desde otro estado o ser la entrada del pipeline, realiza las operaciones correspondientes y pasa los resultados al pr\'oximo estado. + +\subsection{An\'alisis Lexicogr\'afico y Sint\'actico} + +Esta parte del compilador se compone por dos procesos, primero se tokeniza la entrada y luego se construye el AST que representa el programa de entrada. Para dividir la entrada en tokens se empleo \verb|ply|, empleando las funcionalidades que brinda este se definio nuestro \verb|Lexer| para los programas escritos en Cool este es \verb|CoolLexer| (algunas caracter\'istica de su implementaci\'on ser\'an abordadas m\'as adelante), este recibe recibe la informaci\'on desde el \verb|Reader|, el cual lee el archivo especificado en la entrada, generando as\'i una lista de tokens (los tokens definidos para el Lexer se encuentran en \verb|parsing.md|), estos ser\'an la entrada para el proceso de parsing.\\ + +Para describir el conjunto de programas que pueden ser escritos en Cool se defini\'o una gram\'atica LR basada en la que se encuentra en \cite{1} (la gram\'atica puede consultarse en \verb|parsing.md|), esta es ambigua, lo cual podemos notar f\'acilmente si vemos las producciones asociadas a las expresiones de Cool, pero mediante el uso de las caracter\'isticas de \verb|ply.yacc| podemos resolver los problemas de ambig\"uedad y obtener una gr\'amatica m\'as compacta y simple de leer. El proceso de parsing resulta en el AST que describe el programa de Cool que recibimos como entrada. El AST tiene como nodo base \verb|ASTNode|, a partir de este empezamos a establecer la jerarqu\'ia, encontramos los nodos de declaraci\'on, el nodo de programa y un extenso conjunto de nodos que corresponden a las expresiones, las cuales son mayoria en Cool (los nodos del AST se definen dentro \verb|./src/cl_ast|, se puede ver la jerarqu\'ia del AST en \verb|parsing.md|) + +\subsection{An\'alisis Sem\'antico} + +Luego que tenemos un AST correcto, no hay errores l\'exicos y sint\'acticos, podemos pasar a comprobar la si es correcta la sem\'antica del programa, para ello emplearemos el \textit{patr\'on visitor}, este permite separar los algoritmos de comprobaci\'on de sem\'antica de la estructura del AST, ya sea recolectar los tipos presentes o definir las variables en el scope correspondiente, de esta forma podemos separar el proceso sem\'antico en diversas fases m\'as simples y enfocadas algunas en nodos en particulas como es el caso de la recolecci\'on de tipos. La definci\'on base de un visitor en Python se encuentra en \verb|./src/visitors/visitor.py|. Como herramientas auxiliares para conocer la informaci\'on de los tipos y variables que intervien se definen dos estructuras \verb|Context| y \verb|Scope|, en este \'ultimo se compone por \verb|ClassScope| y \verb|InnerScope|. Los tipos definidos se representan por \verb|Type|, para cada tipo puede definirse sus atributos y m\'etodos mediante \verb|define_attribute| y \verb|define_method| (la definici\'on de tipo y los tipos por defecto de Cool se encuentran en \verb|./src/semantic/types.py|) + +\begin{enumerate} + \item [] \textbf{Context}: El context maneja todas los tipos que intervienen en el programa, adem\'as de los que ya est\'an definidos por defecto para un programa de Cool. Permite que se defina un nuevo \textbf{Type} adem\'as que podemos consultar los tipos definidos. + + \item[] \textbf{Scope}: Para la creaci\'on de un scope es necesario tener definido ya un context. El scope contiene aquellos atributos y variables que aparecen en el programa. Esta compuesto por: + \begin{enumerate} + \item[] \textbf{ClassScope}: El scope del programa tendr\'a un ClassScope para cada clase definida, este contiene para la clase que representa, el valor de \verb|self|, los atributos y m\'etodos de esta, para cada atributo o m\'etodo se define un nuevo scope anidado que es \verb|InnerScope|\\ + + \item[] \textbf{InnerScope}: Cada ClassScope contiene tantos InnerScope como definici\'on de m\'etodos o atributos contenga, este contiene las variables definidas y referenciadas en la definici\'on de estos, existen expresiones de como \textit{let} las cuales definen variables por lo tanto un InnerScope tendr\'a anidados m\'as scopes. + \end{enumerate} +\end{enumerate} + +Para guardar informaci\'on en las estructuras anteriores es necesario realizar diversos recorridos al AST, a continuaci\'on se explican por orden de aplicaci\'on: + +\begin{enumerate} + \item[] \textbf{TypeCollector}: Este visitor se encarga de recolectar los tipos que se definen en el programa, detecta la existencia de tipos definidos con igual nombre, este pasa al siguiente visitor un context con todos los tipos. + + \item[] \textbf{TypeBuilder}: Este visitor construye los tipos recolectados y establece las relaciones de herencia entre estos, se compone de dos partes, el \textbf{Builder} que se encarga de a\~nadir las definiciones de atributos y m\'etodos a los tipos recolectados y detectar errores asociados, luego el \textbf{InheritBuilder} se encarga de establecer los padres de forma adecuada para cada tipo, comprobar la redefinicion de atributos y m\'etodos y detectar herencia c\'iclica. + + \item[] \textbf{VarCollector}: Este visitor construye el scope para las expresiones de los atributos y para el cuerpo de las funciones, emplea el scope para definir variables asociada con su tipo, detecta declaraciones repetidas de variables, referencias a variables no declaradas, entre otros. + + \item[] \textbf{TypeChecker}: Este constituye la fase final del an\'alisis, se encarga de comprobar la correctitud de las expresiones y los tipos que las componen, detecta errores de incompatibilidad de tipos a la ahora de asignar expresiones, errores sem\'anticos en diversas expresiones como \verb|if|, \verb|let|, entre otras, adem\'as anota en el context los tipos din\'amicos asociados a las distintas expresiones que aparecen en el programa +\end{enumerate} + +\subsection{Generaci\'on de C\'odigo} + +Esta fase del compilador la vamos a analizar en dos etapas distintas: generaci\'on de c\'odigo +intermedio y generaci\'on de c\'odigo en c\'odigo de m\'aquina (MIPS), en la primera procesar el AST, el +scope y el context obtenidos de las fases anteriores, para obtener una secuencia de pasos para un IL +equivalente al código de un programa de COOL, la otra etapa sería luego de obtener un codigo en +IL generar la secuencia de instrucciones a un lenguaje de bajo nivel (MIPS). + +\begin{enumerate} + \item[] \textbf{Cool $\rightarrow$ IL}: El modulo correspondiente a este proceso se encuentra \verb|transpilator.py| en la carpeta visitors. Se defini\'o un modelo de IL personalizado que dista un poco de los IL convencionales, pero hacerlo de esta manera nos permitio eliminar algunas estructuras complejas de llevar a bajo nivel como por ejemplo: let o case. Se implement\'o una jerarquia de nodos de tipo IL similar a la de los anteriormente definida para los nodos del AST, cabe destacar que no se genera un AST de IL como tal sino una secuencia bien defnida del orden de sus operaciones, dicha implementacion esta en el modulo \verb|nodes_il| en la carpeta de \verb|code_generation|. Se definieron tambien modulos auxiliares como \verb|virtual_table.py| y \verb|variable.py|, en los que se procesan los resultado del proceso del chequeo sem\'antico y se acomoda a nuestro IL para hacer mas sencillo el proceso de transpilacion, para lograr dicho proceso se implemento un patron visitor donde se recorren los nodos del AST y se obtiene como resultado la secuencia de nodos de nuestro IL para pasar a la siguiente etapa. + + \item[] \textbf{IL $\rightarrow$ MIPS}: El m\'odulo correspondiente a este proceso se encuentra en \verb|to_mips.py| de la carpeta visitors. Una vez creada la lista de nodos de lenguaje intermedio se genera el código ensamblador correspondiente. Para lograr una mejor organización se reciben dos listas de nodos intermedios: Una correspondiente a la sección \verb|.data| y la otra correspondiente a la sección \verb|.text|. Lo primero que se genera es la sección \verb|.data|, para lo cual se visitan en el orden en que aparecen los nodos de lenguaje intermedio correspondientes a esta sección y se devuelve para cada uno de ellos su pedazo de código ensamblador correspondiente. En particular los nodos a los que se hace referencia son los que tienen que ver con la declaración de strings, con las relaciones de herencia y las tablas de métodos de virtuales de cada clase. Las tablas de métodos virtuales son etiquetas en MIPS seguidas por una lista \verb|.word|, el primero de ellos es una referencia a la dirección de memoria de la sección + referente a la herencia de esta clase y los siguientes son referencias a las direcciones de memoria de + los métodos de esta clase. Luego se genera el código de los métodos estáticos presentes en el + lenguaje COOL, los cuales son: \verb|inherit|, \verb|Object.copy|, \verb|Object.abort|, \verb|IO.out_string|, \verb|IO.in_string|, \verb|IO.out_int|, \verb|IO.in_int|, \verb|String.length|, \verb|String.concat|, \verb|String.substr|, \verb|String.cmp| y \verb|substrexception|. + Una vez generada la sección .data se procede a generar la sección .text de igual manera, o sea, + recorriendo los nodos intermedios correspondientes a esta sección y generando una también el + código ensamblador correspondiente. En esta sección los nodos que aparecen son los referentes a + asignaciones, salida y entrada estándar, comentarios, llamados a funciones, herencia, condicionales, + saltos, reserva de memoria, operaciones unarias y binarias, carga y declaración de etiquetas, asi + como los imprescindibles nodos referentes a insertar y extraer información de la pila. + + +\end{enumerate} + +\section{Problemas T\'ecnicos} + +En esta secci\'on expondremos los aspectos del compilador cuya implementaci\'on fue interesante debido a que requirieron un mayor esfuerzo de trabajo para ser resueltos. + +\subsection{An\'alisis Lexicogr\'afico y Sint\'actico} + +En esta fase la mayor dificultad fue encontrar una forma de ignorar los comentarios de varias l\'ineas debido que una expresi\'on regular no era capaz de resolverlo, para ello se emple\'o una caracter\'isitica presente en \verb|ply|. Un objeto \verb|ply.lexer| permite la definici\'on de estados para el proceso l\'exico, mediante determinada regla podemos indicar que se desea iniciar este estado, ejecutando entonces otro conjunto de acciones distinto para este, por ello nuestro lexer cuenta adem\'as de su estado \verb|MAIN| con otros dos estados: \verb|'comments'| y \verb|'string'|, en el caso del 2do estado se emplea para la captura m\'as c\'omoda de un string por parte del lexer. Para dar inicio al estado de coments se busca una coincidencia con la expresion "(*", de esta forma se inicia el estado mientras que "*)" lo termina bajo determinadas condiciones. Como es posible tener comentarios anidados y deseamos saber si no falta alg\'un "*)", asociado a este estado calculamos el balance de apertura y cierre de comentarios, de esta forma cuando se detecte un "*)", si dicho balance es mayor a 0, no se abandona el estado, de esta forma podemos detectar un error de este tipo ya que el EOF no deber\'ia aparecer en un comentario de m\'ultiples l\'ineas. + +\subsection{An\'alisis Sem\'antico} + +\begin{enumerate} + \item[] \textbf{Tipos por defecto de Cool}: Para representar los tipos definidos en un programa de Cool se defini\'o \textbf{Type}, asi cuando creamos un nuevo tipo en el proceso de an\'alisis sem\'antico este queda registrado en el contex de esta forma para realizar consultas a este desde diversos puntos del c\'odigo siempre recibiremos la misma instancia proveniente del context. En el caso de los tipos por defecto estos se definen mediante herencia de \textbf{Type} por lo tanto es posible en todo momento crear una nueva instancia de estos, por ejemplo para el chequeo sem\'antico realizado en el \'ultimo visitor en ocasiones resulta m\'as claro y limpio devolver un tipo \textbf{IntType} que realizar una petici\'on al context para que nos de la instancia que este tiene, debido a esto a la hora de definir los m\'etodos para las clases \textbf{Object}, \textbf{String} e \textbf{IO} contabamos con instancias que conten\'ian estas definiciones y otras que no. Para resolver esto empleamos el patr\'on \textit{singleton}, as\'i cada vez que instanciabamos un tipo por defecto nos referiamos a la misma instancia. De entre las diversas implementaciones del patr\'on \textit{singleton} se seleccion\'o el uso de metaclases por ser simple de a\~nadir a la estructura que teniamos. + + \item[] \textbf{Comprobaci\'on de Herencia}: Como parte del proceso sem\'antico es necesario comprobar la correctitud de las relaciones de herencia en el programa, de esto se encarga el \textbf{TypeBuilder}, en un programa de Cool no es obligatorio definir una clase antes de emplearla en una definici\'on de herencia por tanto un s\'olo recorrido por el AST no permite establecer del todo las relaciones. Para resolver esta situaci\'on se pensaron dos opciones, la primera realizar un orden sobre el \'arbol de herencia parecido a el orden topol\'ogico en un DAG, de esta forma tendr\'iamos organizadas las clases y para resolver la herencia m\'ultiple la b\'usqueda de ciclos en el grafo. La segunda consiste en realizar dos pasadas al AST, la primera para conformar los tipos, con sus atributos y m\'etodos y luego una segunda pasada para establecer la herencia. Se decidi\'o emplear la segunda opci\'on ya que permit\'ia la detecci\'on de una mayor cantidad de errores en esta fase, que de otra forma deberiamos realizarlo en el \textbf{TypeChecker}. + +\end{enumerate} + +\subsection{Generaci\'on de C\'odigo} + +< Explicaci\'on Harold > + +\begin{thebibliography}{99} + \bibitem{1} The Cool Reference Manual, Alex Aiken +\end{thebibliography} + +%---------------------------------------------------------------------------------------- + +\end{document} From 996be3de53afab9dccca95b69e14e64552dc65ff Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Mon, 30 Nov 2020 10:48:21 -0500 Subject: [PATCH 103/140] some other corrections $ra --- src/code_generation/variables.py | 4 +- src/visitors/to_mips.py | 6 +- src/visitors/transpilator.py | 3 +- tests/codegen/arith.mips | 454 +-- tests/codegen/atoi.mips | 2198 ------------ tests/codegen/cells.mips | 76 +- tests/codegen/complex.mips | 887 ----- tests/codegen/fib.mips | 22 +- tests/codegen/graph.mips | 216 +- tests/codegen/hello_world.mips | 6 +- tests/codegen/life.mips | 5641 ------------------------------ tests/codegen/list.mips | 57 +- tests/codegen/palindrome.mips | 759 ---- tests/codegen/primes.mips | 829 ----- tests/codegen/print-cool.mips | 24 +- tests/codegen/sort-list.mips | 1625 --------- 16 files changed, 315 insertions(+), 12492 deletions(-) delete mode 100644 tests/codegen/atoi.mips delete mode 100644 tests/codegen/complex.mips delete mode 100644 tests/codegen/life.mips delete mode 100644 tests/codegen/palindrome.mips delete mode 100644 tests/codegen/primes.mips delete mode 100644 tests/codegen/sort-list.mips diff --git a/src/code_generation/variables.py b/src/code_generation/variables.py index 1d6750a9..bc3d5ffc 100644 --- a/src/code_generation/variables.py +++ b/src/code_generation/variables.py @@ -20,8 +20,8 @@ def pop_var(self): def add_temp(self): name = len(self.stack) + 1 - self.add_var('tmp_' + str(name)) - return str('tmp_' + str(name)) + self.add_var(str(name)) + return str(str(name)) def peek_last(self): # print(self.vars) diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 2318cd6c..96b6021e 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -219,8 +219,8 @@ def visit(self, node): else: self.code.append("jal {}\n".format(node.result)) self.code.append("sw $a1, {}($sp)\n".format(0)) - self.code.append("addi $sp, $sp, 4\n") - self.code.append("lw $ra, {}($sp)\n".format(4 * node.offset)) + self.code.append("addi $sp, $sp, -4\n") + # self.code.append("lw $ra, {}($sp)\n".format(4 * (int(node.offset) + 1))) @visitor.when(DispatchParentIL) @@ -242,7 +242,7 @@ def visit(self, node): self.code.append("la $a1, " + node.parent + "_VT\n") self.code.append("la $t0, inherit\n") self.code.append("jalr $ra, $t0\n") - self.code.append("sw $v0, {}($sp)\n".format(4)) + self.code.append("sw $v0, {}($sp)\n".format(4*node.result)) @visitor.when(StringIL) def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index f1ba0a63..de701a23 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -428,10 +428,9 @@ def visit(self, node, variables): self.code.append(PushIL()) result = variables.add_var(b.id) self.code.append(VarToVarIL(variables.id(result), variables.id(p))) - + self.visit(b.expr, variables) m = variables.peek_last() - self.code.append(VarToVarIL(variables.id(result), variables.id(m))) variables.pop_var() diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 30786f67..d7f05ea2 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -466,8 +466,7 @@ addi $sp, $sp, -4 #obj 3 offset 1 result Main.main jal Main.main sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 j Object.abort #--------------End Initial Code--------------- A.Constructor: @@ -619,14 +618,13 @@ sw $t1, 4($sp) #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 36($sp) addiu $sp, $sp, 8 -lw $t0, tmp_15tmp_15tmp_15tmp_15($sp) -sw $t0, tmp_5tmp_5tmp_5tmp_5($sp) +lw $t0, 15151515($sp) +sw $t0, 5555($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -699,14 +697,13 @@ sw $t1, 4($sp) #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 32($sp) addiu $sp, $sp, 8 -lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 13131313($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -813,14 +810,13 @@ sw $t1, 4($sp) #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 36($sp) addiu $sp, $sp, 8 -lw $t0, tmp_19tmp_19tmp_19tmp_19($sp) -sw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +lw $t0, 19191919($sp) +sw $t0, 9999($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 24($sp) @@ -897,14 +893,13 @@ sw $t1, 4($sp) #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 36($sp) addiu $sp, $sp, 8 -lw $t0, tmp_21tmp_21tmp_21tmp_21($sp) -sw $t0, tmp_11tmp_11tmp_11tmp_11($sp) +lw $t0, 21212121($sp) +sw $t0, 11111111($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 32($sp) @@ -1017,8 +1012,8 @@ addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_2 _pool_2: -lw $t0, tmp_19tmp_19tmp_19tmp_19($sp) -sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +lw $t0, 19191919($sp) +sw $t0, 7777($sp) addiu $sp, $sp, 8 #Point-Dispatch li $a0, 0 @@ -1060,14 +1055,13 @@ sw $t1, 4($sp) #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 32($sp) addiu $sp, $sp, 8 -lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 13131313($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1163,14 +1157,13 @@ sw $t1, 4($sp) #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 36($sp) addiu $sp, $sp, 8 -lw $t0, tmp_14tmp_14tmp_14tmp_14($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 14141414($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1258,14 +1251,13 @@ sw $t1, 4($sp) #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 32($sp) addiu $sp, $sp, 8 -lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 13131313($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1361,14 +1353,13 @@ sw $t1, 4($sp) #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 44($sp) addiu $sp, $sp, 8 -lw $t0, tmp_16tmp_16tmp_16tmp_16($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 16161616($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1532,8 +1523,7 @@ addiu $sp, $sp, 8 #obj 5 offset 26 result D.method7 jal D.method7 sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 104($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 36($sp) @@ -1600,15 +1590,14 @@ sw $t0, 8($sp) #obj 4 offset 33 result D.method7 jal D.method7 sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 132($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 112($sp) _fi_3: addiu $sp, $sp, 8 -lw $t0, tmp_33tmp_33tmp_33tmp_33($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 33333333($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1703,14 +1692,13 @@ sw $t1, 4($sp) #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 36($sp) addiu $sp, $sp, 8 -lw $t0, tmp_14tmp_14tmp_14tmp_14($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 14141414($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -2022,8 +2010,7 @@ sw $t0, 4($sp) #obj 2 offset 46 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 184($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 #Integer li $a0, 0 @@ -2417,8 +2404,7 @@ sw $t0, 4($sp) #obj 2 offset 46 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 184($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 #loading label li $a0, 0 @@ -2609,8 +2595,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Integer li $a0, 0 @@ -2655,8 +2640,7 @@ addiu $sp, $sp, -4 #obj 4 offset 3 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #loading label li $a0, 0 @@ -2704,8 +2688,7 @@ addiu $sp, $sp, -4 #obj 4 offset 3 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #loading label li $a0, 0 @@ -2741,8 +2724,7 @@ sw $t0, 4($sp) #obj 3 offset 25 result A2I.a2i_aux jal A2I.a2i_aux sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 100($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 40($sp) @@ -2793,8 +2775,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Integer li $a0, 1 @@ -2809,15 +2790,13 @@ addiu $sp, $sp, 8 #obj 7 offset 6 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place #obj 9 offset 34 result A2I.a2i_aux jal A2I.a2i_aux sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 136($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 76($sp) @@ -2876,8 +2855,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Integer li $a0, 1 @@ -2892,15 +2870,13 @@ addiu $sp, $sp, 8 #obj 7 offset 6 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place #obj 9 offset 44 result A2I.a2i_aux jal A2I.a2i_aux sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 176($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) not $t0, $t0 @@ -3042,15 +3018,13 @@ addiu $sp, $sp, -4 #obj 4 offset 3 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place #obj 6 offset 25 result A2I.c2i jal A2I.c2i sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 100($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 28($sp) lw $t1, 4($sp) @@ -3089,11 +3063,11 @@ addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_53 _pool_53: -lw $t0, tmp_28tmp_28tmp_28tmp_28($sp) -sw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +lw $t0, 28282828($sp) +sw $t0, 9999($sp) addiu $sp, $sp, 8 -lw $t0, tmp_10tmp_10tmp_10tmp_10($sp) -sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +lw $t0, 10101010($sp) +sw $t0, 7777($sp) addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) @@ -3104,8 +3078,8 @@ sw $t1, 4($sp) lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 -lw $t0, tmp_9tmp_9tmp_9tmp_9($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 9999($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -3218,15 +3192,13 @@ addiu $sp, $sp, 8 #obj 6 offset 19 result A2I.i2a_aux jal A2I.i2a_aux sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 76($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 8 offset 7 result String.concat jal String.concat sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 28($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 48($sp) @@ -3252,8 +3224,7 @@ sw $t0, 4($sp) #obj 3 offset 22 result A2I.i2a_aux jal A2I.i2a_aux sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 88($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 60($sp) @@ -3335,8 +3306,7 @@ sw $t1, 4($sp) #obj 3 offset 13 result A2I.i2a_aux jal A2I.i2a_aux sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 52($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Args: 0 #Self-Dispatch @@ -3388,18 +3358,16 @@ addiu $sp, $sp, 8 #obj 7 offset 20 result A2I.i2c jal A2I.i2c sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 80($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 11 offset 8 result String.concat jal String.concat sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, tmp_20tmp_20tmp_20tmp_20($sp) -sw $t0, tmp_8tmp_8tmp_8tmp_8($sp) +lw $t0, 20202020($sp) +sw $t0, 8888($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 24($sp) @@ -3464,8 +3432,7 @@ addi $sp, $sp, -4 #obj 2 offset 5 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3482,8 +3449,7 @@ sw $t1, 4($sp) #obj 2 offset 7 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 28($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3501,8 +3467,7 @@ addi $sp, $sp, -4 #obj 2 offset 9 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 36($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3520,8 +3485,7 @@ addi $sp, $sp, -4 #obj 2 offset 11 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 44($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3538,8 +3502,7 @@ sw $t1, 4($sp) #obj 2 offset 13 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 52($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3557,8 +3520,7 @@ addi $sp, $sp, -4 #obj 2 offset 15 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 60($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3576,8 +3538,7 @@ addi $sp, $sp, -4 #obj 2 offset 17 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 68($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3594,8 +3555,7 @@ sw $t1, 4($sp) #obj 2 offset 19 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 76($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3613,8 +3573,7 @@ addi $sp, $sp, -4 #obj 2 offset 21 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 84($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3632,8 +3591,7 @@ addi $sp, $sp, -4 #obj 2 offset 23 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 92($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3650,8 +3608,7 @@ sw $t1, 4($sp) #obj 2 offset 25 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 100($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3669,8 +3626,7 @@ addi $sp, $sp, -4 #obj 2 offset 27 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 108($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3688,8 +3644,7 @@ addi $sp, $sp, -4 #obj 2 offset 29 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 116($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3706,8 +3661,7 @@ sw $t1, 4($sp) #obj 2 offset 31 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 124($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3725,8 +3679,7 @@ addi $sp, $sp, -4 #obj 2 offset 33 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 132($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3744,8 +3697,7 @@ addi $sp, $sp, -4 #obj 2 offset 35 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 140($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3762,8 +3714,7 @@ sw $t1, 4($sp) #obj 2 offset 37 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 148($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3781,8 +3732,7 @@ addi $sp, $sp, -4 #obj 2 offset 39 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 156($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3800,8 +3750,7 @@ addi $sp, $sp, -4 #obj 2 offset 41 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 164($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3818,8 +3767,7 @@ sw $t1, 4($sp) #obj 2 offset 43 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 172($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3837,8 +3785,7 @@ addi $sp, $sp, -4 #obj 2 offset 45 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 180($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3856,8 +3803,7 @@ addi $sp, $sp, -4 #obj 2 offset 47 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 188($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3874,8 +3820,7 @@ sw $t1, 4($sp) #obj 2 offset 49 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 196($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3893,8 +3838,7 @@ addi $sp, $sp, -4 #obj 2 offset 51 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 204($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3912,8 +3856,7 @@ addi $sp, $sp, -4 #obj 2 offset 53 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 212($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3931,8 +3874,7 @@ addi $sp, $sp, -4 #obj 2 offset 55 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 220($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3942,8 +3884,7 @@ addiu $sp, $sp, -4 #obj 1 offset 56 result IO.in_string jal IO.in_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 224($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 216($sp) @@ -3975,8 +3916,7 @@ addi $sp, $sp, -4 #obj 2 offset 5 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3994,8 +3934,7 @@ addi $sp, $sp, -4 #obj 2 offset 7 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 28($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -4005,8 +3944,7 @@ addiu $sp, $sp, -4 #obj 1 offset 8 result IO.in_string jal IO.in_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 24($sp) @@ -4052,14 +3990,13 @@ sw $t1, 4($sp) #obj 3 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, tmp_10tmp_10tmp_10tmp_10($sp) -sw $t0, tmp_6tmp_6tmp_6tmp_6($sp) +lw $t0, 10101010($sp) +sw $t0, 6666($sp) addiu $sp, $sp, 8 -lw $t0, tmp_7tmp_7tmp_7tmp_7($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 7777($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 12($sp) @@ -4180,8 +4117,7 @@ addiu $sp, $sp, 8 #obj 4 offset 21 result Main.is_even jal Main.is_even sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 84($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 32($sp) @@ -4231,15 +4167,14 @@ sw $t0, 8($sp) #obj 3 offset 26 result Main.is_even jal Main.is_even sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 104($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 84($sp) _fi_80: addiu $sp, $sp, 8 -lw $t0, tmp_26tmp_26tmp_26tmp_26($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 26262626($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -4345,8 +4280,7 @@ addi $sp, $sp, -4 #obj 2 offset 15 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 60($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 12($sp) @@ -4374,8 +4308,7 @@ addi $sp, $sp, -4 #obj 2 offset 18 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 72($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 24($sp) @@ -4403,8 +4336,7 @@ addi $sp, $sp, -4 #obj 2 offset 21 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 84($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 36($sp) @@ -4432,8 +4364,7 @@ addi $sp, $sp, -4 #obj 2 offset 24 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 96($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 48($sp) @@ -4461,8 +4392,7 @@ addi $sp, $sp, -4 #obj 2 offset 27 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 108($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 60($sp) @@ -4490,8 +4420,7 @@ addi $sp, $sp, -4 #obj 2 offset 30 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 120($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 72($sp) @@ -4542,22 +4471,19 @@ sw $t0, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 4 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Dispatch in place #obj 5 offset 11 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 44($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -4575,14 +4501,13 @@ addi $sp, $sp, -4 #obj 2 offset 13 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 52($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 32($sp) addiu $sp, $sp, 8 -lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 13131313($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -4658,8 +4583,7 @@ addi $sp, $sp, -4 #obj 2 offset 11 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 44($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -4676,8 +4600,7 @@ sw $t1, 4($sp) #obj 2 offset 13 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 52($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Condition li $a0, 0 @@ -4703,15 +4626,13 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 3 offset 17 result Main.is_even jal Main.is_even sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 68($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_99 @@ -4731,8 +4652,7 @@ addi $sp, $sp, -4 #obj 2 offset 19 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 76($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 24($sp) @@ -4754,8 +4674,7 @@ addi $sp, $sp, -4 #obj 2 offset 21 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 84($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 32($sp) @@ -4776,8 +4695,7 @@ sw $t1, 4($sp) #obj 2 offset 23 result Main.class_type jal Main.class_type sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 92($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Assignment #Self-Dispatch @@ -4788,8 +4706,7 @@ addiu $sp, $sp, -4 #obj 1 offset 24 result Main.menu jal Main.menu sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 96($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) lw $t1, 96($sp) @@ -5120,15 +5037,13 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 6 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 280($sp) @@ -5242,15 +5157,13 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 6 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 332($sp) @@ -5279,8 +5192,7 @@ addi $sp, $sp, -4 #obj 2 offset 88 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 352($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -5297,8 +5209,7 @@ sw $t1, 4($sp) #obj 2 offset 90 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 360($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -5316,8 +5227,7 @@ addi $sp, $sp, -4 #obj 2 offset 92 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 368($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -5334,8 +5244,7 @@ sw $t1, 4($sp) #obj 2 offset 94 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 376($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -5353,8 +5262,7 @@ addi $sp, $sp, -4 #obj 2 offset 96 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 384($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Let li $a0, 0 @@ -5391,15 +5299,13 @@ sw $t1, 4($sp) #obj 3 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Dispatch in place #obj 4 offset 103 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 412($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -5417,20 +5323,19 @@ addi $sp, $sp, -4 #obj 2 offset 105 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 420($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 28($sp) addiu $sp, $sp, 8 -lw $t0, tmp_105tmp_105tmp_105tmp_105($sp) -sw $t0, tmp_97tmp_97tmp_97tmp_97($sp) +lw $t0, 105105105105($sp) +sw $t0, 97979797($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 52($sp) addiu $sp, $sp, 24 -lw $t0, tmp_98tmp_98tmp_98tmp_98($sp) -sw $t0, tmp_84tmp_84tmp_84tmp_84($sp) +lw $t0, 98989898($sp) +sw $t0, 84848484($sp) addiu $sp, $sp, 8 #Assignment li $a0, 0 @@ -5445,8 +5350,8 @@ sw $t1, 8($t0) lw $t0, 4($sp) sw $t0, 40($sp) addiu $sp, $sp, 12 -lw $t0, tmp_86tmp_86tmp_86tmp_86($sp) -sw $t0, tmp_75tmp_75tmp_75tmp_75($sp) +lw $t0, 86868686($sp) +sw $t0, 75757575($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 96($sp) @@ -5505,15 +5410,13 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 6 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_126 @@ -5537,8 +5440,7 @@ addi $sp, $sp, -4 #obj 2 offset 86 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 344($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -5555,8 +5457,7 @@ sw $t1, 4($sp) #obj 2 offset 88 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 352($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -5574,8 +5475,7 @@ addi $sp, $sp, -4 #obj 2 offset 90 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 360($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 28($sp) @@ -5604,8 +5504,7 @@ addi $sp, $sp, -4 #obj 2 offset 93 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 372($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -5622,8 +5521,7 @@ sw $t1, 4($sp) #obj 2 offset 95 result Main.print jal Main.print sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 380($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -5641,8 +5539,7 @@ addi $sp, $sp, -4 #obj 2 offset 97 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 388($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 28($sp) @@ -5704,8 +5601,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #DispatchParent in place #obj 6 offset 3 result C.method5 @@ -5770,8 +5666,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #DispatchParent in place #obj 6 offset 3 result C.method5 @@ -5836,8 +5731,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #DispatchParent in place #obj 6 offset 3 result C.method5 @@ -5900,15 +5794,13 @@ addiu $sp, $sp, -4 #obj 1 offset 121 result Main.get_int jal Main.get_int sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 484($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 484($sp) @@ -5959,8 +5851,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Args: 1 #Point-Dispatch @@ -5978,15 +5869,13 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 8 offset 5 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $t0, 4($sp) lw $t1, 516($sp) @@ -6077,15 +5966,13 @@ sw $t0, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 4 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 560($sp) @@ -6126,15 +6013,13 @@ sw $t0, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 4 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 580($sp) @@ -6169,8 +6054,7 @@ addi $sp, $sp, -4 #obj 2 offset 149 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 596($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -6180,8 +6064,7 @@ addiu $sp, $sp, -4 #obj 1 offset 150 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 600($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Integer li $a0, 0 @@ -6244,15 +6127,13 @@ addiu $sp, $sp, -4 #obj 1 offset 157 result Main.get_int jal Main.get_int sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 628($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 628($sp) @@ -6303,8 +6184,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Args: 1 #Point-Dispatch @@ -6322,15 +6202,13 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 8 offset 5 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $t0, 4($sp) lw $t1, 660($sp) diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips deleted file mode 100644 index 2fb09558..00000000 --- a/tests/codegen/atoi.mips +++ /dev/null @@ -1,2198 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "0" -string_3: .asciiz "1" -string_5: .asciiz "2" -string_7: .asciiz "3" -string_9: .asciiz "4" -string_11: .asciiz "5" -string_13: .asciiz "6" -string_15: .asciiz "7" -string_17: .asciiz "8" -string_19: .asciiz "9" -string_31: .asciiz "" -string_32: .asciiz "9" -string_33: .asciiz "8" -string_34: .asciiz "7" -string_35: .asciiz "6" -string_36: .asciiz "5" -string_37: .asciiz "4" -string_38: .asciiz "3" -string_39: .asciiz "2" -string_40: .asciiz "1" -string_41: .asciiz "0" -string_43: .asciiz "-" -string_45: .asciiz "+" -string_50: .asciiz "-" -string_51: .asciiz "0" -string_53: .asciiz "" -string_54: .asciiz " == " -string_55: .asciiz "\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -A2I_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -A2I_name: .asciiz "A2I" -A2I_VT: -.word A2I_INH -.word A2I.c2i -.word A2I.i2c -.word A2I.a2i -.word A2I.a2i_aux -.word A2I.i2a -.word A2I.i2a_aux -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -j Object.abort -#--------------End Initial Code--------------- -A2I.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -A2I.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, A2I_name -jr $ra -A2I.c2i: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_2 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_6 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_7 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_10 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_11 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_12 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_13 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_14 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 132($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_15 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_16 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 148($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_17 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_18 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 164($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_19 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_20 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 184($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 46 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 184($sp) -addiu $sp, $sp, 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) -j _fi_20 -_if_20: -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -_fi_20: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 52($sp) -j _fi_18 -_if_18: -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 56($sp) -_fi_18: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 72($sp) -j _fi_16 -_if_16: -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 76($sp) -_fi_16: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 92($sp) -j _fi_14 -_if_14: -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 96($sp) -_fi_14: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 112($sp) -j _fi_12 -_if_12: -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 116($sp) -_fi_12: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 132($sp) -j _fi_10 -_if_10: -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 136($sp) -_fi_10: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 152($sp) -j _fi_8 -_if_8: -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 156($sp) -_fi_8: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 172($sp) -j _fi_6 -_if_6: -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 176($sp) -_fi_6: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 192($sp) -j _fi_4 -_if_4: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 196($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 212($sp) -j _fi_2 -_if_2: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 216($sp) -_fi_2: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -A2I.i2c: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_21 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_22 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_23 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_24 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 4($sp) -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_25 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -sw $t0, 4($sp) -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_26 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_27 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 132($sp) -sw $t0, 4($sp) -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_28 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 148($sp) -sw $t0, 4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_29 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 164($sp) -sw $t0, 4($sp) -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_30 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 184($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 46 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 184($sp) -addiu $sp, $sp, 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_31 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) -j _fi_30 -_if_30: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_32 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -_fi_30: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 52($sp) -j _fi_29 -_if_29: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_33 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 56($sp) -_fi_29: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 72($sp) -j _fi_28 -_if_28: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_34 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 76($sp) -_fi_28: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 92($sp) -j _fi_27 -_if_27: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_35 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 96($sp) -_fi_27: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 112($sp) -j _fi_26 -_if_26: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_36 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 116($sp) -_fi_26: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 132($sp) -j _fi_25 -_if_25: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_37 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 136($sp) -_fi_25: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 152($sp) -j _fi_24 -_if_24: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_38 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 156($sp) -_fi_24: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 172($sp) -j _fi_23 -_if_23: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_39 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 176($sp) -_fi_23: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 192($sp) -j _fi_22 -_if_22: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_40 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 196($sp) -_fi_22: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 212($sp) -j _fi_21 -_if_21: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_41 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 216($sp) -_fi_21: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -A2I.a2i: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_42 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_43 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_44 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_45 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_46 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 25 result A2I.a2i_aux -jal A2I.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 100($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 40($sp) -j _fi_46 -_if_46: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 128($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 6 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) -addiu $sp, $sp, 12 -#Dispatch in place -#obj 9 offset 34 result A2I.a2i_aux -jal A2I.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 136($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 76($sp) -_fi_46: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 104($sp) -j _fi_44 -_if_44: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 148($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 152($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 168($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 6 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) -addiu $sp, $sp, 12 -#Dispatch in place -#obj 9 offset 44 result A2I.a2i_aux -jal A2I.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 176($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 40($sp) -lw $t0, 4($sp) -sw $t0, 144($sp) -_fi_44: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 164($sp) -j _fi_42 -_if_42: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 168($sp) -_fi_42: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -A2I.a2i_aux: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_47: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_47 -j _pool_47 -_body_47: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -#Dispatch in place -#obj 6 offset 25 result A2I.c2i -jal A2I.c2i -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 100($sp) -addiu $sp, $sp, 4 -lw $t0, 28($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 40($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 100($sp) -sw $t1, -4($t0) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 112($sp) -sw $t1, -4($t0) -lw $t0, 4($sp) -sw $t0, 56($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_47 -_pool_47: -lw $t0, tmp_28tmp_28tmp_28tmp_28($sp) -sw $t0, tmp_9tmp_9tmp_9tmp_9($sp) -addiu $sp, $sp, 8 -lw $t0, tmp_10tmp_10tmp_10tmp_10($sp) -sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, tmp_9tmp_9tmp_9tmp_9($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -A2I.i2a: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_48 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_49 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_50 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 12($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 6 offset 19 result A2I.i2a_aux -jal A2I.i2a_aux -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 76($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 8 offset 7 result String.concat -jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) -j _fi_49 -_if_49: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 22 result A2I.i2a_aux -jal A2I.i2a_aux -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 88($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 60($sp) -_fi_49: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 76($sp) -j _fi_48 -_if_48: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_51 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_48: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -A2I.i2a_aux: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_52 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 13 result A2I.i2a_aux -jal A2I.i2a_aux -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 52($sp) -addiu $sp, $sp, 4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 20 result A2I.i2c -jal A2I.i2c -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 80($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 11 offset 8 result String.concat -jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) -addiu $sp, $sp, 8 -lw $t0, tmp_20tmp_20tmp_20tmp_20($sp) -sw $t0, tmp_8tmp_8tmp_8tmp_8($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 24($sp) -j _fi_52 -_if_52: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_53 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -_fi_52: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 7 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 28($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_54 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 9 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 36($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 11 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 44($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_55 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 13 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 52($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 36($sp) -addiu $sp, $sp, 16 -lw $t0, tmp_13tmp_13tmp_13tmp_13($sp) -sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 0b85d699..13d9515c 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -357,8 +357,7 @@ addi $sp, $sp, -4 #obj 3 offset 1 result Main.main jal Main.main sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 j Object.abort #--------------End Initial Code--------------- CellularAutomaton.Constructor: @@ -445,15 +444,13 @@ addi $sp, $sp, -4 #obj 3 offset 2 result String.concat jal String.concat sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Dispatch in place #obj 5 offset 8 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) @@ -485,8 +482,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -521,8 +517,7 @@ addiu $sp, $sp, -4 #obj 4 offset 3 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -588,8 +583,7 @@ addiu $sp, $sp, 8 #obj 5 offset 12 result CellularAutomaton.cell jal CellularAutomaton.cell sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 36($sp) @@ -624,8 +618,7 @@ sw $t0, 4($sp) #obj 2 offset 17 result CellularAutomaton.num_cells jal CellularAutomaton.num_cells sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 68($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 #Integer li $a0, 1 @@ -640,8 +633,7 @@ addiu $sp, $sp, 8 #obj 6 offset 18 result CellularAutomaton.cell jal CellularAutomaton.cell sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 72($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 60($sp) @@ -685,8 +677,7 @@ sw $t0, 4($sp) #obj 2 offset 9 result CellularAutomaton.num_cells jal CellularAutomaton.num_cells sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 36($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 #Integer li $a0, 1 @@ -737,8 +728,7 @@ addiu $sp, $sp, 8 #obj 5 offset 15 result CellularAutomaton.cell jal CellularAutomaton.cell sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 60($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 48($sp) @@ -763,8 +753,7 @@ addiu $sp, $sp, -4 #obj 3 offset 18 result CellularAutomaton.cell jal CellularAutomaton.cell sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 72($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 60($sp) @@ -821,8 +810,7 @@ sw $t0, 4($sp) #obj 3 offset 12 result CellularAutomaton.cell jal CellularAutomaton.cell sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #loading label li $a0, 0 @@ -882,8 +870,7 @@ sw $t0, 4($sp) #obj 3 offset 20 result CellularAutomaton.cell_left_neighbor jal CellularAutomaton.cell_left_neighbor sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 80($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #loading label li $a0, 0 @@ -948,8 +935,7 @@ sw $t0, 4($sp) #obj 3 offset 28 result CellularAutomaton.cell_right_neighbor jal CellularAutomaton.cell_right_neighbor sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 112($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #loading label li $a0, 0 @@ -1112,15 +1098,13 @@ sw $t1, 4($sp) #obj 3 offset 19 result CellularAutomaton.cell_at_next_evolution jal CellularAutomaton.cell_at_next_evolution sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 76($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 5 offset 4 result String.concat jal String.concat sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 16($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 76($sp) @@ -1172,14 +1156,14 @@ sw $t0, 4($sp) lw $t0, 4($sp) sw $t0, 64($sp) addiu $sp, $sp, 12 -lw $t0, tmp_24tmp_24tmp_24tmp_24($sp) -sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +lw $t0, 24242424($sp) +sw $t0, 7777($sp) addiu $sp, $sp, 8 -lw $t0, tmp_8tmp_8tmp_8tmp_8($sp) -sw $t0, tmp_5tmp_5tmp_5tmp_5($sp) +lw $t0, 8888($sp) +sw $t0, 5555($sp) addiu $sp, $sp, 8 -lw $t0, tmp_6tmp_6tmp_6tmp_6($sp) -sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) +lw $t0, 6666($sp) +sw $t0, 3333($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1249,8 +1233,7 @@ addi $sp, $sp, -4 #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 32($sp) @@ -1270,8 +1253,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Let li $a0, 0 @@ -1326,8 +1308,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Point-Dispatch li $a0, 0 @@ -1344,8 +1325,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Assignment #Binary @@ -1376,8 +1356,8 @@ addiu $sp, $sp, 12 addiu $sp, $sp, 8 j _loop_15 _pool_15: -lw $t0, tmp_24tmp_24tmp_24tmp_24($sp) -sw $t0, tmp_11tmp_11tmp_11tmp_11($sp) +lw $t0, 24242424($sp) +sw $t0, 11111111($sp) addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips deleted file mode 100644 index 5707ee72..00000000 --- a/tests/codegen/complex.mips +++ /dev/null @@ -1,887 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_2: .asciiz "=(\n" -string_3: .asciiz "=)\n" -string_5: .asciiz "+" -string_6: .asciiz "I" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Complex_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main -Complex_name: .asciiz "Complex" -Complex_VT: -.word Complex_INH -.word Complex.init -.word Complex.print -.word Complex.reflect_0 -.word Complex.reflect_X -.word Complex.reflect_Y - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -lw $t0, 12($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 13 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 52($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_1 -_if_1: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 15 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 60($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_1: -addiu $sp, $sp, 8 -lw $t0, tmp_15tmp_15tmp_15tmp_15($sp) -sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Complex.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Complex.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Complex_name -jr $ra -Complex.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Complex.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 12 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 2 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 7 offset 2 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 9 offset 2 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 52($sp) -j _fi_4 -_if_4: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 18 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 72($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 64($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Complex.reflect_0: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 12($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 12($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 40($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Complex.reflect_X: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 12($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Complex.reflect_Y: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 12($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index b95be354..dfc81a2e 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -340,8 +340,7 @@ addi $sp, $sp, -4 #obj 3 offset 1 result Main.main jal Main.main sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 j Object.abort #--------------End Initial Code--------------- Main.Constructor: @@ -382,8 +381,7 @@ addi $sp, $sp, -4 #obj 2 offset 5 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -403,22 +401,19 @@ addiu $sp, $sp, -4 #obj 1 offset 8 result IO.in_int jal IO.in_int sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 2 offset 8 result Main.fib jal Main.fib sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Dispatch in place #obj 3 offset 8 result IO.out_int jal IO.out_int sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -436,8 +431,7 @@ addi $sp, $sp, -4 #obj 2 offset 10 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 32($sp) @@ -577,8 +571,8 @@ sw $t1, 4($sp) lw $t0, 4($sp) sw $t0, 64($sp) addiu $sp, $sp, 8 -lw $t0, tmp_21tmp_21tmp_21tmp_21($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 21212121($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index c4b2058c..ef37489d 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -443,8 +443,7 @@ addi $sp, $sp, -4 #obj 3 offset 1 result Main.main jal Main.main sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 j Object.abort #--------------End Initial Code--------------- Graph.Constructor: @@ -543,8 +542,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Args: 0 li $a0, 0 @@ -557,8 +555,7 @@ sw $t1, 4($sp) #obj 4 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 32($sp) @@ -585,8 +582,7 @@ sw $t0, 4($sp) #obj 3 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 44($sp) @@ -616,8 +612,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -641,8 +636,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -773,8 +767,7 @@ sw $t0, 4($sp) #obj 3 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 28($sp) @@ -819,8 +812,7 @@ sw $t1, 4($sp) #obj 3 offset 6 result IO.out_int jal IO.out_int sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Point-Dispatch li $a0, 0 @@ -837,8 +829,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 24($sp) @@ -937,8 +928,7 @@ addi $sp, $sp, -4 #obj 3 offset 6 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Self-Dispatch li $a0, 0 @@ -961,8 +951,7 @@ sw $t1, 4($sp) #obj 3 offset 9 result IO.out_int jal IO.out_int sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 36($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Self-Dispatch li $a0, 0 @@ -986,8 +975,7 @@ addi $sp, $sp, -4 #obj 3 offset 12 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Self-Dispatch li $a0, 0 @@ -1010,8 +998,7 @@ sw $t1, 4($sp) #obj 3 offset 15 result IO.out_int jal IO.out_int sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 60($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Self-Dispatch li $a0, 0 @@ -1035,8 +1022,7 @@ addi $sp, $sp, -4 #obj 3 offset 18 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 72($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Self-Dispatch li $a0, 0 @@ -1059,8 +1045,7 @@ sw $t1, 4($sp) #obj 3 offset 21 result IO.out_int jal IO.out_int sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 84($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 76($sp) @@ -1115,8 +1100,7 @@ sw $t0, 4($sp) #obj 2 offset 5 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -1152,8 +1136,7 @@ sw $t0, 4($sp) #obj 2 offset 5 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -1215,8 +1198,7 @@ sw $t0, 4($sp) #obj 6 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1243,8 +1225,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) bnez $t0, _if_4 @@ -1272,8 +1253,7 @@ sw $t0, 4($sp) #obj 2 offset 10 result EList.tail jal EList.tail sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 #Args: 0 li $a0, 0 @@ -1285,8 +1265,7 @@ sw $t0, 4($sp) #obj 4 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Args: 0 #Self-Dispatch @@ -1303,15 +1282,13 @@ sw $t0, 4($sp) #obj 2 offset 13 result EList.head jal EList.head sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 52($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 #Dispatch in place #obj 7 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 40($sp) @@ -1355,8 +1332,7 @@ addi $sp, $sp, -4 #obj 3 offset 5 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1472,8 +1448,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Point-Dispatch li $a0, 0 @@ -1490,8 +1465,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 20($sp) @@ -1546,8 +1520,7 @@ sw $t0, 4($sp) #obj 2 offset 5 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -1583,8 +1556,7 @@ sw $t0, 4($sp) #obj 2 offset 5 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -1646,8 +1618,7 @@ sw $t0, 4($sp) #obj 6 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1678,8 +1649,7 @@ addi $sp, $sp, -4 #obj 3 offset 5 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -1795,8 +1765,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Point-Dispatch li $a0, 0 @@ -1813,8 +1782,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 20($sp) @@ -1962,8 +1930,7 @@ sw $t0, 16($sp) #obj 10 offset 9 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 36($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $t0, 4($sp) bnez $t0, _body_7 @@ -2006,15 +1973,13 @@ sw $t1, 4($sp) #obj 3 offset 24 result Parse.parse_line jal Parse.parse_line sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 96($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 5 offset 4 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 16($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Assignment #Self-Dispatch @@ -2031,8 +1996,7 @@ sw $t0, 4($sp) #obj 2 offset 26 result IO.in_string jal IO.in_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 104($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 lw $t0, 4($sp) lw $t1, 104($sp) @@ -2043,8 +2007,8 @@ addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_7 _pool_7: -lw $t0, tmp_26tmp_26tmp_26tmp_26($sp) -sw $t0, tmp_6tmp_6tmp_6tmp_6($sp) +lw $t0, 26262626($sp) +sw $t0, 6666($sp) addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) @@ -2055,8 +2019,8 @@ sw $t1, 4($sp) lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 -lw $t0, tmp_8tmp_8tmp_8tmp_8($sp) -sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) +lw $t0, 8888($sp) +sw $t0, 3333($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -2101,8 +2065,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Integer li $a0, 0 @@ -2190,8 +2153,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Args: 1 li $a0, 0 @@ -2211,21 +2173,19 @@ sw $t1, 4($sp) #obj 8 offset 5 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 16 #Dispatch in place #obj 10 offset 9 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 36($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, tmp_27tmp_27tmp_27tmp_27($sp) -sw $t0, tmp_16tmp_16tmp_16tmp_16($sp) +lw $t0, 27272727($sp) +sw $t0, 16161616($sp) addiu $sp, $sp, 8 -lw $t0, tmp_17tmp_17tmp_17tmp_17($sp) -sw $t0, tmp_14tmp_14tmp_14tmp_14($sp) +lw $t0, 17171717($sp) +sw $t0, 14141414($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 12($sp) @@ -2242,8 +2202,8 @@ sw $t1, 4($sp) lw $t0, 4($sp) sw $t0, 44($sp) addiu $sp, $sp, 8 -lw $t0, tmp_16tmp_16tmp_16tmp_16($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 16161616($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -2540,8 +2500,7 @@ sw $t0, 4($sp) #obj 2 offset 46 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 184($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 #Integer li $a0, 0 @@ -2699,8 +2658,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Integer li $a0, 0 @@ -2745,8 +2703,7 @@ addiu $sp, $sp, -4 #obj 4 offset 3 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #loading label li $a0, 0 @@ -2794,8 +2751,7 @@ addiu $sp, $sp, -4 #obj 4 offset 3 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #loading label li $a0, 0 @@ -2831,8 +2787,7 @@ sw $t0, 4($sp) #obj 3 offset 25 result Parse.a2i_aux jal Parse.a2i_aux sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 100($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 40($sp) @@ -2883,8 +2838,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Integer li $a0, 1 @@ -2899,15 +2853,13 @@ addiu $sp, $sp, 8 #obj 7 offset 6 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place #obj 9 offset 34 result Parse.a2i jal Parse.a2i sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 136($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 76($sp) @@ -2966,8 +2918,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Integer li $a0, 1 @@ -2982,15 +2933,13 @@ addiu $sp, $sp, 8 #obj 7 offset 6 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place #obj 9 offset 44 result Parse.a2i_aux jal Parse.a2i_aux sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 176($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) not $t0, $t0 @@ -3192,15 +3141,13 @@ addiu $sp, $sp, -4 #obj 4 offset 3 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place #obj 6 offset 35 result Parse.c2i jal Parse.c2i sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 140($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 28($sp) lw $t1, 4($sp) @@ -3351,8 +3298,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) @@ -3378,8 +3324,7 @@ addiu $sp, $sp, 8 #obj 11 offset 10 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $t0, 4($sp) lw $t1, 224($sp) @@ -3463,8 +3408,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result String.length jal String.length sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) @@ -3490,8 +3434,7 @@ addiu $sp, $sp, 8 #obj 11 offset 10 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $t0, 4($sp) lw $t1, 276($sp) @@ -3513,17 +3456,17 @@ lw $t0, 4($sp) sw $t0, 216($sp) _fi_38: addiu $sp, $sp, 8 -lw $t0, tmp_70tmp_70tmp_70tmp_70($sp) -sw $t0, tmp_15tmp_15tmp_15tmp_15($sp) +lw $t0, 70707070($sp) +sw $t0, 15151515($sp) addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_36 _pool_36: -lw $t0, tmp_16tmp_16tmp_16tmp_16($sp) -sw $t0, tmp_9tmp_9tmp_9tmp_9($sp) +lw $t0, 16161616($sp) +sw $t0, 9999($sp) addiu $sp, $sp, 8 -lw $t0, tmp_10tmp_10tmp_10tmp_10($sp) -sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) +lw $t0, 10101010($sp) +sw $t0, 7777($sp) addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) @@ -3534,8 +3477,8 @@ sw $t1, 4($sp) lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 -lw $t0, tmp_9tmp_9tmp_9tmp_9($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) +lw $t0, 9999($sp) +sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -3552,8 +3495,7 @@ addiu $sp, $sp, -4 #obj 1 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) lw $t1, 12($sp) @@ -3592,8 +3534,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Point-Dispatch li $a0, 0 @@ -3610,8 +3551,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) sw $t0, 20($sp) diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index 2d8ee4c6..0a174992 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -338,8 +338,7 @@ addi $sp, $sp, -4 #obj 3 offset 1 result Main.main jal Main.main sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 j Object.abort #--------------End Initial Code--------------- Main.Constructor: @@ -376,8 +375,7 @@ addi $sp, $sp, -4 #obj 2 offset 4 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 16($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $v0, 4($sp) addiu $sp, $sp, -4 diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips deleted file mode 100644 index 8838297b..00000000 --- a/tests/codegen/life.mips +++ /dev/null @@ -1,5641 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_7: .asciiz "\n" -string_9: .asciiz "\n" -string_10: .asciiz "\n" -string_12: .asciiz " " -string_14: .asciiz " " -string_16: .asciiz " " -string_18: .asciiz " " -string_21: .asciiz " " -string_22: .asciiz " " -string_25: .asciiz " " -string_26: .asciiz " " -string_29: .asciiz " " -string_30: .asciiz " " -string_33: .asciiz " " -string_34: .asciiz " " -string_37: .asciiz " " -string_38: .asciiz " " -string_39: .asciiz "X" -string_41: .asciiz "X" -string_43: .asciiz "X" -string_45: .asciiz "X" -string_47: .asciiz "X" -string_49: .asciiz "X" -string_51: .asciiz "X" -string_53: .asciiz "X" -string_57: .asciiz "-" -string_58: .asciiz "X" -string_60: .asciiz "-" -string_61: .asciiz "X" -string_62: .asciiz "X" -string_64: .asciiz "\nPlease chose a number:\n" -string_65: .asciiz "\t1: A cross\n" -string_66: .asciiz "\t2: A slash from the upper left to lower right\n" -string_67: .asciiz "\t3: A slash from the upper right to lower left\n" -string_68: .asciiz "\t4: An X\n" -string_69: .asciiz "\t5: A greater than sign \n" -string_70: .asciiz "\t6: A less than sign\n" -string_71: .asciiz "\t7: Two greater than signs\n" -string_72: .asciiz "\t8: Two less than signs\n" -string_73: .asciiz "\t9: A 'V'\n" -string_74: .asciiz "\t10: An inverse 'V'\n" -string_75: .asciiz "\t11: Numbers 9 and 10 combined\n" -string_76: .asciiz "\t12: A full grid\n" -string_77: .asciiz "\t13: A 'T'\n" -string_78: .asciiz "\t14: A plus '+'\n" -string_79: .asciiz "\t15: A 'W'\n" -string_80: .asciiz "\t16: An 'M'\n" -string_81: .asciiz "\t17: An 'E'\n" -string_82: .asciiz "\t18: A '3'\n" -string_83: .asciiz "\t19: An 'O'\n" -string_84: .asciiz "\t20: An '8'\n" -string_85: .asciiz "\t21: An 'S'\n" -string_86: .asciiz "Your choice => " -string_87: .asciiz "\n" -string_109: .asciiz " " -string_110: .asciiz " XXXX X XX X XXXX " -string_111: .asciiz " XX X XX X XX X XX X XX " -string_112: .asciiz " XX X XX X XX " -string_113: .asciiz "XXX X X X X XXXX " -string_114: .asciiz "XXXXX X XXXXX X XXXX" -string_115: .asciiz " X X X X X X X" -string_116: .asciiz "X X X X X X X " -string_117: .asciiz " X X XXXXX X X " -string_118: .asciiz "XXXXX X X X X " -string_119: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" -string_120: .asciiz "X X X X X X X X" -string_121: .asciiz " X X X X X" -string_122: .asciiz "X X X X X " -string_123: .asciiz " X XX X X X " -string_124: .asciiz "X X X XX X " -string_125: .asciiz " X X X X X" -string_126: .asciiz "X X X X X " -string_127: .asciiz "X X X X X X X X X" -string_128: .asciiz "X X X X X" -string_129: .asciiz " X X X X X " -string_130: .asciiz " XX XXXX XXXX XX " -string_131: .asciiz "Would you like to continue with the next generation? \n" -string_132: .asciiz "Please use lowercase y or n for your answer [y]: " -string_133: .asciiz "\n" -string_134: .asciiz "n" -string_136: .asciiz "\n\n" -string_137: .asciiz "Would you like to choose a background pattern? \n" -string_138: .asciiz "Please use lowercase y or n for your answer [n]: " -string_139: .asciiz "y" -string_141: .asciiz "Welcome to the Game of Life.\n" -string_142: .asciiz "There are many initial states to choose from. \n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Board_INH: -.word IO_INH -CellularAutomaton_INH: -.word Board_INH -Main_INH: -.word CellularAutomaton_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Board_name: .asciiz "Board" -Board_VT: -.word Board_INH -.word Board.size_of_board -.word Board.board_init -CellularAutomaton_name: .asciiz "CellularAutomaton" -CellularAutomaton_VT: -.word CellularAutomaton_INH -.word CellularAutomaton.init -.word CellularAutomaton.print -.word CellularAutomaton.num_cells -.word CellularAutomaton.cell -.word CellularAutomaton.north -.word CellularAutomaton.south -.word CellularAutomaton.east -.word CellularAutomaton.west -.word CellularAutomaton.northwest -.word CellularAutomaton.northeast -.word CellularAutomaton.southeast -.word CellularAutomaton.southwest -.word CellularAutomaton.neighbors -.word CellularAutomaton.cell_at_next_evolution -.word CellularAutomaton.evolve -.word CellularAutomaton.option -.word CellularAutomaton.prompt -.word CellularAutomaton.prompt2 -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -j Object.abort -#--------------End Initial Code--------------- -Board.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Board.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Board_name -jr $ra -Board.size_of_board: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Board.board_init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 15 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 16 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_2 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 20 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_3 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 21 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 25 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_5 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 28 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_6 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 128($sp) -sw $t1, 4($t0) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 132($sp) -sw $t1, 8($t0) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 136($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 136($sp) -sw $t1, 12($t0) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 32($sp) -j _fi_6 -_if_6: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 144($sp) -sw $t1, 4($t0) -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 148($sp) -sw $t1, 8($t0) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 152($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 152($sp) -sw $t1, 12($t0) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 48($sp) -_fi_6: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 64($sp) -j _fi_5 -_if_5: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 160($sp) -sw $t1, 4($t0) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 164($sp) -sw $t1, 8($t0) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 168($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 168($sp) -sw $t1, 12($t0) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_5: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 96($sp) -j _fi_4 -_if_4: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 176($sp) -sw $t1, 4($t0) -#Assignment -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 180($sp) -sw $t1, 8($t0) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 184($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 184($sp) -sw $t1, 12($t0) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 112($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 128($sp) -j _fi_3 -_if_3: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 192($sp) -sw $t1, 4($t0) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 196($sp) -sw $t1, 8($t0) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 200($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 200($sp) -sw $t1, 12($t0) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 144($sp) -_fi_3: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 160($sp) -j _fi_2 -_if_2: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 208($sp) -sw $t1, 4($t0) -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 212($sp) -sw $t1, 8($t0) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 216($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 216($sp) -sw $t1, 12($t0) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 176($sp) -_fi_2: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 192($sp) -j _fi_1 -_if_1: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 224($sp) -sw $t1, 4($t0) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 228($sp) -sw $t1, 8($t0) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 232($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 232($sp) -sw $t1, 12($t0) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 208($sp) -_fi_1: -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 236($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 216($sp) -addiu $sp, $sp, 8 -lw $t0, tmp_59tmp_59tmp_59tmp_59($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, CellularAutomaton_name -jr $ra -CellularAutomaton.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($t0) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 8 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_7 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 10 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_8: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_8 -j _pool_8 -_body_8: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 4 offset 3 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -#Dispatch in place -#obj 6 offset 21 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 84($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 24 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 96($sp) -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 108($sp) -sw $t1, -4($t0) -lw $t0, 4($sp) -sw $t0, 52($sp) -addiu $sp, $sp, 12 -addiu $sp, $sp, 8 -j _loop_8 -_pool_8: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_10 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 30 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 120($sp) -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 124($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 100($sp) -addiu $sp, $sp, 16 -lw $t0, tmp_31tmp_31tmp_31tmp_31($sp) -sw $t0, tmp_5tmp_5tmp_5tmp_5($sp) -addiu $sp, $sp, 8 -lw $t0, tmp_6tmp_6tmp_6tmp_6($sp) -sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.num_cells: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.cell: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_11 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 40($sp) -j _fi_11 -_if_11: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_12 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_11: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.north: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_13 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 5 offset 14 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 56($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 44($sp) -j _fi_13 -_if_13: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_14 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 48($sp) -_fi_13: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.south: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_15 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 5 offset 14 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 56($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 44($sp) -j _fi_15 -_if_15: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_16 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 48($sp) -_fi_15: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.east: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 44($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_17 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 5 offset 20 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 80($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 68($sp) -j _fi_17 -_if_17: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_18 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 72($sp) -_fi_17: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.west: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_19 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_20 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 5 offset 20 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 80($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 52($sp) -j _fi_20 -_if_20: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_21 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 56($sp) -_fi_20: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 72($sp) -j _fi_19 -_if_19: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_22 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 76($sp) -_fi_19: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.northwest: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_23 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_24 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 5 offset 22 result CellularAutomaton.north -jal CellularAutomaton.north -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 88($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 52($sp) -j _fi_24 -_if_24: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_25 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 56($sp) -_fi_24: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 80($sp) -j _fi_23 -_if_23: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_26 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 84($sp) -_fi_23: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.northeast: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_27 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 44($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_28 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 5 offset 26 result CellularAutomaton.north -jal CellularAutomaton.north -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 104($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 68($sp) -j _fi_28 -_if_28: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_29 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 72($sp) -_fi_28: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 96($sp) -j _fi_27 -_if_27: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_30 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 100($sp) -_fi_27: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.southeast: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_31 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 44($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_32 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 5 offset 26 result CellularAutomaton.south -jal CellularAutomaton.south -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 104($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 68($sp) -j _fi_32 -_if_32: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_33 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 72($sp) -_fi_32: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 96($sp) -j _fi_31 -_if_31: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_34 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 100($sp) -_fi_31: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.southwest: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_35 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_36 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 5 offset 22 result CellularAutomaton.south -jal CellularAutomaton.south -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 88($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 52($sp) -j _fi_36 -_if_36: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_37 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 56($sp) -_fi_36: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 80($sp) -j _fi_35 -_if_35: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_38 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 84($sp) -_fi_35: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.neighbors: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 16 result CellularAutomaton.north -jal CellularAutomaton.north -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 64($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_39 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_40 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_40 -_if_40: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_40: -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 24 result CellularAutomaton.south -jal CellularAutomaton.south -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 96($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_41 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_42 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_42 -_if_42: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_42: -addiu $sp, $sp, 8 -lw $t0, 36($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 68($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 124($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 124($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 32 result CellularAutomaton.east -jal CellularAutomaton.east -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 128($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_43 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_44 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_44 -_if_44: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_44: -addiu $sp, $sp, 8 -lw $t0, 36($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 104($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 156($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 156($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 40 result CellularAutomaton.west -jal CellularAutomaton.west -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 160($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_45 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_46 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_46 -_if_46: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_46: -addiu $sp, $sp, 8 -lw $t0, 36($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 140($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 48 result CellularAutomaton.northeast -jal CellularAutomaton.northeast -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 192($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_47 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_48 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_48 -_if_48: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_48: -addiu $sp, $sp, 8 -lw $t0, 36($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 176($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 220($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 220($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 56 result CellularAutomaton.northwest -jal CellularAutomaton.northwest -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 224($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_49 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_50 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_50 -_if_50: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_50: -addiu $sp, $sp, 8 -lw $t0, 36($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 212($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 252($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 252($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 64 result CellularAutomaton.southeast -jal CellularAutomaton.southeast -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 256($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_51 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_52 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_52 -_if_52: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_52: -addiu $sp, $sp, 8 -lw $t0, 36($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 248($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 284($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 284($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 72 result CellularAutomaton.southwest -jal CellularAutomaton.southwest -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 288($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_53 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_54 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_54 -_if_54: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_54: -addiu $sp, $sp, 8 -lw $t0, 36($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 284($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 288($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.cell_at_next_evolution: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 8 result CellularAutomaton.neighbors -jal CellularAutomaton.neighbors -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_55 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 14 result CellularAutomaton.neighbors -jal CellularAutomaton.neighbors -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 56($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_56 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_57 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_56 -_if_56: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 21 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 84($sp) -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_58 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_59 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_60 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_59 -_if_59: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_61 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_59: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 60($sp) -_fi_56: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 84($sp) -j _fi_55 -_if_55: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_62 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 88($sp) -_fi_55: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.evolve: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_63: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_63 -j _pool_63 -_body_63: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 19 result CellularAutomaton.cell_at_next_evolution -jal CellularAutomaton.cell_at_next_evolution -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 76($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 4 result String.concat -jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 76($sp) -sw $t1, -4($t0) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 88($sp) -sw $t1, -4($t0) -lw $t0, 4($sp) -sw $t0, 36($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_63 -_pool_63: -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 92($sp) -sw $t1, 4($t0) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 64($sp) -addiu $sp, $sp, 12 -lw $t0, tmp_24tmp_24tmp_24tmp_24($sp) -sw $t0, tmp_7tmp_7tmp_7tmp_7($sp) -addiu $sp, $sp, 8 -lw $t0, tmp_8tmp_8tmp_8tmp_8($sp) -sw $t0, tmp_5tmp_5tmp_5tmp_5($sp) -addiu $sp, $sp, 8 -lw $t0, tmp_6tmp_6tmp_6tmp_6($sp) -sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.option: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_64 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 9 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 36($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_65 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 12 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_66 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 15 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 60($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_67 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 18 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 72($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_68 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 21 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 84($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_69 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 24 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 96($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_70 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 27 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 108($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_71 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 30 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 120($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 128($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_72 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 33 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 132($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_73 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 36 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 144($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 152($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_74 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 39 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 156($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 164($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_75 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 42 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 168($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 176($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_76 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 45 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 180($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_77 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 48 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 192($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 200($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_78 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 51 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 204($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 212($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_79 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 54 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 216($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 224($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_80 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 57 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 228($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 236($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_81 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 60 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 240($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 248($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_82 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 63 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 252($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 260($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_83 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 66 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 264($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 272($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_84 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 69 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 276($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 284($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_85 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 72 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 288($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 296($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_86 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 75 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 300($sp) -addiu $sp, $sp, 4 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 308($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 77 result IO.in_int -jal IO.in_int -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 308($sp) -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 308($sp) -sw $t1, -4($t0) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 316($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_87 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 80 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 320($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 332($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_88 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 348($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_89 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 364($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_90 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 380($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_91 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 396($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_92 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 412($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_93 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 428($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_94 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 444($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_95 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 460($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_96 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 476($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_97 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 492($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 11 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_98 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 508($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 12 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_99 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 524($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 13 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_100 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 540($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 14 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_101 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 556($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 15 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_102 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 572($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 16 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_103 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 588($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 17 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_104 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 604($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 18 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_105 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 620($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 19 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_106 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 636($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 20 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_107 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 652($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 21 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_108 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_109 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 20($sp) -j _fi_108 -_if_108: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_110 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 24($sp) -_fi_108: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 40($sp) -j _fi_107 -_if_107: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_111 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_107: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 60($sp) -j _fi_106 -_if_106: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_112 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 64($sp) -_fi_106: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 80($sp) -j _fi_105 -_if_105: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_113 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 84($sp) -_fi_105: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 100($sp) -j _fi_104 -_if_104: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_114 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 104($sp) -_fi_104: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 120($sp) -j _fi_103 -_if_103: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_115 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 124($sp) -_fi_103: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 140($sp) -j _fi_102 -_if_102: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_116 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 144($sp) -_fi_102: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 160($sp) -j _fi_101 -_if_101: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_117 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 164($sp) -_fi_101: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 180($sp) -j _fi_100 -_if_100: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_118 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 184($sp) -_fi_100: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 200($sp) -j _fi_99 -_if_99: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_119 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 204($sp) -_fi_99: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 220($sp) -j _fi_98 -_if_98: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_120 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 224($sp) -_fi_98: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 240($sp) -j _fi_97 -_if_97: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_121 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 244($sp) -_fi_97: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 260($sp) -j _fi_96 -_if_96: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_122 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 264($sp) -_fi_96: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 280($sp) -j _fi_95 -_if_95: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_123 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 284($sp) -_fi_95: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 300($sp) -j _fi_94 -_if_94: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_124 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 304($sp) -_fi_94: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 320($sp) -j _fi_93 -_if_93: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_125 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 324($sp) -_fi_93: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 340($sp) -j _fi_92 -_if_92: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_126 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 344($sp) -_fi_92: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 360($sp) -j _fi_91 -_if_91: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_127 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 364($sp) -_fi_91: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 380($sp) -j _fi_90 -_if_90: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_128 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 384($sp) -_fi_90: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 400($sp) -j _fi_89 -_if_89: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_129 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 404($sp) -_fi_89: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 420($sp) -j _fi_88 -_if_88: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_130 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 424($sp) -_fi_88: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 724($sp) -addiu $sp, $sp, 104 -lw $t0, tmp_186tmp_186tmp_186tmp_186($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 12($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.prompt: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_131 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 9 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 36($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_132 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 12 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) -addiu $sp, $sp, 4 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 14 result IO.in_string -jal IO.in_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 56($sp) -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 56($sp) -sw $t1, -4($t0) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_133 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 17 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 68($sp) -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_134 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_135 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 20($sp) -j _fi_135 -_if_135: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 24($sp) -_fi_135: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 72($sp) -addiu $sp, $sp, 20 -lw $t0, tmp_23tmp_23tmp_23tmp_23($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 12($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -CellularAutomaton.prompt2: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_136 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 8 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 32($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_137 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 11 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 44($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_138 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 14 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 56($sp) -addiu $sp, $sp, 4 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 16 result IO.in_string -jal IO.in_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 64($sp) -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 64($sp) -sw $t1, -4($t0) -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_139 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_140 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 20($sp) -j _fi_140 -_if_140: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 24($sp) -_fi_140: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 72($sp) -addiu $sp, $sp, 20 -lw $t0, tmp_22tmp_22tmp_22tmp_22($sp) -sw $t0, tmp_3tmp_3tmp_3tmp_3($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_141 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 10 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_142 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 12 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) -addiu $sp, $sp, 8 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_143: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 14 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 56($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -bnez $t0, _body_143 -j _pool_143 -_body_143: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 64($sp) -sw $t1, -4($t0) -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 17 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 68($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -lw $t1, 68($sp) -sw $t1, -4($t0) -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, CellularAutomaton_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result CellularAutomaton.Constructor -la $v0, 1 -jal CellularAutomaton.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 88($sp) -sw $t1, 4($t0) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_144: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -bnez $t0, _body_144 -j _pool_144 -_body_144: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 28 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 112($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -bnez $t0, _if_145 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 116($sp) -sw $t1, -4($t0) -lw $t0, 4($sp) -sw $t0, 12($sp) -j _fi_145 -_if_145: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 128($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 136($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) -_fi_145: -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_144 -_pool_144: -lw $t0, 4($sp) -sw $t0, 80($sp) -addiu $sp, $sp, 20 -addiu $sp, $sp, 8 -j _loop_143 -_pool_143: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 112($sp) -addiu $sp, $sp, 16 -lw $t0, tmp_35tmp_35tmp_35tmp_35($sp) -sw $t0, tmp_6tmp_6tmp_6tmp_6($sp) -addiu $sp, $sp, 8 -lw $t0, tmp_7tmp_7tmp_7tmp_7($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 12($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index c94bfa16..59ff507f 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -358,8 +358,7 @@ addi $sp, $sp, -4 #obj 3 offset 1 result Main.main jal Main.main sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 j Object.abort #--------------End Initial Code--------------- List.Constructor: @@ -408,8 +407,7 @@ sw $t0, 4($sp) #obj 2 offset 5 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 #Integer li $a0, 0 @@ -443,8 +441,7 @@ sw $t0, 4($sp) #obj 2 offset 5 result Object.abort jal Object.abort sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) @@ -506,8 +503,7 @@ sw $t0, 4($sp) #obj 6 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $v0, 4($sp) addiu $sp, $sp, -4 @@ -637,8 +633,7 @@ sw $t0, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) bnez $t0, _if_1 @@ -665,15 +660,13 @@ sw $t0, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 3 offset 10 result IO.out_int jal IO.out_int sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -691,8 +684,7 @@ addi $sp, $sp, -4 #obj 2 offset 12 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -713,15 +705,13 @@ sw $t0, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place #obj 3 offset 15 result Main.print_list jal Main.print_list sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 60($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 36($sp) @@ -746,8 +736,7 @@ addi $sp, $sp, -4 #obj 2 offset 17 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 68($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 56($sp) @@ -823,8 +812,7 @@ addiu $sp, $sp, -4 #obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Args: 0 #Integer @@ -835,8 +823,7 @@ addiu $sp, $sp, -4 #obj 7 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Args: 0 #Integer @@ -847,8 +834,7 @@ addiu $sp, $sp, -4 #obj 9 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Args: 0 #Integer @@ -859,8 +845,7 @@ addiu $sp, $sp, -4 #obj 11 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Args: 0 #Integer @@ -871,8 +856,7 @@ addiu $sp, $sp, -4 #obj 13 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 64($sp) @@ -901,8 +885,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) li $t1, 1 @@ -931,8 +914,7 @@ sw $t1, 4($sp) #obj 2 offset 23 result Main.print_list jal Main.print_list sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 92($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Assignment #Point-Dispatch @@ -950,8 +932,7 @@ sw $t1, 4($sp) #obj 2 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) lw $t1, 100($sp) diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips deleted file mode 100644 index 7c7c150f..00000000 --- a/tests/codegen/palindrome.mips +++ /dev/null @@ -1,759 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_4: .asciiz "enter a string\n" -string_6: .asciiz "that was not a palindrome\n" -string_7: .asciiz "that was a palindrome\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.pal -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.pal: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_2 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 3 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 7 offset 6 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) -addiu $sp, $sp, 12 -lw $t0, 32($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 48($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_3 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 56($sp) -j _fi_3 -_if_3: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 132($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 6 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) -addiu $sp, $sp, 12 -#Dispatch in place -#obj 8 offset 35 result Main.pal -jal Main.pal -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 140($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 88($sp) -_fi_3: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 108($sp) -j _fi_2 -_if_2: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 112($sp) -_fi_2: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 132($sp) -j _fi_1 -_if_1: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 136($sp) -_fi_1: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($t0) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_4 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 7 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 28($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 10 result IO.in_string -jal IO.in_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 2 offset 10 result Main.pal -jal Main.pal -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_5 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 12 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 20($sp) -j _fi_5 -_if_5: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_7 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 14 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 56($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 28($sp) -_fi_5: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips deleted file mode 100644 index 6481c5f6..00000000 --- a/tests/codegen/primes.mips +++ /dev/null @@ -1,829 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "2 is trivially prime.\n" -string_7: .asciiz " is prime.\n" -string_9: .asciiz "continue" -string_10: .asciiz "halt" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 24 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 5 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, 4($t0) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 8($t0) -#Integer -li $a0, 500 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 16($t0) -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_2: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -bnez $t0, _body_2 -j _pool_2 -_body_2: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 56($sp) -sw $t1, 8($t0) -#Assignment -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 60($sp) -sw $t1, 12($t0) -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_3: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 124($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 24($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 36($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_5 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -j _fi_5 -_if_5: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 48($sp) -_fi_5: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 72($sp) -j _fi_4 -_if_4: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 76($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_3 -j _pool_3 -_body_3: -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 148($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 152($sp) -sw $t1, 12($t0) -addiu $sp, $sp, 8 -j _loop_3 -_pool_3: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 164($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 172($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 176($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_6 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_6 -_if_6: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 188($sp) -sw $t1, 4($t0) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 196($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 49 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 196($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_7 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 51 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 204($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 52($sp) -_fi_6: -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 216($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 220($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_8 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 20($sp) -j _fi_8 -_if_8: -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_10 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 1 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 28($sp) -_fi_8: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 192($sp) -addiu $sp, $sp, 20 -addiu $sp, $sp, 8 -j _loop_2 -_pool_2: -lw $t0, 4($sp) -lw $t1, 232($sp) -sw $t1, 20($t0) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 9621b73b..7d075dec 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -338,8 +338,7 @@ addi $sp, $sp, -4 #obj 3 offset 1 result Main.main jal Main.main sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 j Object.abort #--------------End Initial Code--------------- Main.Constructor: @@ -412,8 +411,7 @@ addiu $sp, $sp, 8 #obj 4 offset 1 result Object.type_name jal Object.type_name sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Args: 0 #Integer @@ -429,15 +427,13 @@ addiu $sp, $sp, -4 #obj 7 offset 3 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place #obj 8 offset 12 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 48($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch @@ -454,8 +450,7 @@ addiu $sp, $sp, -4 #obj 1 offset 1 result Bool.type_name jal Bool.type_name sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 4 #Args: 0 #Integer @@ -471,15 +466,13 @@ addiu $sp, $sp, -4 #obj 4 offset 3 result String.substr jal String.substr sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place #obj 13 offset 5 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -497,8 +490,7 @@ addi $sp, $sp, -4 #obj 2 offset 18 result IO.out_string jal IO.out_string sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 72($sp) +addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 64($sp) diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips deleted file mode 100644 index 55cd9535..00000000 --- a/tests/codegen/sort-list.mips +++ /dev/null @@ -1,1625 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_2: .asciiz "\n" -string_4: .asciiz "How many numbers to sort? " -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -List_INH: -.word IO_INH -Cons_INH: -.word List_INH -Nil_INH: -.word List_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -List_name: .asciiz "List" -List_VT: -.word List_INH -.word List.isNil -.word List.cons -.word List.car -.word List.cdr -.word List.rev -.word List.sort -.word List.insert -.word List.rcons -.word List.print_list -Cons_name: .asciiz "Cons" -Cons_VT: -.word Cons_INH -.word Cons.isNil -.word Cons.init -.word Cons.car -.word Cons.cdr -.word Cons.rev -.word Cons.sort -.word Cons.insert -.word Cons.rcons -.word Cons.print_list -Nil_name: .asciiz "Nil" -Nil_VT: -.word Nil_INH -.word Nil.isNil -.word Nil.rev -.word Nil.sort -.word Nil.insert -.word Nil.rcons -.word Nil.print_list -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.iota -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -li $v0, 1 -lw $a0, -4($sp) -syscall -jr $ra - - -IO.in_string: -move $a3, $ra -la $a0, buffer -li $a1, 65536 -li $v0, 8 -syscall -addiu $sp, $sp, -4 -sw $a0, 0($sp) -jal String.length -addiu $sp, $sp, 4 -move $a2, $v0 -addiu $a2, $a2, -1 -move $a0, $v0 -li $v0, 9 -syscall -move $v1, $v0 -la $a0, buffer -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($v1) -move $ra, $a3 -jr $ra - - -IO.in_int: -li $v0, 5 -syscall -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, -4($sp) -_stringlength.loop: -lb $a1, 0($a0) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -lw $a1, -4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -lw $a0, -12($sp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents -addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -j Object.abort -#--------------End Initial Code--------------- -List.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -List.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, List_name -jr $ra -List.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) -addiu $sp, $sp, 0 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -List.cons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 4 offset 3 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -lw $t0, tmp_9tmp_9tmp_9tmp_9($sp) -sw $t0, tmp_4tmp_4tmp_4tmp_4($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -List.car: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 360000 -syscall -sw $v0, 4($sp) -la $a1, Int_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Int.Constructor -la $v0, 1 -jal Int.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -List.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, List_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result List.Constructor -la $v0, 1 -jal List.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -List.rev: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 4 result List.cdr -jal List.cdr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 16($sp) -addiu $sp, $sp, 0 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -List.sort: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 4 result List.cdr -jal List.cdr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 16($sp) -addiu $sp, $sp, 0 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -List.insert: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result List.cdr -jal List.cdr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) -addiu $sp, $sp, 0 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -List.rcons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result List.cdr -jal List.cdr -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) -addiu $sp, $sp, 0 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -List.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 4 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 16($sp) -addiu $sp, $sp, 0 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Cons_name -jr $ra -Cons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, 4($t0) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 8($t0) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.car: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.rev: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 4 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.sort: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 4 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.insert: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 8 offset 5 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 48($sp) -j _fi_1 -_if_1: -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 6 offset 3 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 72($sp) -_fi_1: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.rcons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 8 offset 5 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Cons.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 6 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 9 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 36($sp) -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 36($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Nil.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Nil.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Nil_name -jr $ra -Nil.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Nil.rev: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -sw $t0, 4($sp) -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Nil.sort: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -sw $t0, 4($sp) -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Nil.insert: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 6 result Nil.rcons -jal Nil.rcons -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 24($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Nil.rcons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 6 offset 3 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Nil.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.iota: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Nil_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Nil.Constructor -la $v0, 1 -jal Nil.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 4($t0) -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_3: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_3 -j _pool_3 -_body_3: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 6 offset 3 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 12($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -lw $t1, 80($sp) -sw $t1, 4($t0) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 92($sp) -sw $t1, -4($t0) -lw $t0, 4($sp) -sw $t0, 40($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_3 -_pool_3: -lw $t0, tmp_23tmp_23tmp_23tmp_23($sp) -sw $t0, tmp_8tmp_8tmp_8tmp_8($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_4 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 5 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 20($sp) -addiu $sp, $sp, 8 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 10 result IO.in_int -jal IO.in_int -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 2 offset 10 result Main.iota -jal Main.iota -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 40($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall From aa3662e6cf6f6f04cea5eba4e2b62fb634d5ab7d Mon Sep 17 00:00:00 2001 From: oschdez97 Date: Mon, 30 Nov 2020 14:52:43 -0500 Subject: [PATCH 104/140] all test compiling correctly, some wrong answers thrown --- src/code_generation/statics/IO.s | 10 +- src/code_generation/statics/String.s | 7 +- src/code_generation/variables.py | 6 +- src/visitors/to_mips.py | 12 +- src/visitors/transpilator.py | 11 +- tests/codegen/arith.mips | 1295 +++--- tests/codegen/atoi.mips | 2224 ++++++++++ tests/codegen/book_list.mips | 1470 +++++++ tests/codegen/cells.mips | 325 +- tests/codegen/complex.mips | 923 +++++ tests/codegen/fib.mips | 117 +- tests/codegen/graph.mips | 921 +++-- tests/codegen/hairyscary.mips | 1414 +++++++ tests/codegen/hello_world.mips | 69 +- tests/codegen/io.mips | 828 ++++ tests/codegen/life.mips | 5679 ++++++++++++++++++++++++++ tests/codegen/list.mips | 221 +- tests/codegen/new_complex.mips | 1175 ++++++ tests/codegen/palindrome.mips | 772 ++++ tests/codegen/primes.mips | 847 ++++ tests/codegen/print-cool.mips | 81 +- tests/codegen/sort-list.mips | 1729 ++++++++ 22 files changed, 18881 insertions(+), 1255 deletions(-) create mode 100644 tests/codegen/atoi.mips create mode 100644 tests/codegen/book_list.mips create mode 100644 tests/codegen/complex.mips create mode 100644 tests/codegen/hairyscary.mips create mode 100644 tests/codegen/io.mips create mode 100644 tests/codegen/life.mips create mode 100644 tests/codegen/new_complex.mips create mode 100644 tests/codegen/palindrome.mips create mode 100644 tests/codegen/primes.mips create mode 100644 tests/codegen/sort-list.mips diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s index aee7405f..5abfd78e 100644 --- a/src/code_generation/statics/IO.s +++ b/src/code_generation/statics/IO.s @@ -20,27 +20,29 @@ la $a0, buffer li $a1, 65536 li $v0, 8 syscall +sw $a1, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) jal String.length addiu $sp, $sp, 4 -move $a2, $v0 +move $a2, $sp addiu $a2, $a2, -1 move $a0, $v0 li $v0, 9 syscall move $v1, $v0 la $a0, buffer +li $a2, 0 _in_string.loop: beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) +lb $a1, 4($sp) +sb $a1, 4($sp) addiu $a0, $a0, 1 addiu $v1, $v1, 1 addiu $a2, $a2, -1 j _in_string.loop _in_string.end: -sb $zero, 0($v1) +sb $zero, 0($sp) move $ra, $a3 jr $ra diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s index c3641f9f..241f3ac4 100644 --- a/src/code_generation/statics/String.s +++ b/src/code_generation/statics/String.s @@ -1,13 +1,14 @@ String.length: -lw $a0, -4($sp) +lw $a0, 4($sp) _stringlength.loop: -lb $a1, 0($a0) +lb $a1, 0($sp) beqz $a1, _stringlength.end addiu $a0, $a0, 1 j _stringlength.loop _stringlength.end: -lw $a1, -4($sp) +j Object.abort +lw $a1, 4($sp) subu $v0, $a0, $a1 jr $ra diff --git a/src/code_generation/variables.py b/src/code_generation/variables.py index bc3d5ffc..3c3b72f2 100644 --- a/src/code_generation/variables.py +++ b/src/code_generation/variables.py @@ -11,7 +11,7 @@ def add_var(self, name): def id(self, name): if not name in self.stack: self.add_var(name) - return len(self.stack) - self.stack[name] + 1 + return int(len(self.stack) - self.stack[name] + 1) def pop_var(self): if not len(self.vars): @@ -21,11 +21,11 @@ def pop_var(self): def add_temp(self): name = len(self.stack) + 1 self.add_var(str(name)) - return str(str(name)) + return str(name) def peek_last(self): # print(self.vars) - return self.vars[-1] + return int(self.vars[-1]) def get_stack(self): stack = '|' diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 96b6021e..e12666be 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -131,7 +131,7 @@ def visit(self, node): def visit(self, node): self.code.append("lw $t0, {}($sp)\n".format(4*node.right)) self.code.append("lw $t1, {}($sp)\n".format(4*node.left)) - self.code.append("sw $t1, {}($t0)\n".format(4*node.offset)) + self.code.append("sw $t1, {}($sp)\n".format(4*node.offset)) @visitor.when(MemoToVarIL) def visit(self, node): @@ -195,9 +195,13 @@ def visit(self, node): @visitor.when(ReturnIL) def visit(self, node): self.code.append("lw $v0, 4($sp)\n") - self.code.append("addiu $sp, $sp, -4\n") + self.code.append("li $a0, 0\n") + self.code.append("sw $a0, ($sp)\n") + self.code.append("addi $sp, $sp, -4\n") # self.code.append("lw $ra, 4($sp)\n") - self.code.append("addiu $sp, $sp, -4\n") + self.code.append("li $a0, 0\n") + self.code.append("sw $a0, ($sp)\n") + self.code.append("addi $sp, $sp, -4\n") self.code.append("jr $ra\n") @visitor.when(DispatchIL) @@ -220,7 +224,7 @@ def visit(self, node): self.code.append("jal {}\n".format(node.result)) self.code.append("sw $a1, {}($sp)\n".format(0)) self.code.append("addi $sp, $sp, -4\n") - # self.code.append("lw $ra, {}($sp)\n".format(4 * (int(node.offset) + 1))) + # self.code.append("lw $ra, {}($sp)\n".format(4)) @visitor.when(DispatchParentIL) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index de701a23..e561df26 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -197,7 +197,10 @@ def visit(self, node): variables.add_temp() self.visit(node.body, variables) - self.code.append(ReturnIL()) + if self.current_class == 'Main' and node.id == 'main': + self.code.append("j Object.abort\n") + else: + self.code.append(ReturnIL()) @visitor.when(VarDeclarationNode) def visit(self, node, variables): @@ -534,8 +537,10 @@ def visit(self, node, variables): self.code.append(CommentIL('Args: ' + str(i))) i += 1 self.visit(p, variables) - - method = node.obj.type + '.' + node.id + if isinstance(node.obj,NewNode): + method = node.obj.type + '.' + node.id + else: + method = node.obj.id + '.' + node.id # print('--method: ', method) self.code.append(DispatchParentIL(variables.id(result), variables.id(name), method)) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index d7f05ea2..a089dbd3 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -198,27 +198,29 @@ la $a0, buffer li $a1, 65536 li $v0, 8 syscall +sw $a1, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) jal String.length addiu $sp, $sp, 4 -move $a2, $v0 +move $a2, $sp addiu $a2, $a2, -1 move $a0, $v0 li $v0, 9 syscall move $v1, $v0 la $a0, buffer +li $a2, 0 _in_string.loop: beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) +lb $a1, 4($sp) +sb $a1, 4($sp) addiu $a0, $a0, 1 addiu $v1, $v1, 1 addiu $a2, $a2, -1 j _in_string.loop _in_string.end: -sb $zero, 0($v1) +sb $zero, 0($sp) move $ra, $a3 jr $ra @@ -253,14 +255,15 @@ syscall String.length: -lw $a0, -4($sp) +lw $a0, 4($sp) _stringlength.loop: -lb $a1, 0($a0) +lb $a1, 0($sp) beqz $a1, _stringlength.end addiu $a0, $a0, 1 j _stringlength.loop _stringlength.end: -lw $a1, -4($sp) +j Object.abort +lw $a1, 4($sp) subu $v0, $a0, $a1 jr $ra @@ -371,8 +374,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Object.type_name: sw $ra, 0($sp) @@ -386,8 +393,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Int.type_name: sw $ra, 0($sp) @@ -401,8 +412,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra IO.type_name: sw $ra, 0($sp) @@ -416,8 +431,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Bool.type_name: sw $ra, 0($sp) @@ -431,8 +450,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra String.type_name: sw $ra, 0($sp) @@ -478,13 +501,17 @@ sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) lw $t1, 12($sp) -sw $t1, 4($t0) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A.type_name: sw $ra, 0($sp) @@ -501,8 +528,12 @@ lw $t0, 12($sp) lw $t1, 4($t0) sw $t1, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A.set_var: sw $ra, 0($sp) @@ -519,18 +550,22 @@ lw $t0, 16($sp) sw $t0, 4($sp) lw $t0, 4($sp) lw $t1, 20($sp) -sw $t1, 4($t0) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 24($sp) +lw $t0, 28($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 12($sp) +sw $t0, 16($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A.method1: sw $ra, 0($sp) @@ -541,8 +576,12 @@ addiu $sp, $sp, -4 lw $t0, 16($sp) sw $t0, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A.method2: sw $ra, 0($sp) @@ -570,14 +609,14 @@ sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 32($sp) sw $t0, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 40($sp) -sw $t1, -4($t0) +lw $t1, 48($sp) +sw $t1, -4($sp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -611,24 +650,28 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) +lw $t0, 68($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 48($sp) addiu $sp, $sp, 8 -lw $t0, 15151515($sp) +lw $t0, 64($sp) sw $t0, 5555($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A.method3: sw $ra, 0($sp) @@ -655,8 +698,8 @@ lw $t0, 4($sp) not $t0, $t0 sw $t0, 8($sp) lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, -4($t0) +lw $t1, 36($sp) +sw $t1, -4($sp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -690,24 +733,28 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 56($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 40($sp) addiu $sp, $sp, 8 -lw $t0, 13131313($sp) +lw $t0, 52($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A.method4: sw $ra, 0($sp) @@ -730,7 +777,7 @@ sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 28($sp) sw $t0, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) li $t3, 1 add $t0, $t0, $t3 @@ -755,21 +802,21 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 44($sp) +lw $t0, 52($sp) sw $t0, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 60($sp) sw $t0, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 56($sp) -sw $t1, -4($t0) +lw $t1, 72($sp) +sw $t1, -4($sp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -803,23 +850,23 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) +lw $t0, 92($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 48($sp) addiu $sp, $sp, 8 -lw $t0, 19191919($sp) -sw $t0, 9999($sp) +lw $t0, 88($sp) +sw $t0, 11111111($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 24($sp) +sw $t0, 32($sp) j _fi_1 _if_1: #Let @@ -838,21 +885,21 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) +lw $t0, 68($sp) sw $t0, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) +lw $t0, 68($sp) sw $t0, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 64($sp) -sw $t1, -4($t0) +lw $t1, 84($sp) +sw $t1, -4($sp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -886,28 +933,32 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 104($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 48($sp) addiu $sp, $sp, 8 -lw $t0, 21212121($sp) -sw $t0, 11111111($sp) +lw $t0, 100($sp) +sw $t0, 14141414($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 44($sp) _fi_1: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A.method5: sw $ra, 0($sp) @@ -944,7 +995,7 @@ sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 44($sp) sw $t0, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t1, $t0 sw $t0, 12($sp) @@ -965,24 +1016,24 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) +lw $t0, 68($sp) lw $t1, -4($t0) sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) +lw $t0, 72($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) mult $t0, $t1 mflo $t0 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 64($sp) -sw $t1, -4($t0) +lw $t1, 80($sp) +sw $t1, -4($sp) #Assignment #Binary li $a0, 0 @@ -991,28 +1042,28 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 72($sp) +lw $t0, 88($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 76($sp) -sw $t1, -4($t0) +lw $t1, 100($sp) +sw $t1, -4($sp) lw $t0, 4($sp) -sw $t0, 28($sp) +sw $t0, 44($sp) addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_2 _pool_2: -lw $t0, 19191919($sp) +lw $t0, 92($sp) sw $t0, 7777($sp) addiu $sp, $sp, 8 #Point-Dispatch @@ -1052,20 +1103,24 @@ lw $t0, 52($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 36($sp) addiu $sp, $sp, 8 -lw $t0, 13131313($sp) +lw $t0, 48($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra B.Constructor: sw $ra, 0($sp) @@ -1074,8 +1129,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra B.type_name: sw $ra, 0($sp) @@ -1108,15 +1167,15 @@ sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 32($sp) sw $t0, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) mult $t0, $t1 mflo $t0 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, -4($t0) +lw $t1, 44($sp) +sw $t1, -4($sp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -1150,24 +1209,28 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) +lw $t0, 64($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 48($sp) addiu $sp, $sp, 8 -lw $t0, 14141414($sp) +lw $t0, 60($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra C.Constructor: sw $ra, 0($sp) @@ -1176,8 +1239,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra C.type_name: sw $ra, 0($sp) @@ -1209,8 +1276,8 @@ lw $t0, 4($sp) not $t0, $t0 sw $t0, 8($sp) lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, -4($t0) +lw $t1, 36($sp) +sw $t1, -4($sp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -1244,24 +1311,28 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 56($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 40($sp) addiu $sp, $sp, 8 -lw $t0, 13131313($sp) +lw $t0, 52($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra C.method5: sw $ra, 0($sp) @@ -1293,7 +1364,7 @@ sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 36($sp) sw $t0, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) mult $t0, $t1 mflo $t0 @@ -1302,17 +1373,17 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) +lw $t0, 48($sp) sw $t0, 4($sp) lw $t0, 8($sp) lw $t1, 4($sp) mult $t0, $t1 mflo $t0 -sw $t0, 20($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 44($sp) -sw $t1, -4($t0) +lw $t1, 56($sp) +sw $t1, -4($sp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -1346,24 +1417,28 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) +lw $t0, 76($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 44($sp) +sw $t0, 60($sp) addiu $sp, $sp, 8 -lw $t0, 16161616($sp) +lw $t0, 72($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra D.Constructor: sw $ra, 0($sp) @@ -1372,8 +1447,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra D.type_name: sw $ra, 0($sp) @@ -1405,7 +1484,7 @@ sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) li $t3, 1 add $t0, $t0, $t3 @@ -1429,10 +1508,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 60($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1454,10 +1533,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) +lw $t0, 84($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1479,10 +1558,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 108($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1497,7 +1576,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) +lw $t0, 124($sp) sw $t0, 4($sp) #Args: 0 #Binary @@ -1507,59 +1586,59 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 100($sp) +lw $t0, 132($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 5 offset 26 result D.method7 +#obj 7 offset 36 result D.method7 jal D.method7 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 52($sp) j _fi_6 _if_6: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 40($sp) +sw $t0, 56($sp) _fi_6: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 84($sp) j _fi_5 _if_5: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 60($sp) +sw $t0, 88($sp) _fi_5: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 76($sp) +sw $t0, 116($sp) j _fi_4 _if_4: li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 80($sp) +sw $t0, 120($sp) _fi_4: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 96($sp) +sw $t0, 148($sp) j _fi_3 _if_3: #Self-Dispatch @@ -1570,7 +1649,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 124($sp) +lw $t0, 176($sp) sw $t0, 4($sp) #Args: 0 #Unary @@ -1580,28 +1659,32 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 132($sp) +lw $t0, 184($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) not $t0, $t0 sw $t0, 8($sp) #Dispatch in place -#obj 4 offset 33 result D.method7 +#obj 5 offset 47 result D.method7 jal D.method7 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 112($sp) +sw $t0, 168($sp) _fi_3: addiu $sp, $sp, 8 -lw $t0, 33333333($sp) +lw $t0, 184($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra E.Constructor: sw $ra, 0($sp) @@ -1610,8 +1693,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra E.type_name: sw $ra, 0($sp) @@ -1643,15 +1730,15 @@ sw $t0, 4($sp) li $a0, 8 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) div $t0, $t1 mflo $t0 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, -4($t0) +lw $t1, 44($sp) +sw $t1, -4($sp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -1685,24 +1772,28 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) +lw $t0, 64($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 48($sp) addiu $sp, $sp, 8 -lw $t0, 14141414($sp) +lw $t0, 60($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A2I.Constructor: sw $ra, 0($sp) @@ -1711,8 +1802,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A2I.type_name: sw $ra, 0($sp) @@ -1742,7 +1837,7 @@ addiu $sp, $sp, -4 la $a0, string_7 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1760,7 +1855,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) +lw $t0, 44($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -1769,7 +1864,7 @@ addiu $sp, $sp, -4 la $a0, string_9 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1787,7 +1882,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 68($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -1796,7 +1891,7 @@ addiu $sp, $sp, -4 la $a0, string_11 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1814,7 +1909,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) +lw $t0, 92($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -1823,7 +1918,7 @@ addiu $sp, $sp, -4 la $a0, string_13 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1841,7 +1936,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 116($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -1850,7 +1945,7 @@ addiu $sp, $sp, -4 la $a0, string_15 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1868,7 +1963,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 100($sp) +lw $t0, 140($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -1877,7 +1972,7 @@ addiu $sp, $sp, -4 la $a0, string_17 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1895,7 +1990,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 116($sp) +lw $t0, 164($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -1904,7 +1999,7 @@ addiu $sp, $sp, -4 la $a0, string_19 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1922,7 +2017,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 132($sp) +lw $t0, 188($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -1931,7 +2026,7 @@ addiu $sp, $sp, -4 la $a0, string_21 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1949,7 +2044,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 148($sp) +lw $t0, 212($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -1958,7 +2053,7 @@ addiu $sp, $sp, -4 la $a0, string_23 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1976,7 +2071,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 164($sp) +lw $t0, 236($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -1985,7 +2080,7 @@ addiu $sp, $sp, -4 la $a0, string_25 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2004,10 +2099,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 184($sp) +lw $t0, 264($sp) sw $t0, 4($sp) #Dispatch in place -#obj 2 offset 46 result Object.abort +#obj 2 offset 66 result Object.abort jal Object.abort sw $a1, 0($sp) addi $sp, $sp, -4 @@ -2020,7 +2115,7 @@ lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 44($sp) j _fi_26 _if_26: #Integer @@ -2028,11 +2123,11 @@ li $a0, 9 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 48($sp) _fi_26: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 52($sp) +sw $t0, 76($sp) j _fi_24 _if_24: #Integer @@ -2040,11 +2135,11 @@ li $a0, 8 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 80($sp) _fi_24: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 72($sp) +sw $t0, 108($sp) j _fi_22 _if_22: #Integer @@ -2052,11 +2147,11 @@ li $a0, 7 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 76($sp) +sw $t0, 112($sp) _fi_22: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 92($sp) +sw $t0, 140($sp) j _fi_20 _if_20: #Integer @@ -2064,11 +2159,11 @@ li $a0, 6 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 96($sp) +sw $t0, 144($sp) _fi_20: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 112($sp) +sw $t0, 172($sp) j _fi_18 _if_18: #Integer @@ -2076,11 +2171,11 @@ li $a0, 5 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 116($sp) +sw $t0, 176($sp) _fi_18: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 132($sp) +sw $t0, 204($sp) j _fi_16 _if_16: #Integer @@ -2088,11 +2183,11 @@ li $a0, 4 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 136($sp) +sw $t0, 208($sp) _fi_16: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 152($sp) +sw $t0, 236($sp) j _fi_14 _if_14: #Integer @@ -2100,11 +2195,11 @@ li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 156($sp) +sw $t0, 240($sp) _fi_14: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 172($sp) +sw $t0, 268($sp) j _fi_12 _if_12: #Integer @@ -2112,11 +2207,11 @@ li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 176($sp) +sw $t0, 272($sp) _fi_12: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 192($sp) +sw $t0, 300($sp) j _fi_10 _if_10: #Integer @@ -2124,11 +2219,11 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 196($sp) +sw $t0, 304($sp) _fi_10: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 212($sp) +sw $t0, 332($sp) j _fi_8 _if_8: #Integer @@ -2136,12 +2231,16 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 216($sp) +sw $t0, 336($sp) _fi_8: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A2I.i2c: sw $ra, 0($sp) @@ -2163,7 +2262,7 @@ sw $t0, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2181,13 +2280,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) +lw $t0, 44($sp) sw $t0, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2205,13 +2304,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 68($sp) sw $t0, 4($sp) #Integer li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2229,13 +2328,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) +lw $t0, 92($sp) sw $t0, 4($sp) #Integer li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2253,13 +2352,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 116($sp) sw $t0, 4($sp) #Integer li $a0, 4 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2277,13 +2376,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 100($sp) +lw $t0, 140($sp) sw $t0, 4($sp) #Integer li $a0, 5 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2301,13 +2400,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 116($sp) +lw $t0, 164($sp) sw $t0, 4($sp) #Integer li $a0, 6 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2325,13 +2424,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 132($sp) +lw $t0, 188($sp) sw $t0, 4($sp) #Integer li $a0, 7 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2349,13 +2448,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 148($sp) +lw $t0, 212($sp) sw $t0, 4($sp) #Integer li $a0, 8 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2373,13 +2472,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 164($sp) +lw $t0, 236($sp) sw $t0, 4($sp) #Integer li $a0, 9 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2398,10 +2497,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 184($sp) +lw $t0, 264($sp) sw $t0, 4($sp) #Dispatch in place -#obj 2 offset 46 result Object.abort +#obj 2 offset 66 result Object.abort jal Object.abort sw $a1, 0($sp) addi $sp, $sp, -4 @@ -2417,7 +2516,7 @@ lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 44($sp) j _fi_36 _if_36: #loading label @@ -2428,11 +2527,11 @@ la $a0, string_38 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 48($sp) _fi_36: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 52($sp) +sw $t0, 76($sp) j _fi_35 _if_35: #loading label @@ -2443,11 +2542,11 @@ la $a0, string_39 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 80($sp) _fi_35: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 72($sp) +sw $t0, 108($sp) j _fi_34 _if_34: #loading label @@ -2458,11 +2557,11 @@ la $a0, string_40 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 76($sp) +sw $t0, 112($sp) _fi_34: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 92($sp) +sw $t0, 140($sp) j _fi_33 _if_33: #loading label @@ -2473,11 +2572,11 @@ la $a0, string_41 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 96($sp) +sw $t0, 144($sp) _fi_33: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 112($sp) +sw $t0, 172($sp) j _fi_32 _if_32: #loading label @@ -2488,11 +2587,11 @@ la $a0, string_42 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 116($sp) +sw $t0, 176($sp) _fi_32: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 132($sp) +sw $t0, 204($sp) j _fi_31 _if_31: #loading label @@ -2503,11 +2602,11 @@ la $a0, string_43 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 136($sp) +sw $t0, 208($sp) _fi_31: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 152($sp) +sw $t0, 236($sp) j _fi_30 _if_30: #loading label @@ -2518,11 +2617,11 @@ la $a0, string_44 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 156($sp) +sw $t0, 240($sp) _fi_30: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 172($sp) +sw $t0, 268($sp) j _fi_29 _if_29: #loading label @@ -2533,11 +2632,11 @@ la $a0, string_45 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 176($sp) +sw $t0, 272($sp) _fi_29: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 192($sp) +sw $t0, 300($sp) j _fi_28 _if_28: #loading label @@ -2548,11 +2647,11 @@ la $a0, string_46 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 196($sp) +sw $t0, 304($sp) _fi_28: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 212($sp) +sw $t0, 332($sp) j _fi_27 _if_27: #loading label @@ -2563,12 +2662,16 @@ la $a0, string_47 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 216($sp) +sw $t0, 336($sp) _fi_27: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A2I.a2i: sw $ra, 0($sp) @@ -2604,7 +2707,7 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_48 @@ -2624,7 +2727,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 44($sp) +lw $t0, 52($sp) sw $t0, 4($sp) #Args: 0 #Integer @@ -2637,7 +2740,7 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result String.substr +#obj 4 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 @@ -2652,7 +2755,7 @@ addi $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 -sw $t0, 24($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_50 @@ -2672,7 +2775,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 72($sp) +lw $t0, 88($sp) sw $t0, 4($sp) #Args: 0 #Integer @@ -2685,7 +2788,7 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result String.substr +#obj 4 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 @@ -2700,7 +2803,7 @@ addi $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 -sw $t0, 24($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_52 @@ -2712,22 +2815,22 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 96($sp) +lw $t0, 120($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 96($sp) +lw $t0, 120($sp) sw $t0, 4($sp) #Dispatch in place -#obj 3 offset 25 result A2I.a2i_aux +#obj 3 offset 31 result A2I.a2i_aux jal A2I.a2i_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 40($sp) +sw $t0, 48($sp) j _fi_52 _if_52: #Self-Dispatch @@ -2738,7 +2841,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 108($sp) +lw $t0, 136($sp) sw $t0, 4($sp) #Args: 0 #Point-Dispatch @@ -2749,7 +2852,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 112($sp) +lw $t0, 140($sp) sw $t0, 4($sp) #Args: 0 #Integer @@ -2769,7 +2872,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 128($sp) +lw $t0, 156($sp) sw $t0, 4($sp) #Dispatch in place #obj 2 offset 1 result String.length @@ -2784,26 +2887,26 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 7 offset 6 result String.substr +#obj 9 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place -#obj 9 offset 34 result A2I.a2i_aux +#obj 12 offset 44 result A2I.a2i_aux jal A2I.a2i_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 76($sp) +sw $t0, 100($sp) _fi_52: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 104($sp) +sw $t0, 136($sp) j _fi_50 _if_50: #Unary @@ -2818,7 +2921,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 148($sp) +lw $t0, 188($sp) sw $t0, 4($sp) #Args: 0 #Point-Dispatch @@ -2829,7 +2932,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 152($sp) +lw $t0, 192($sp) sw $t0, 4($sp) #Args: 0 #Integer @@ -2849,7 +2952,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 168($sp) +lw $t0, 208($sp) sw $t0, 4($sp) #Dispatch in place #obj 2 offset 1 result String.length @@ -2864,29 +2967,29 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 7 offset 6 result String.substr +#obj 9 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place -#obj 9 offset 44 result A2I.a2i_aux +#obj 12 offset 57 result A2I.a2i_aux jal A2I.a2i_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) not $t0, $t0 -sw $t0, 40($sp) +sw $t0, 52($sp) lw $t0, 4($sp) -sw $t0, 144($sp) +sw $t0, 188($sp) _fi_50: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 164($sp) +sw $t0, 216($sp) j _fi_48 _if_48: #Integer @@ -2894,12 +2997,16 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 168($sp) +sw $t0, 220($sp) _fi_48: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A2I.a2i_aux: sw $ra, 0($sp) @@ -2941,7 +3048,7 @@ addiu $sp, $sp, -4 lw $t0, 56($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) li $t3, 1 add $t0, $t0, $t3 @@ -2968,14 +3075,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 72($sp) +lw $t0, 80($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 10 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) mult $t0, $t1 mflo $t0 @@ -2989,7 +3096,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 100($sp) sw $t0, 4($sp) #Args: 0 #Point-Dispatch @@ -3000,13 +3107,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 88($sp) +lw $t0, 104($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 96($sp) +lw $t0, 112($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Args: 1 @@ -3015,25 +3122,25 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result String.substr +#obj 4 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place -#obj 6 offset 25 result A2I.c2i +#obj 7 offset 30 result A2I.c2i jal A2I.c2i sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 28($sp) +lw $t0, 32($sp) lw $t1, 4($sp) add $t0, $t0, $t1 -sw $t0, 40($sp) +sw $t0, 52($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 100($sp) -sw $t1, -4($t0) +lw $t1, 120($sp) +sw $t1, -4($sp) #Assignment #Binary li $a0, 0 @@ -3042,31 +3149,31 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 108($sp) +lw $t0, 128($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 112($sp) -sw $t1, -4($t0) +lw $t1, 140($sp) +sw $t1, -4($sp) lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 76($sp) addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_53 _pool_53: -lw $t0, 28282828($sp) +lw $t0, 132($sp) sw $t0, 9999($sp) addiu $sp, $sp, 8 -lw $t0, 10101010($sp) +lw $t0, 40($sp) sw $t0, 7777($sp) addiu $sp, $sp, 8 li $a0, 0 @@ -3078,12 +3185,16 @@ sw $t1, 4($sp) lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 -lw $t0, 9999($sp) +lw $t0, 36($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A2I.i2a: sw $ra, 0($sp) @@ -3105,7 +3216,7 @@ sw $t0, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -3127,9 +3238,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) +lw $t0, 48($sp) sw $t0, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) li $t3, 1 add $t0, $t0, $t3 @@ -3159,7 +3270,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) +lw $t0, 76($sp) sw $t0, 4($sp) #Args: 0 #Binary @@ -3169,7 +3280,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) +lw $t0, 80($sp) sw $t0, 4($sp) #Unary li $a0, 0 @@ -3182,26 +3293,26 @@ addiu $sp, $sp, -4 lw $t0, 4($sp) not $t0, $t0 sw $t0, 8($sp) -lw $t0, 12($sp) -lw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) mult $t0, $t1 mflo $t0 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 6 offset 19 result A2I.i2a_aux +#obj 8 offset 25 result A2I.i2a_aux jal A2I.i2a_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 8 offset 7 result String.concat +#obj 10 offset 1 result String.concat jal String.concat sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 48($sp) +sw $t0, 68($sp) j _fi_55 _if_55: #Self-Dispatch @@ -3212,26 +3323,26 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 112($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 112($sp) sw $t0, 4($sp) #Dispatch in place -#obj 3 offset 22 result A2I.i2a_aux +#obj 3 offset 29 result A2I.i2a_aux jal A2I.i2a_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 60($sp) +sw $t0, 80($sp) _fi_55: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 76($sp) +sw $t0, 108($sp) j _fi_54 _if_54: #loading label @@ -3242,12 +3353,16 @@ la $a0, string_57 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 80($sp) +sw $t0, 112($sp) _fi_54: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra A2I.i2a_aux: sw $ra, 0($sp) @@ -3269,7 +3384,7 @@ sw $t0, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -3293,17 +3408,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 48($sp) +lw $t0, 56($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 60($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 3 offset 13 result A2I.i2a_aux +#obj 3 offset 15 result A2I.i2a_aux jal A2I.i2a_aux sw $a1, 0($sp) addi $sp, $sp, -4 @@ -3317,7 +3432,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) +lw $t0, 68($sp) sw $t0, 4($sp) #Args: 0 #Binary @@ -3327,7 +3442,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) +lw $t0, 72($sp) sw $t0, 4($sp) #Binary li $a0, 0 @@ -3336,41 +3451,41 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) +lw $t0, 84($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 10 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) mult $t0, $t1 mflo $t0 sw $t0, 12($sp) addiu $sp, $sp, 8 -lw $t0, 16($sp) -lw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) sub $t0, $t0, $t1 -sw $t0, 20($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 7 offset 20 result A2I.i2c +#obj 10 offset 25 result A2I.i2c jal A2I.i2c sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 11 offset 8 result String.concat +#obj 14 offset 1 result String.concat jal String.concat sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 20202020($sp) -sw $t0, 8888($sp) +lw $t0, 60($sp) +sw $t0, 10101010($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 24($sp) +sw $t0, 32($sp) j _fi_58 _if_58: #loading label @@ -3380,13 +3495,17 @@ addiu $sp, $sp, -4 la $a0, string_59 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -_fi_58: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 40($sp) +_fi_58: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.Constructor: sw $ra, 0($sp) @@ -3396,13 +3515,17 @@ sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) lw $t1, 12($sp) -sw $t1, 16($t0) +sw $t1, 16($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.type_name: sw $ra, 0($sp) @@ -3890,8 +4013,12 @@ lw $t0, 4($sp) sw $t0, 216($sp) addiu $sp, $sp, 108 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.prompt: sw $ra, 0($sp) @@ -3950,8 +4077,12 @@ lw $t0, 4($sp) sw $t0, 24($sp) addiu $sp, $sp, 12 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.get_int: sw $ra, 0($sp) @@ -3987,23 +4118,27 @@ lw $t0, 40($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 3 offset 2 result -1 +#obj 3 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 10101010($sp) +lw $t0, 36($sp) sw $t0, 6666($sp) addiu $sp, $sp, 8 -lw $t0, 7777($sp) +lw $t0, 28($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 12($sp) addiu $sp, $sp, 4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.is_even: sw $ra, 0($sp) @@ -4030,7 +4165,7 @@ sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) li $t3, 1 add $t0, $t0, $t3 @@ -4054,10 +4189,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 60($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4079,10 +4214,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) +lw $t0, 84($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4101,48 +4236,48 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 80($sp) +lw $t0, 104($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 4 offset 21 result Main.is_even +#obj 6 offset 29 result Main.is_even jal Main.is_even sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 48($sp) j _fi_82 _if_82: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 52($sp) _fi_82: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 52($sp) +sw $t0, 80($sp) j _fi_81 _if_81: li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 84($sp) _fi_81: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 72($sp) +sw $t0, 112($sp) j _fi_80 _if_80: #Self-Dispatch @@ -4157,28 +4292,32 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 104($sp) +lw $t0, 144($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) not $t0, $t0 sw $t0, 8($sp) #Dispatch in place -#obj 3 offset 26 result Main.is_even +#obj 4 offset 37 result Main.is_even jal Main.is_even sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 84($sp) +sw $t0, 128($sp) _fi_80: addiu $sp, $sp, 8 -lw $t0, 26262626($sp) +lw $t0, 144($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.class_type: sw $ra, 0($sp) @@ -4194,18 +4333,18 @@ sw $t0, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 8($sp) +lw $a0, 4($sp) la $a1, A_VT la $t0, inherit jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) +sw $v0, 8($sp) +lw $t0, 8($sp) bnez $t0, branch_83 addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 12($sp) +lw $a0, 8($sp) la $a1, B_VT la $t0, inherit jalr $ra, $t0 @@ -4216,7 +4355,7 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 16($sp) +lw $a0, 12($sp) la $a1, C_VT la $t0, inherit jalr $ra, $t0 @@ -4227,7 +4366,7 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 20($sp) +lw $a0, 16($sp) la $a1, D_VT la $t0, inherit jalr $ra, $t0 @@ -4238,7 +4377,7 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 24($sp) +lw $a0, 20($sp) la $a1, E_VT la $t0, inherit jalr $ra, $t0 @@ -4249,7 +4388,7 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 28($sp) +lw $a0, 24($sp) la $a1, Object_VT la $t0, inherit jalr $ra, $t0 @@ -4262,7 +4401,7 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) +lw $t0, 32($sp) sw $t0, 4($sp) #Self-Dispatch li $a0, 0 @@ -4277,7 +4416,7 @@ la $a0, string_90 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 15 result IO.out_string +#obj 2 offset 16 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -4291,7 +4430,7 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 48($sp) -sw $t0, 16($sp) +sw $t0, 20($sp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4305,21 +4444,21 @@ la $a0, string_91 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 18 result IO.out_string +#obj 2 offset 20 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 24($sp) +sw $t0, 28($sp) addiu $sp, $sp, 12 branch_85: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 28($sp) +lw $t0, 64($sp) +sw $t0, 36($sp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4333,21 +4472,21 @@ la $a0, string_92 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 21 result IO.out_string +#obj 2 offset 24 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 44($sp) addiu $sp, $sp, 12 branch_86: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 72($sp) -sw $t0, 40($sp) +lw $t0, 80($sp) +sw $t0, 52($sp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4361,21 +4500,21 @@ la $a0, string_93 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 24 result IO.out_string +#obj 2 offset 28 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 48($sp) +sw $t0, 60($sp) addiu $sp, $sp, 12 branch_87: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 52($sp) +lw $t0, 96($sp) +sw $t0, 68($sp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4389,21 +4528,21 @@ la $a0, string_94 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 27 result IO.out_string +#obj 2 offset 32 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 60($sp) +sw $t0, 76($sp) addiu $sp, $sp, 12 branch_88: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 96($sp) -sw $t0, 64($sp) +lw $t0, 112($sp) +sw $t0, 84($sp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4417,17 +4556,21 @@ la $a0, string_95 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 30 result IO.out_string +#obj 2 offset 36 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 72($sp) +sw $t0, 92($sp) addiu $sp, $sp, 12 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.print: sw $ra, 0($sp) @@ -4474,13 +4617,13 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 #Dispatch in place -#obj 5 offset 11 result IO.out_string +#obj 7 offset 13 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -4498,20 +4641,24 @@ la $a0, string_96 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 13 result IO.out_string +#obj 2 offset 15 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 40($sp) addiu $sp, $sp, 8 -lw $t0, 13131313($sp) +lw $t0, 60($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.main: sw $ra, 0($sp) @@ -4547,7 +4694,7 @@ addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 24($sp) -sw $t1, 8($t0) +sw $t1, 8($sp) #loop li $a0, 0 sw $a0, ($sp) @@ -4556,7 +4703,7 @@ _loop_97: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 4($sp) lw $t0, 4($sp) @@ -4580,7 +4727,7 @@ la $a0, string_98 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 11 result IO.out_string +#obj 2 offset 13 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -4593,11 +4740,11 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 60($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place -#obj 2 offset 13 result Main.print +#obj 2 offset 15 result Main.print jal Main.print sw $a1, 0($sp) addi $sp, $sp, -4 @@ -4619,7 +4766,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) +lw $t0, 76($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place @@ -4629,7 +4776,7 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 3 offset 17 result Main.is_even +#obj 4 offset 20 result Main.is_even jal Main.is_even sw $a1, 0($sp) addi $sp, $sp, -4 @@ -4649,13 +4796,13 @@ la $a0, string_100 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 19 result IO.out_string +#obj 2 offset 22 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 24($sp) +sw $t0, 28($sp) j _fi_99 _if_99: #Self-Dispatch @@ -4671,13 +4818,13 @@ la $a0, string_101 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 21 result IO.out_string +#obj 2 offset 25 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 40($sp) _fi_99: addiu $sp, $sp, 8 #Self-Dispatch @@ -4688,11 +4835,11 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) +lw $t0, 112($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place -#obj 2 offset 23 result Main.class_type +#obj 2 offset 28 result Main.class_type jal Main.class_type sw $a1, 0($sp) addi $sp, $sp, -4 @@ -4703,14 +4850,14 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 1 offset 24 result Main.menu +#obj 1 offset 29 result Main.menu jal Main.menu sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -lw $t1, 96($sp) -sw $t1, 4($t0) +lw $t1, 116($sp) +sw $t1, 4($sp) #Condition li $a0, 0 sw $a0, ($sp) @@ -4722,7 +4869,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 108($sp) +lw $t0, 132($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4732,7 +4879,7 @@ addiu $sp, $sp, -4 la $a0, string_102 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4750,7 +4897,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 124($sp) +lw $t0, 156($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4760,7 +4907,7 @@ addiu $sp, $sp, -4 la $a0, string_104 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4778,7 +4925,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 140($sp) +lw $t0, 180($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4788,7 +4935,7 @@ addiu $sp, $sp, -4 la $a0, string_106 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4806,7 +4953,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 156($sp) +lw $t0, 204($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4816,7 +4963,7 @@ addiu $sp, $sp, -4 la $a0, string_108 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4834,7 +4981,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 172($sp) +lw $t0, 228($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4844,7 +4991,7 @@ addiu $sp, $sp, -4 la $a0, string_110 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4862,7 +5009,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 188($sp) +lw $t0, 252($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4872,7 +5019,7 @@ addiu $sp, $sp, -4 la $a0, string_112 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4890,7 +5037,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 204($sp) +lw $t0, 276($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4900,7 +5047,7 @@ addiu $sp, $sp, -4 la $a0, string_114 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4918,7 +5065,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 220($sp) +lw $t0, 300($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4928,7 +5075,7 @@ addiu $sp, $sp, -4 la $a0, string_116 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4946,7 +5093,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 236($sp) +lw $t0, 324($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4956,7 +5103,7 @@ addiu $sp, $sp, -4 la $a0, string_118 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -4974,7 +5121,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 252($sp) +lw $t0, 348($sp) lw $t1, 4($t0) sw $t1, 4($sp) #loading label @@ -4984,7 +5131,7 @@ addiu $sp, $sp, -4 la $a0, string_120 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -5030,7 +5177,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 280($sp) +lw $t0, 384($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place @@ -5040,16 +5187,16 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 6 offset 3 result -1 +#obj 7 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 280($sp) -sw $t1, 8($t0) +lw $t1, 392($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 40($sp) +sw $t0, 56($sp) j _fi_121 _if_121: #Assignment @@ -5057,14 +5204,14 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -lw $t1, 284($sp) -sw $t1, 16($t0) +lw $t1, 396($sp) +sw $t1, 16($sp) lw $t0, 4($sp) -sw $t0, 44($sp) +sw $t0, 64($sp) _fi_121: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 60($sp) +sw $t0, 88($sp) j _fi_119 _if_119: #Assignment @@ -5093,14 +5240,14 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 296($sp) -sw $t1, 8($t0) +lw $t1, 412($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 72($sp) +sw $t0, 104($sp) _fi_119: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 88($sp) +sw $t0, 128($sp) j _fi_117 _if_117: #Let @@ -5150,7 +5297,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 332($sp) +lw $t0, 452($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place @@ -5160,14 +5307,14 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 6 offset 3 result -1 +#obj 7 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 332($sp) -sw $t1, -4($t0) +lw $t1, 460($sp) +sw $t1, -4($sp) #Let li $a0, 0 sw $a0, ($sp) @@ -5189,7 +5336,7 @@ la $a0, string_122 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 88 result IO.out_string +#obj 2 offset 120 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5202,11 +5349,11 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 360($sp) +lw $t0, 488($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place -#obj 2 offset 90 result Main.print +#obj 2 offset 122 result Main.print jal Main.print sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5224,7 +5371,7 @@ la $a0, string_123 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 92 result IO.out_string +#obj 2 offset 124 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5237,11 +5384,11 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 376($sp) +lw $t0, 504($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 2 offset 94 result Main.print +#obj 2 offset 126 result Main.print jal Main.print sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5259,7 +5406,7 @@ la $a0, string_124 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 96 result IO.out_string +#obj 2 offset 128 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5285,24 +5432,24 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 408($sp) +lw $t0, 536($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 412($sp) +lw $t0, 540($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 3 offset 2 result -1 +#obj 3 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 #Dispatch in place -#obj 4 offset 103 result IO.out_string +#obj 5 offset 136 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5320,45 +5467,45 @@ la $a0, string_125 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 105 result IO.out_string +#obj 2 offset 138 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 28($sp) +sw $t0, 32($sp) addiu $sp, $sp, 8 -lw $t0, 105105105105($sp) -sw $t0, 97979797($sp) +lw $t0, 552($sp) +sw $t0, 129129129129($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 52($sp) addiu $sp, $sp, 24 -lw $t0, 98989898($sp) -sw $t0, 84848484($sp) +lw $t0, 520($sp) +sw $t0, 116116116116($sp) addiu $sp, $sp, 8 #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 344($sp) +lw $t0, 472($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) -lw $t1, 344($sp) -sw $t1, 8($t0) +lw $t1, 472($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 40($sp) +sw $t0, 52($sp) addiu $sp, $sp, 12 -lw $t0, 86868686($sp) -sw $t0, 75757575($sp) +lw $t0, 472($sp) +sw $t0, 105105105105($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 96($sp) +sw $t0, 136($sp) _fi_117: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 112($sp) +sw $t0, 164($sp) j _fi_115 _if_115: #Condition @@ -5403,7 +5550,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 332($sp) +lw $t0, 456($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place @@ -5413,7 +5560,7 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 6 offset 3 result -1 +#obj 7 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5437,7 +5584,7 @@ la $a0, string_127 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 86 result IO.out_string +#obj 2 offset 119 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5450,11 +5597,11 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 352($sp) +lw $t0, 484($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place -#obj 2 offset 88 result Main.print +#obj 2 offset 121 result Main.print jal Main.print sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5472,7 +5619,7 @@ la $a0, string_128 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 90 result IO.out_string +#obj 2 offset 123 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5481,7 +5628,7 @@ lw $t0, 4($sp) sw $t0, 28($sp) addiu $sp, $sp, 12 lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 68($sp) j _fi_126 _if_126: #Block @@ -5501,7 +5648,7 @@ la $a0, string_129 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 93 result IO.out_string +#obj 2 offset 127 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5514,11 +5661,11 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 380($sp) +lw $t0, 516($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place -#obj 2 offset 95 result Main.print +#obj 2 offset 129 result Main.print jal Main.print sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5536,7 +5683,7 @@ la $a0, string_130 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 97 result IO.out_string +#obj 2 offset 131 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -5545,15 +5692,15 @@ lw $t0, 4($sp) sw $t0, 28($sp) addiu $sp, $sp, 12 lw $t0, 4($sp) -sw $t0, 84($sp) +sw $t0, 100($sp) _fi_126: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 196($sp) +sw $t0, 264($sp) _fi_115: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 212($sp) +sw $t0, 288($sp) j _fi_113 _if_113: #Assignment @@ -5594,7 +5741,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 412($sp) +lw $t0, 552($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place @@ -5604,21 +5751,21 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #DispatchParent in place -#obj 6 offset 3 result C.method5 -la $v0, 3 +#obj 7 offset 1 result C.method5 +la $v0, 1 jal C.method5 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 412($sp) -sw $t1, 8($t0) +lw $t1, 560($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 236($sp) +sw $t0, 320($sp) _fi_113: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 252($sp) +sw $t0, 344($sp) j _fi_111 _if_111: #Assignment @@ -5659,7 +5806,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 436($sp) +lw $t0, 584($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place @@ -5669,21 +5816,21 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #DispatchParent in place -#obj 6 offset 3 result C.method5 -la $v0, 3 +#obj 7 offset 1 result C.method5 +la $v0, 1 jal C.method5 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 436($sp) -sw $t1, 8($t0) +lw $t1, 592($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 276($sp) +sw $t0, 376($sp) _fi_111: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 292($sp) +sw $t0, 400($sp) j _fi_109 _if_109: #Assignment @@ -5724,7 +5871,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 460($sp) +lw $t0, 616($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place @@ -5734,21 +5881,21 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #DispatchParent in place -#obj 6 offset 3 result C.method5 -la $v0, 3 +#obj 7 offset 1 result C.method5 +la $v0, 1 jal C.method5 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 460($sp) -sw $t1, 8($t0) +lw $t1, 624($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 316($sp) +sw $t0, 432($sp) _fi_109: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 332($sp) +sw $t0, 456($sp) j _fi_107 _if_107: #Block @@ -5791,20 +5938,20 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 1 offset 121 result Main.get_int +#obj 1 offset 162 result Main.get_int jal Main.get_int sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 484($sp) -sw $t1, 12($t0) +lw $t1, 652($sp) +sw $t1, 12($sp) #Assignment #Point-Dispatch li $a0, 0 @@ -5844,7 +5991,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 508($sp) +lw $t0, 676($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place @@ -5862,7 +6009,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 516($sp) +lw $t0, 688($sp) lw $t1, 12($t0) sw $t1, 4($sp) #Dispatch in place @@ -5872,23 +6019,23 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 8 offset 5 result -1 +#obj 10 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $t0, 4($sp) -lw $t1, 516($sp) -sw $t1, 8($t0) +lw $t1, 696($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 72($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 388($sp) +sw $t0, 528($sp) _fi_107: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 404($sp) +sw $t0, 552($sp) j _fi_105 _if_105: li $a0, 0 @@ -5897,24 +6044,24 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 524($sp) +lw $t0, 704($sp) lw $t1, 8($t0) sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 8($sp) +lw $a0, 4($sp) la $a1, C_VT la $t0, inherit jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) +sw $v0, 8($sp) +lw $t0, 8($sp) bnez $t0, branch_131 addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 12($sp) +lw $a0, 8($sp) la $a1, A_VT la $t0, inherit jalr $ra, $t0 @@ -5925,7 +6072,7 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 16($sp) +lw $a0, 12($sp) la $a1, Object_VT la $t0, inherit jalr $ra, $t0 @@ -5938,7 +6085,7 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 24($sp) +lw $t0, 20($sp) sw $t0, 4($sp) #Assignment #Point-Dispatch @@ -5969,24 +6116,24 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 560($sp) -sw $t1, 8($t0) +lw $t1, 752($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 20($sp) +sw $t0, 28($sp) addiu $sp, $sp, 12 branch_132: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 24($sp) +lw $t0, 48($sp) +sw $t0, 32($sp) #Assignment #Point-Dispatch li $a0, 0 @@ -6016,24 +6163,24 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 4 offset 3 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 580($sp) -sw $t1, 8($t0) +lw $t1, 780($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 40($sp) +sw $t0, 56($sp) addiu $sp, $sp, 12 branch_133: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 44($sp) +lw $t0, 76($sp) +sw $t0, 60($sp) #Block li $a0, 0 sw $a0, ($sp) @@ -6051,7 +6198,7 @@ la $a0, string_135 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 149 result IO.out_string +#obj 2 offset 199 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -6061,7 +6208,7 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 1 offset 150 result Object.abort +#obj 1 offset 200 result Object.abort jal Object.abort sw $a1, 0($sp) addi $sp, $sp, -4 @@ -6074,14 +6221,14 @@ lw $t0, 4($sp) sw $t0, 20($sp) addiu $sp, $sp, 12 lw $t0, 4($sp) -sw $t0, 64($sp) +sw $t0, 84($sp) addiu $sp, $sp, 12 lw $t0, 4($sp) -sw $t0, 492($sp) +sw $t0, 664($sp) _fi_105: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 508($sp) +sw $t0, 688($sp) j _fi_103 _if_103: #Block @@ -6124,20 +6271,20 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 1 offset 157 result Main.get_int +#obj 1 offset 208 result Main.get_int jal Main.get_int sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 628($sp) -sw $t1, 12($t0) +lw $t1, 836($sp) +sw $t1, 12($sp) #Assignment #Point-Dispatch li $a0, 0 @@ -6177,7 +6324,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 652($sp) +lw $t0, 860($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place @@ -6195,7 +6342,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 660($sp) +lw $t0, 872($sp) lw $t1, 12($t0) sw $t1, 4($sp) #Dispatch in place @@ -6205,33 +6352,29 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 8 offset 5 result -1 +#obj 10 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $t0, 4($sp) -lw $t1, 660($sp) -sw $t1, 8($t0) +lw $t1, 880($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 72($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 564($sp) +sw $t0, 760($sp) _fi_103: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 628($sp) +sw $t0, 840($sp) addiu $sp, $sp, 24 addiu $sp, $sp, 8 j _loop_97 _pool_97: lw $t0, 4($sp) -sw $t0, 652($sp) +sw $t0, 872($sp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra li $v0, 10 syscall diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips new file mode 100644 index 00000000..035ebf96 --- /dev/null +++ b/tests/codegen/atoi.mips @@ -0,0 +1,2224 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "0" +string_3: .asciiz "1" +string_5: .asciiz "2" +string_7: .asciiz "3" +string_9: .asciiz "4" +string_11: .asciiz "5" +string_13: .asciiz "6" +string_15: .asciiz "7" +string_17: .asciiz "8" +string_19: .asciiz "9" +string_31: .asciiz "" +string_32: .asciiz "9" +string_33: .asciiz "8" +string_34: .asciiz "7" +string_35: .asciiz "6" +string_36: .asciiz "5" +string_37: .asciiz "4" +string_38: .asciiz "3" +string_39: .asciiz "2" +string_40: .asciiz "1" +string_41: .asciiz "0" +string_43: .asciiz "-" +string_45: .asciiz "+" +string_50: .asciiz "-" +string_51: .asciiz "0" +string_53: .asciiz "" +string_54: .asciiz " == " +string_55: .asciiz "\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +A2I_INH: +.word Object_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A2I_name: .asciiz "A2I" +A2I_VT: +.word A2I_INH +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +A2I.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +A2I.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, A2I_name +jr $ra +A2I.c2i: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_2 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_5 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_6 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_7 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_10 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 140($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_11 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_12 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_13 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_14 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 188($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_15 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_16 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 212($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_17 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_18 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 236($sp) +sw $t0, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_19 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_20 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 264($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 66 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 44($sp) +j _fi_20 +_if_20: +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 48($sp) +_fi_20: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 76($sp) +j _fi_18 +_if_18: +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_18: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 108($sp) +j _fi_16 +_if_16: +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 112($sp) +_fi_16: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 140($sp) +j _fi_14 +_if_14: +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 144($sp) +_fi_14: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 172($sp) +j _fi_12 +_if_12: +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 176($sp) +_fi_12: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 204($sp) +j _fi_10 +_if_10: +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 208($sp) +_fi_10: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 236($sp) +j _fi_8 +_if_8: +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 240($sp) +_fi_8: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 268($sp) +j _fi_6 +_if_6: +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 272($sp) +_fi_6: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 300($sp) +j _fi_4 +_if_4: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 304($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 332($sp) +j _fi_2 +_if_2: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 336($sp) +_fi_2: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +A2I.i2c: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_21 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_22 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_23 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_24 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_25 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 140($sp) +sw $t0, 4($sp) +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_26 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +sw $t0, 4($sp) +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_27 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 188($sp) +sw $t0, 4($sp) +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_28 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 212($sp) +sw $t0, 4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_29 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 236($sp) +sw $t0, 4($sp) +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_30 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 264($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 66 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_31 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 44($sp) +j _fi_30 +_if_30: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_32 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 48($sp) +_fi_30: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 76($sp) +j _fi_29 +_if_29: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_33 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_29: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 108($sp) +j _fi_28 +_if_28: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_34 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 112($sp) +_fi_28: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 140($sp) +j _fi_27 +_if_27: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_35 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 144($sp) +_fi_27: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 172($sp) +j _fi_26 +_if_26: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_36 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 176($sp) +_fi_26: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 204($sp) +j _fi_25 +_if_25: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_37 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 208($sp) +_fi_25: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 236($sp) +j _fi_24 +_if_24: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_38 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 240($sp) +_fi_24: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 268($sp) +j _fi_23 +_if_23: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_39 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 272($sp) +_fi_23: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 300($sp) +j _fi_22 +_if_22: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_40 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 304($sp) +_fi_22: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 332($sp) +j _fi_21 +_if_21: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_41 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 336($sp) +_fi_21: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +A2I.a2i: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_42 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_43 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_44 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_45 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_46 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 120($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 120($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 31 result A2I.a2i_aux +jal A2I.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 48($sp) +j _fi_46 +_if_46: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 136($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 140($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 156($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 9 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +#Dispatch in place +#obj 12 offset 44 result A2I.a2i_aux +jal A2I.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 100($sp) +_fi_46: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 136($sp) +j _fi_44 +_if_44: +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 188($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 192($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 208($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 9 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +#Dispatch in place +#obj 12 offset 57 result A2I.a2i_aux +jal A2I.a2i_aux +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 52($sp) +lw $t0, 4($sp) +sw $t0, 188($sp) +_fi_44: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 216($sp) +j _fi_42 +_if_42: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 220($sp) +_fi_42: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +A2I.a2i_aux: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_47: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_47 +j _pool_47 +_body_47: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +#Dispatch in place +#obj 7 offset 30 result A2I.c2i +jal A2I.c2i +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 32($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 52($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 120($sp) +sw $t1, -4($sp) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 140($sp) +sw $t1, -4($sp) +lw $t0, 4($sp) +sw $t0, 76($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_47 +_pool_47: +lw $t0, 132($sp) +sw $t0, 9999($sp) +addiu $sp, $sp, 8 +lw $t0, 40($sp) +sw $t0, 7777($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 36($sp) +sw $t0, 4444($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +A2I.i2a: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_48 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_49 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_50 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 8 offset 25 result A2I.i2a_aux +jal A2I.i2a_aux +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 10 offset 1 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 68($sp) +j _fi_49 +_if_49: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 29 result A2I.i2a_aux +jal A2I.i2a_aux +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_49: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 108($sp) +j _fi_48 +_if_48: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_51 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 112($sp) +_fi_48: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +A2I.i2a_aux: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_52 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 15 result A2I.i2a_aux +jal A2I.i2a_aux +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 8($sp) +sub $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 10 offset 25 result A2I.i2c +jal A2I.i2c +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 14 offset 1 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 60($sp) +sw $t0, 10101010($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_52 +_if_52: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_53 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 40($sp) +_fi_52: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 7 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_54 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 9 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 11 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_55 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 13 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 16 +lw $t0, 52($sp) +sw $t0, 3333($sp) +addiu $sp, $sp, 8 +li $v0, 10 +syscall diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips new file mode 100644 index 00000000..d44038a8 --- /dev/null +++ b/tests/codegen/book_list.mips @@ -0,0 +1,1470 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "title: " +string_2: .asciiz "\n" +string_3: .asciiz "author: " +string_4: .asciiz "\n" +string_5: .asciiz "periodical: " +string_6: .asciiz "\n" +string_10: .asciiz "- dynamic type was Book -\n" +string_11: .asciiz "- dynamic type was Article -\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Book_INH: +.word IO_INH +Article_INH: +.word Book_INH +BookList_INH: +.word IO_INH +Cons_INH: +.word BookList_INH +Nil_INH: +.word BookList_INH +Main_INH: +.word Object_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Book_name: .asciiz "Book" +Book_VT: +.word Book_INH +.word Book.initBook +.word Book.print +Article_name: .asciiz "Article" +Article_VT: +.word Article_INH +.word Article.initArticle +.word Article.print +BookList_name: .asciiz "BookList" +BookList_VT: +.word BookList_INH +.word BookList.isNil +.word BookList.cons +.word BookList.car +.word BookList.cdr +.word BookList.print_list +Cons_name: .asciiz "Cons" +Cons_VT: +.word Cons_INH +.word Cons.isNil +.word Cons.init +.word Cons.car +.word Cons.cdr +.word Cons.print_list +Nil_name: .asciiz "Nil" +Nil_VT: +.word Nil_INH +.word Nil.isNil +.word Nil.print_list +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +Book.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Book.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Book_name +jr $ra +Book.initBook: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, 4($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, 8($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Book.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 8 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 1 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 8 offset 2 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 16 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 1 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_4 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 8 offset 2 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 72($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Article.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Article.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Article_name +jr $ra +Article.initArticle: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 4 offset 10 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 44($sp) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Article.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#DispatchParent in place +#obj 2 offset 1 result self.print +la $v0, 1 +jal self.print +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_5 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 11 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 1 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 8 offset 2 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 52($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +BookList.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +BookList.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, BookList_name +jr $ra +BookList.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +BookList.cons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +lw $t0, 28($sp) +sw $t0, 4444($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +BookList.car: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Book_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Book.Constructor +la $v0, 1 +jal Book.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +BookList.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, BookList_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result BookList.Constructor +la $v0, 1 +jal BookList.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +BookList.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 4 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Cons_name +jr $ra +Cons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, 4($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, 8($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.car: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 8($sp) +la $a1, Book_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_7 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +la $a1, Article_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_8 +addiu $sp, $sp, 4 +branch_7: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_10 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 14 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +branch_8: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 20($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_11 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 18 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 12 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 80($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Nil_name +jr $ra +Nil.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Nil_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Nil.Constructor +la $v0, 1 +jal Nil.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 8 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 60($sp) +sw $t1, 4($sp) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 52($sp) +addiu $sp, $sp, 8 +lw $t0, 72($sp) +sw $t0, 5555($sp) +addiu $sp, $sp, 8 +lw $t0, 24($sp) +sw $t0, 3333($sp) +addiu $sp, $sp, 8 +li $v0, 10 +syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 13d9515c..3fdc4368 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -89,27 +89,29 @@ la $a0, buffer li $a1, 65536 li $v0, 8 syscall +sw $a1, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) jal String.length addiu $sp, $sp, 4 -move $a2, $v0 +move $a2, $sp addiu $a2, $a2, -1 move $a0, $v0 li $v0, 9 syscall move $v1, $v0 la $a0, buffer +li $a2, 0 _in_string.loop: beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) +lb $a1, 4($sp) +sb $a1, 4($sp) addiu $a0, $a0, 1 addiu $v1, $v1, 1 addiu $a2, $a2, -1 j _in_string.loop _in_string.end: -sb $zero, 0($v1) +sb $zero, 0($sp) move $ra, $a3 jr $ra @@ -144,14 +146,15 @@ syscall String.length: -lw $a0, -4($sp) +lw $a0, 4($sp) _stringlength.loop: -lb $a1, 0($a0) +lb $a1, 0($sp) beqz $a1, _stringlength.end addiu $a0, $a0, 1 j _stringlength.loop _stringlength.end: -lw $a1, -4($sp) +j Object.abort +lw $a1, 4($sp) subu $v0, $a0, $a1 jr $ra @@ -262,8 +265,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Object.type_name: sw $ra, 0($sp) @@ -277,8 +284,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Int.type_name: sw $ra, 0($sp) @@ -292,8 +303,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra IO.type_name: sw $ra, 0($sp) @@ -307,8 +322,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Bool.type_name: sw $ra, 0($sp) @@ -322,8 +341,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra String.type_name: sw $ra, 0($sp) @@ -367,8 +390,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra CellularAutomaton.type_name: sw $ra, 0($sp) @@ -390,18 +417,22 @@ lw $t0, 16($sp) sw $t0, 4($sp) lw $t0, 4($sp) lw $t1, 20($sp) -sw $t1, 4($t0) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 24($sp) +lw $t0, 28($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 12($sp) +sw $t0, 16($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra CellularAutomaton.print: sw $ra, 0($sp) @@ -441,13 +472,13 @@ la $a0, string_1 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 3 offset 2 result String.concat +#obj 3 offset 1 result String.concat jal String.concat sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 #Dispatch in place -#obj 5 offset 8 result IO.out_string +#obj 6 offset 9 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -455,14 +486,18 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) +lw $t0, 40($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 28($sp) +sw $t0, 32($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra CellularAutomaton.num_cells: sw $ra, 0($sp) @@ -485,8 +520,12 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra CellularAutomaton.cell: sw $ra, 0($sp) @@ -514,14 +553,18 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result String.substr +#obj 4 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra CellularAutomaton.cell_left_neighbor: sw $ra, 0($sp) @@ -543,7 +586,7 @@ sw $t0, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -558,7 +601,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) +lw $t0, 44($sp) sw $t0, 4($sp) #Args: 0 #Binary @@ -568,25 +611,25 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) +lw $t0, 48($sp) sw $t0, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 5 offset 12 result CellularAutomaton.cell +#obj 7 offset 16 result CellularAutomaton.cell jal CellularAutomaton.cell sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 52($sp) j _fi_2 _if_2: #Self-Dispatch @@ -597,7 +640,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) +lw $t0, 72($sp) sw $t0, 4($sp) #Args: 0 #Binary @@ -612,10 +655,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) +lw $t0, 84($sp) sw $t0, 4($sp) #Dispatch in place -#obj 2 offset 17 result CellularAutomaton.num_cells +#obj 2 offset 21 result CellularAutomaton.num_cells jal CellularAutomaton.num_cells sw $a1, 0($sp) addi $sp, $sp, -4 @@ -624,24 +667,28 @@ addiu $sp, $sp, 0 li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 sw $t0, 16($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 6 offset 18 result CellularAutomaton.cell +#obj 8 offset 24 result CellularAutomaton.cell jal CellularAutomaton.cell sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 60($sp) +sw $t0, 84($sp) _fi_2: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra CellularAutomaton.cell_right_neighbor: sw $ra, 0($sp) @@ -683,15 +730,15 @@ addiu $sp, $sp, 0 li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 sw $t0, 16($sp) addiu $sp, $sp, 8 -lw $t0, 20($sp) -lw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) seq $t0, $t0, $t1 -sw $t0, 24($sp) +sw $t0, 32($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_3 @@ -703,7 +750,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 48($sp) +lw $t0, 60($sp) sw $t0, 4($sp) #Args: 0 #Binary @@ -713,25 +760,25 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 64($sp) sw $t0, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 5 offset 15 result CellularAutomaton.cell +#obj 7 offset 20 result CellularAutomaton.cell jal CellularAutomaton.cell sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 48($sp) +sw $t0, 68($sp) j _fi_3 _if_3: #Self-Dispatch @@ -742,7 +789,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) +lw $t0, 88($sp) sw $t0, 4($sp) #Args: 0 #Integer @@ -750,18 +797,22 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 3 offset 18 result CellularAutomaton.cell +#obj 3 offset 23 result CellularAutomaton.cell jal CellularAutomaton.cell sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 60($sp) +sw $t0, 80($sp) _fi_3: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra CellularAutomaton.cell_at_next_evolution: sw $ra, 0($sp) @@ -819,7 +870,7 @@ addiu $sp, $sp, -4 la $a0, string_4 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 20($sp) @@ -831,7 +882,7 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 28($sp) +sw $t0, 36($sp) j _fi_5 _if_5: #Integer @@ -839,7 +890,7 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 44($sp) _fi_5: addiu $sp, $sp, 8 #Condition @@ -858,16 +909,16 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) +lw $t0, 92($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) +lw $t0, 92($sp) sw $t0, 4($sp) #Dispatch in place -#obj 3 offset 20 result CellularAutomaton.cell_left_neighbor +#obj 3 offset 24 result CellularAutomaton.cell_left_neighbor jal CellularAutomaton.cell_left_neighbor sw $a1, 0($sp) addi $sp, $sp, -4 @@ -879,7 +930,7 @@ addiu $sp, $sp, -4 la $a0, string_6 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 20($sp) @@ -891,7 +942,7 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 28($sp) +sw $t0, 36($sp) j _fi_7 _if_7: #Integer @@ -899,13 +950,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 44($sp) _fi_7: addiu $sp, $sp, 8 -lw $t0, 36($sp) +lw $t0, 52($sp) lw $t1, 4($sp) add $t0, $t0, $t1 -sw $t0, 68($sp) +sw $t0, 100($sp) addiu $sp, $sp, 8 #Condition li $a0, 0 @@ -923,16 +974,16 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 108($sp) +lw $t0, 140($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 108($sp) +lw $t0, 140($sp) sw $t0, 4($sp) #Dispatch in place -#obj 3 offset 28 result CellularAutomaton.cell_right_neighbor +#obj 3 offset 36 result CellularAutomaton.cell_right_neighbor jal CellularAutomaton.cell_right_neighbor sw $a1, 0($sp) addi $sp, $sp, -4 @@ -944,7 +995,7 @@ addiu $sp, $sp, -4 la $a0, string_8 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 20($sp) @@ -956,7 +1007,7 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 28($sp) +sw $t0, 36($sp) j _fi_9 _if_9: #Integer @@ -964,13 +1015,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 44($sp) _fi_9: addiu $sp, $sp, 8 -lw $t0, 36($sp) +lw $t0, 52($sp) lw $t1, 4($sp) add $t0, $t0, $t1 -sw $t0, 104($sp) +sw $t0, 152($sp) addiu $sp, $sp, 8 #Integer li $a0, 1 @@ -979,7 +1030,7 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 -sw $t0, 112($sp) +sw $t0, 160($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_10 @@ -991,7 +1042,7 @@ la $a0, string_11 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 120($sp) +sw $t0, 172($sp) j _fi_10 _if_10: #loading label @@ -1002,12 +1053,16 @@ la $a0, string_12 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 124($sp) +sw $t0, 180($sp) _fi_10: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra CellularAutomaton.evolve: sw $ra, 0($sp) @@ -1049,7 +1104,7 @@ addiu $sp, $sp, -4 lw $t0, 52($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) li $t3, 1 add $t0, $t0, $t3 @@ -1073,7 +1128,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) +lw $t0, 72($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Args: 0 @@ -1085,30 +1140,30 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 72($sp) +lw $t0, 80($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) +lw $t0, 84($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 3 offset 19 result CellularAutomaton.cell_at_next_evolution +#obj 3 offset 21 result CellularAutomaton.cell_at_next_evolution jal CellularAutomaton.cell_at_next_evolution sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 5 offset 4 result String.concat +#obj 5 offset 1 result String.concat jal String.concat sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 76($sp) -sw $t1, -4($t0) +lw $t1, 88($sp) +sw $t1, -4($sp) #Assignment #Binary li $a0, 0 @@ -1117,23 +1172,23 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 96($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 88($sp) -sw $t1, -4($t0) +lw $t1, 108($sp) +sw $t1, -4($sp) lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 48($sp) addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_13 @@ -1142,32 +1197,36 @@ _pool_13: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) +lw $t0, 112($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) -lw $t1, 92($sp) -sw $t1, 4($t0) +lw $t1, 112($sp) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 96($sp) +lw $t0, 120($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 64($sp) +sw $t0, 88($sp) addiu $sp, $sp, 12 -lw $t0, 24242424($sp) +lw $t0, 120($sp) sw $t0, 7777($sp) addiu $sp, $sp, 8 -lw $t0, 8888($sp) +lw $t0, 32($sp) sw $t0, 5555($sp) addiu $sp, $sp, 8 -lw $t0, 6666($sp) +lw $t0, 24($sp) sw $t0, 3333($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.Constructor: sw $ra, 0($sp) @@ -1176,8 +1235,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.type_name: sw $ra, 0($sp) @@ -1230,14 +1293,14 @@ la $a0, string_14 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 4($t0) +lw $t1, 36($sp) +sw $t1, 4($sp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -1246,7 +1309,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) +lw $t0, 44($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Dispatch in place @@ -1275,10 +1338,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) +lw $t0, 72($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) li $t3, 1 add $t0, $t0, $t3 @@ -1301,7 +1364,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) +lw $t0, 92($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Dispatch in place @@ -1318,7 +1381,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 104($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Dispatch in place @@ -1335,41 +1398,37 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) +lw $t0, 116($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 96($sp) -sw $t1, -4($t0) +lw $t1, 128($sp) +sw $t1, -4($sp) lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 48($sp) addiu $sp, $sp, 12 addiu $sp, $sp, 8 j _loop_15 _pool_15: -lw $t0, 24242424($sp) -sw $t0, 11111111($sp) +lw $t0, 120($sp) +sw $t0, 13131313($sp) addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 60($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 44($sp) +sw $t0, 52($sp) addiu $sp, $sp, 16 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra li $v0, 10 syscall diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips new file mode 100644 index 00000000..670476c9 --- /dev/null +++ b/tests/codegen/complex.mips @@ -0,0 +1,923 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_2: .asciiz "=(\n" +string_3: .asciiz "=)\n" +string_5: .asciiz "+" +string_6: .asciiz "I" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Complex_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main +Complex_name: .asciiz "Complex" +Complex_VT: +.word Complex_INH +.word Complex.init +.word Complex.print +.word Complex.reflect_0 +.word Complex.reflect_X +.word Complex.reflect_Y + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 16($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 15 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 44($sp) +j _fi_1 +_if_1: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 18 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_1: +addiu $sp, $sp, 8 +lw $t0, 72($sp) +sw $t0, 3333($sp) +addiu $sp, $sp, 8 +Complex.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Complex_name +jr $ra +Complex.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 48($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 14 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_5 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 1 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 8 offset 2 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 10 offset 1 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 68($sp) +j _fi_4 +_if_4: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 22 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.reflect_0: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 56($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.reflect_X: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.reflect_Y: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index dfc81a2e..aa581254 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -72,27 +72,29 @@ la $a0, buffer li $a1, 65536 li $v0, 8 syscall +sw $a1, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) jal String.length addiu $sp, $sp, 4 -move $a2, $v0 +move $a2, $sp addiu $a2, $a2, -1 move $a0, $v0 li $v0, 9 syscall move $v1, $v0 la $a0, buffer +li $a2, 0 _in_string.loop: beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) +lb $a1, 4($sp) +sb $a1, 4($sp) addiu $a0, $a0, 1 addiu $v1, $v1, 1 addiu $a2, $a2, -1 j _in_string.loop _in_string.end: -sb $zero, 0($v1) +sb $zero, 0($sp) move $ra, $a3 jr $ra @@ -127,14 +129,15 @@ syscall String.length: -lw $a0, -4($sp) +lw $a0, 4($sp) _stringlength.loop: -lb $a1, 0($a0) +lb $a1, 0($sp) beqz $a1, _stringlength.end addiu $a0, $a0, 1 j _stringlength.loop _stringlength.end: -lw $a1, -4($sp) +j Object.abort +lw $a1, 4($sp) subu $v0, $a0, $a1 jr $ra @@ -245,8 +248,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Object.type_name: sw $ra, 0($sp) @@ -260,8 +267,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Int.type_name: sw $ra, 0($sp) @@ -275,8 +286,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra IO.type_name: sw $ra, 0($sp) @@ -290,8 +305,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Bool.type_name: sw $ra, 0($sp) @@ -305,8 +324,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra String.type_name: sw $ra, 0($sp) @@ -350,8 +373,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.type_name: sw $ra, 0($sp) @@ -436,10 +463,6 @@ addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 32($sp) addiu $sp, $sp, 12 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra Main.fib: sw $ra, 0($sp) addiu $sp, $sp, -4 @@ -473,7 +496,7 @@ sw $t0, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -481,7 +504,7 @@ addiu $sp, $sp, 8 lw $t0, 4($sp) li $t1, 1 sub $t0, $t1, $t0 -sw $t0, 16($sp) +sw $t0, 24($sp) lw $t0, 4($sp) bnez $t0, _body_3 j _pool_3 @@ -498,23 +521,23 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) +lw $t0, 64($sp) lw $t1, -4($t0) sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) +lw $t0, 68($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 60($sp) -sw $t1, -4($t0) +lw $t1, 76($sp) +sw $t1, -4($sp) #Assignment #Binary li $a0, 0 @@ -523,41 +546,41 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) +lw $t0, 80($sp) sw $t0, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 68($sp) +sw $t0, 92($sp) #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) +lw $t0, 100($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) -lw $t1, 76($sp) -sw $t1, -4($t0) +lw $t1, 100($sp) +sw $t1, -4($sp) #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 80($sp) +lw $t0, 108($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) -lw $t1, 80($sp) -sw $t1, -4($t0) +lw $t1, 108($sp) +sw $t1, -4($sp) lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 60($sp) addiu $sp, $sp, 16 addiu $sp, $sp, 8 j _loop_3 @@ -565,18 +588,22 @@ _pool_3: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 116($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) -sw $t0, 64($sp) +sw $t0, 96($sp) addiu $sp, $sp, 8 -lw $t0, 21212121($sp) +lw $t0, 116($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra li $v0, 10 syscall diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index ef37489d..7b29cc67 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -175,27 +175,29 @@ la $a0, buffer li $a1, 65536 li $v0, 8 syscall +sw $a1, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) jal String.length addiu $sp, $sp, 4 -move $a2, $v0 +move $a2, $sp addiu $a2, $a2, -1 move $a0, $v0 li $v0, 9 syscall move $v1, $v0 la $a0, buffer +li $a2, 0 _in_string.loop: beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) +lb $a1, 4($sp) +sb $a1, 4($sp) addiu $a0, $a0, 1 addiu $v1, $v1, 1 addiu $a2, $a2, -1 j _in_string.loop _in_string.end: -sb $zero, 0($v1) +sb $zero, 0($sp) move $ra, $a3 jr $ra @@ -230,14 +232,15 @@ syscall String.length: -lw $a0, -4($sp) +lw $a0, 4($sp) _stringlength.loop: -lb $a1, 0($a0) +lb $a1, 0($sp) beqz $a1, _stringlength.end addiu $a0, $a0, 1 j _stringlength.loop _stringlength.end: -lw $a1, -4($sp) +j Object.abort +lw $a1, 4($sp) subu $v0, $a0, $a1 jr $ra @@ -348,8 +351,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Object.type_name: sw $ra, 0($sp) @@ -363,8 +370,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Int.type_name: sw $ra, 0($sp) @@ -378,8 +389,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra IO.type_name: sw $ra, 0($sp) @@ -393,8 +408,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Bool.type_name: sw $ra, 0($sp) @@ -408,8 +427,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra String.type_name: sw $ra, 0($sp) @@ -475,7 +498,7 @@ addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 20($sp) -sw $t1, 4($t0) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 @@ -501,14 +524,18 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($t0) +lw $t1, 36($sp) +sw $t1, 8($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Graph.type_name: sw $ra, 0($sp) @@ -548,18 +575,18 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) +lw $t0, 36($sp) lw $t1, 8($t0) sw $t1, 4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 5 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($t0) +lw $t1, 36($sp) +sw $t1, 8($sp) #Assignment #Point-Dispatch li $a0, 0 @@ -569,30 +596,34 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) +lw $t0, 48($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) +lw $t0, 48($sp) sw $t0, 4($sp) #Dispatch in place -#obj 3 offset 2 result -1 +#obj 3 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 44($sp) -sw $t1, 4($t0) +lw $t1, 56($sp) +sw $t1, 4($sp) lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 44($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Graph.print_E: sw $ra, 0($sp) @@ -615,8 +646,12 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Graph.print_V: sw $ra, 0($sp) @@ -639,8 +674,12 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Vertice.Constructor: sw $ra, 0($sp) @@ -671,13 +710,17 @@ addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 20($sp) -sw $t1, 8($t0) +sw $t1, 8($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Vertice.type_name: sw $ra, 0($sp) @@ -694,8 +737,12 @@ lw $t0, 12($sp) lw $t1, 8($t0) sw $t1, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Vertice.number: sw $ra, 0($sp) @@ -707,8 +754,12 @@ lw $t0, 12($sp) lw $t1, 4($t0) sw $t1, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Vertice.init: sw $ra, 0($sp) @@ -725,18 +776,22 @@ lw $t0, 16($sp) sw $t0, 4($sp) lw $t0, 4($sp) lw $t1, 20($sp) -sw $t1, 4($t0) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 24($sp) +lw $t0, 28($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 12($sp) +sw $t0, 16($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Vertice.add_out: sw $ra, 0($sp) @@ -764,25 +819,29 @@ addiu $sp, $sp, -4 lw $t0, 24($sp) sw $t0, 4($sp) #Dispatch in place -#obj 3 offset 2 result -1 +#obj 3 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 8($t0) +lw $t1, 32($sp) +sw $t1, 8($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) +lw $t0, 36($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 20($sp) +sw $t0, 24($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Vertice.print: sw $ra, 0($sp) @@ -832,11 +891,15 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 24($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Edge.Constructor: sw $ra, 0($sp) @@ -845,8 +908,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Edge.type_name: sw $ra, 0($sp) @@ -868,36 +935,40 @@ lw $t0, 24($sp) sw $t0, 4($sp) lw $t0, 4($sp) lw $t1, 28($sp) -sw $t1, 4($t0) +sw $t1, 4($sp) #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 24($sp) +lw $t0, 28($sp) sw $t0, 4($sp) lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($t0) +lw $t1, 36($sp) +sw $t1, 8($sp) #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 24($sp) +lw $t0, 32($sp) sw $t0, 4($sp) lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, 12($t0) +lw $t1, 44($sp) +sw $t1, 12($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) +lw $t0, 52($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 20($sp) +sw $t0, 32($sp) addiu $sp, $sp, 16 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Edge.print: sw $ra, 0($sp) @@ -1051,8 +1122,12 @@ lw $t0, 4($sp) sw $t0, 76($sp) addiu $sp, $sp, 24 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra EList.Constructor: sw $ra, 0($sp) @@ -1061,8 +1136,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra EList.type_name: sw $ra, 0($sp) @@ -1076,8 +1155,12 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra EList.head: sw $ra, 0($sp) @@ -1112,8 +1195,12 @@ lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra EList.tail: sw $ra, 0($sp) @@ -1147,8 +1234,12 @@ lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra EList.cons: sw $ra, 0($sp) @@ -1195,14 +1286,18 @@ addiu $sp, $sp, -4 lw $t0, 36($sp) sw $t0, 4($sp) #Dispatch in place -#obj 6 offset 3 result -1 +#obj 6 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra EList.append: sw $ra, 0($sp) @@ -1247,10 +1342,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) +lw $t0, 44($sp) sw $t0, 4($sp) #Dispatch in place -#obj 2 offset 10 result EList.tail +#obj 2 offset 11 result EList.tail jal EList.tail sw $a1, 0($sp) addi $sp, $sp, -4 @@ -1259,10 +1354,10 @@ addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) +lw $t0, 44($sp) sw $t0, 4($sp) #Dispatch in place -#obj 4 offset 2 result -1 +#obj 4 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -1276,36 +1371,40 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 60($sp) sw $t0, 4($sp) #Dispatch in place -#obj 2 offset 13 result EList.head +#obj 2 offset 15 result EList.head jal EList.head sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 0 #Dispatch in place -#obj 7 offset 3 result -1 +#obj 8 offset 3 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 40($sp) +sw $t0, 48($sp) j _fi_4 _if_4: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 64($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 44($sp) +sw $t0, 56($sp) _fi_4: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra EList.print: sw $ra, 0($sp) @@ -1335,8 +1434,12 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra ECons.Constructor: sw $ra, 0($sp) @@ -1345,8 +1448,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra ECons.type_name: sw $ra, 0($sp) @@ -1360,8 +1467,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra ECons.head: sw $ra, 0($sp) @@ -1373,8 +1484,12 @@ lw $t0, 12($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra ECons.tail: sw $ra, 0($sp) @@ -1386,8 +1501,12 @@ lw $t0, 12($sp) lw $t1, 4($t0) sw $t1, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra ECons.init: sw $ra, 0($sp) @@ -1404,27 +1523,31 @@ lw $t0, 20($sp) sw $t0, 4($sp) lw $t0, 4($sp) lw $t1, 24($sp) -sw $t1, -4($t0) +sw $t1, -4($sp) #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) +lw $t0, 24($sp) sw $t0, 4($sp) lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 4($t0) +lw $t1, 32($sp) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) +lw $t0, 40($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 16($sp) +sw $t0, 24($sp) addiu $sp, $sp, 12 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra ECons.print: sw $ra, 0($sp) @@ -1458,7 +1581,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) +lw $t0, 32($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Dispatch in place @@ -1468,11 +1591,15 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 20($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VList.Constructor: sw $ra, 0($sp) @@ -1481,8 +1608,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VList.type_name: sw $ra, 0($sp) @@ -1496,8 +1627,12 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VList.head: sw $ra, 0($sp) @@ -1532,8 +1667,12 @@ lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VList.tail: sw $ra, 0($sp) @@ -1567,8 +1706,12 @@ lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VList.cons: sw $ra, 0($sp) @@ -1615,14 +1758,18 @@ addiu $sp, $sp, -4 lw $t0, 36($sp) sw $t0, 4($sp) #Dispatch in place -#obj 6 offset 3 result -1 +#obj 6 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VList.print: sw $ra, 0($sp) @@ -1652,8 +1799,12 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VCons.Constructor: sw $ra, 0($sp) @@ -1662,8 +1813,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VCons.type_name: sw $ra, 0($sp) @@ -1677,8 +1832,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VCons.head: sw $ra, 0($sp) @@ -1690,8 +1849,12 @@ lw $t0, 12($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VCons.tail: sw $ra, 0($sp) @@ -1703,8 +1866,12 @@ lw $t0, 12($sp) lw $t1, 4($t0) sw $t1, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VCons.init: sw $ra, 0($sp) @@ -1721,27 +1888,31 @@ lw $t0, 20($sp) sw $t0, 4($sp) lw $t0, 4($sp) lw $t1, 24($sp) -sw $t1, -4($t0) +sw $t1, -4($sp) #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) +lw $t0, 24($sp) sw $t0, 4($sp) lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 4($t0) +lw $t1, 32($sp) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) +lw $t0, 40($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 16($sp) +sw $t0, 24($sp) addiu $sp, $sp, 12 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra VCons.print: sw $ra, 0($sp) @@ -1775,7 +1946,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) +lw $t0, 32($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Dispatch in place @@ -1785,11 +1956,15 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 20($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Parse.Constructor: sw $ra, 0($sp) @@ -1820,13 +1995,17 @@ addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) lw $t1, 20($sp) -sw $t1, 4($t0) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Parse.type_name: sw $ra, 0($sp) @@ -1886,7 +2065,7 @@ addiu $sp, $sp, -4 la $a0, string_8 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1894,7 +2073,7 @@ addiu $sp, $sp, 8 lw $t0, 4($sp) li $t1, 1 sub $t0, $t1, $t0 -sw $t0, 16($sp) +sw $t0, 24($sp) #Args: 1 #Unary li $a0, 0 @@ -1907,7 +2086,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) +lw $t0, 76($sp) lw $t1, -4($t0) sw $t1, 4($sp) #loading label @@ -1917,7 +2096,7 @@ addiu $sp, $sp, -4 la $a0, string_9 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -1925,9 +2104,9 @@ addiu $sp, $sp, 8 lw $t0, 4($sp) li $t1, 1 sub $t0, $t1, $t0 -sw $t0, 16($sp) +sw $t0, 24($sp) #Dispatch in place -#obj 10 offset 9 result -1 +#obj 14 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -1948,7 +2127,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 104($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Args: 0 @@ -1960,23 +2139,23 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) +lw $t0, 112($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 96($sp) +lw $t0, 116($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 3 offset 24 result Parse.parse_line +#obj 3 offset 29 result Parse.parse_line jal Parse.parse_line sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 5 offset 4 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -1990,24 +2169,24 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 104($sp) +lw $t0, 128($sp) sw $t0, 4($sp) #Dispatch in place -#obj 2 offset 26 result IO.in_string +#obj 2 offset 32 result IO.in_string jal IO.in_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 0 lw $t0, 4($sp) -lw $t1, 104($sp) -sw $t1, -4($t0) +lw $t1, 128($sp) +sw $t1, -4($sp) lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 40($sp) addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_7 _pool_7: -lw $t0, 26262626($sp) +lw $t0, 128($sp) sw $t0, 6666($sp) addiu $sp, $sp, 8 li $a0, 0 @@ -2019,12 +2198,16 @@ sw $t1, 4($sp) lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 -lw $t0, 8888($sp) +lw $t0, 32($sp) sw $t0, 3333($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Parse.parse_line: sw $ra, 0($sp) @@ -2074,12 +2257,12 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) li $t1, 1 sub $t0, $t1, $t0 -sw $t0, 20($sp) +sw $t0, 28($sp) lw $t0, 4($sp) bnez $t0, _body_10 j _pool_10 @@ -2104,7 +2287,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) +lw $t0, 84($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Args: 0 @@ -2146,7 +2329,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 100($sp) +lw $t0, 108($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place @@ -2159,33 +2342,33 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 104($sp) +lw $t0, 116($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Args: 2 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 108($sp) +lw $t0, 120($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 8 offset 5 result -1 +#obj 9 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 16 #Dispatch in place -#obj 10 offset 9 result -1 +#obj 12 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 27272727($sp) -sw $t0, 16161616($sp) +lw $t0, 84($sp) +sw $t0, 18181818($sp) addiu $sp, $sp, 8 -lw $t0, 17171717($sp) -sw $t0, 14141414($sp) +lw $t0, 76($sp) +sw $t0, 16161616($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) sw $t0, 12($sp) @@ -2196,18 +2379,22 @@ _pool_10: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) +lw $t0, 76($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) -sw $t0, 44($sp) +sw $t0, 56($sp) addiu $sp, $sp, 8 -lw $t0, 16161616($sp) +lw $t0, 76($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Parse.c2i: sw $ra, 0($sp) @@ -2232,7 +2419,7 @@ addiu $sp, $sp, -4 la $a0, string_11 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2250,7 +2437,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) +lw $t0, 44($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -2259,7 +2446,7 @@ addiu $sp, $sp, -4 la $a0, string_13 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2277,7 +2464,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) +lw $t0, 68($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -2286,7 +2473,7 @@ addiu $sp, $sp, -4 la $a0, string_15 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2304,7 +2491,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) +lw $t0, 92($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -2313,7 +2500,7 @@ addiu $sp, $sp, -4 la $a0, string_17 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2331,7 +2518,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) +lw $t0, 116($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -2340,7 +2527,7 @@ addiu $sp, $sp, -4 la $a0, string_19 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2358,7 +2545,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 100($sp) +lw $t0, 140($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -2367,7 +2554,7 @@ addiu $sp, $sp, -4 la $a0, string_21 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2385,7 +2572,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 116($sp) +lw $t0, 164($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -2394,7 +2581,7 @@ addiu $sp, $sp, -4 la $a0, string_23 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2412,7 +2599,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 132($sp) +lw $t0, 188($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -2421,7 +2608,7 @@ addiu $sp, $sp, -4 la $a0, string_25 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2439,7 +2626,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 148($sp) +lw $t0, 212($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -2448,7 +2635,7 @@ addiu $sp, $sp, -4 la $a0, string_27 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2466,7 +2653,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 164($sp) +lw $t0, 236($sp) sw $t0, 4($sp) #loading label li $a0, 0 @@ -2475,7 +2662,7 @@ addiu $sp, $sp, -4 la $a0, string_29 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -2494,10 +2681,10 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 184($sp) +lw $t0, 264($sp) sw $t0, 4($sp) #Dispatch in place -#obj 2 offset 46 result Object.abort +#obj 2 offset 66 result Object.abort jal Object.abort sw $a1, 0($sp) addi $sp, $sp, -4 @@ -2510,7 +2697,7 @@ lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 32($sp) +sw $t0, 44($sp) j _fi_30 _if_30: #Integer @@ -2518,11 +2705,11 @@ li $a0, 9 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 48($sp) _fi_30: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 52($sp) +sw $t0, 76($sp) j _fi_28 _if_28: #Integer @@ -2530,11 +2717,11 @@ li $a0, 8 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 80($sp) _fi_28: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 72($sp) +sw $t0, 108($sp) j _fi_26 _if_26: #Integer @@ -2542,11 +2729,11 @@ li $a0, 7 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 76($sp) +sw $t0, 112($sp) _fi_26: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 92($sp) +sw $t0, 140($sp) j _fi_24 _if_24: #Integer @@ -2554,11 +2741,11 @@ li $a0, 6 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 96($sp) +sw $t0, 144($sp) _fi_24: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 112($sp) +sw $t0, 172($sp) j _fi_22 _if_22: #Integer @@ -2566,11 +2753,11 @@ li $a0, 5 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 116($sp) +sw $t0, 176($sp) _fi_22: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 132($sp) +sw $t0, 204($sp) j _fi_20 _if_20: #Integer @@ -2578,11 +2765,11 @@ li $a0, 4 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 136($sp) +sw $t0, 208($sp) _fi_20: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 152($sp) +sw $t0, 236($sp) j _fi_18 _if_18: #Integer @@ -2590,11 +2777,11 @@ li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 156($sp) +sw $t0, 240($sp) _fi_18: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 172($sp) +sw $t0, 268($sp) j _fi_16 _if_16: #Integer @@ -2602,11 +2789,11 @@ li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 176($sp) +sw $t0, 272($sp) _fi_16: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 192($sp) +sw $t0, 300($sp) j _fi_14 _if_14: #Integer @@ -2614,11 +2801,11 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 196($sp) +sw $t0, 304($sp) _fi_14: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 212($sp) +sw $t0, 332($sp) j _fi_12 _if_12: #Integer @@ -2626,12 +2813,16 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 216($sp) +sw $t0, 336($sp) _fi_12: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Parse.a2i: sw $ra, 0($sp) @@ -2667,7 +2858,7 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_31 @@ -2687,7 +2878,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 44($sp) +lw $t0, 52($sp) sw $t0, 4($sp) #Args: 0 #Integer @@ -2700,7 +2891,7 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result String.substr +#obj 4 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 @@ -2715,7 +2906,7 @@ addi $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 -sw $t0, 24($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_33 @@ -2735,7 +2926,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 72($sp) +lw $t0, 88($sp) sw $t0, 4($sp) #Args: 0 #Integer @@ -2748,7 +2939,7 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result String.substr +#obj 4 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 @@ -2763,7 +2954,7 @@ addi $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 -sw $t0, 24($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_35 @@ -2775,22 +2966,22 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 96($sp) +lw $t0, 120($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 96($sp) +lw $t0, 120($sp) sw $t0, 4($sp) #Dispatch in place -#obj 3 offset 25 result Parse.a2i_aux +#obj 3 offset 31 result Parse.a2i_aux jal Parse.a2i_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 40($sp) +sw $t0, 48($sp) j _fi_35 _if_35: #Self-Dispatch @@ -2801,7 +2992,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 108($sp) +lw $t0, 136($sp) sw $t0, 4($sp) #Args: 0 #Point-Dispatch @@ -2812,7 +3003,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 112($sp) +lw $t0, 140($sp) sw $t0, 4($sp) #Args: 0 #Integer @@ -2832,7 +3023,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 128($sp) +lw $t0, 156($sp) sw $t0, 4($sp) #Dispatch in place #obj 2 offset 1 result String.length @@ -2847,26 +3038,26 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 7 offset 6 result String.substr +#obj 9 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place -#obj 9 offset 34 result Parse.a2i +#obj 12 offset 44 result Parse.a2i jal Parse.a2i sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 76($sp) +sw $t0, 100($sp) _fi_35: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 104($sp) +sw $t0, 136($sp) j _fi_33 _if_33: #Unary @@ -2881,7 +3072,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 148($sp) +lw $t0, 188($sp) sw $t0, 4($sp) #Args: 0 #Point-Dispatch @@ -2892,7 +3083,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 152($sp) +lw $t0, 192($sp) sw $t0, 4($sp) #Args: 0 #Integer @@ -2912,7 +3103,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 168($sp) +lw $t0, 208($sp) sw $t0, 4($sp) #Dispatch in place #obj 2 offset 1 result String.length @@ -2927,29 +3118,29 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 7 offset 6 result String.substr +#obj 9 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place -#obj 9 offset 44 result Parse.a2i_aux +#obj 12 offset 57 result Parse.a2i_aux jal Parse.a2i_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) not $t0, $t0 -sw $t0, 40($sp) +sw $t0, 52($sp) lw $t0, 4($sp) -sw $t0, 144($sp) +sw $t0, 188($sp) _fi_33: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 164($sp) +sw $t0, 216($sp) j _fi_31 _if_31: #Integer @@ -2957,12 +3148,16 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 168($sp) +sw $t0, 220($sp) _fi_31: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Parse.a2i_aux: sw $ra, 0($sp) @@ -3004,7 +3199,7 @@ addiu $sp, $sp, -4 lw $t0, 56($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) li $t3, 1 add $t0, $t0, $t3 @@ -3030,7 +3225,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) +lw $t0, 84($sp) lw $t1, -4($t0) sw $t1, 4($sp) #loading label @@ -3040,7 +3235,7 @@ addiu $sp, $sp, -4 la $a0, string_37 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -3058,7 +3253,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) +lw $t0, 108($sp) lw $t1, -4($t0) sw $t1, 4($sp) #loading label @@ -3068,7 +3263,7 @@ addiu $sp, $sp, -4 la $a0, string_39 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -3091,14 +3286,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 112($sp) +lw $t0, 136($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 10 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) mult $t0, $t1 mflo $t0 @@ -3112,7 +3307,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 124($sp) +lw $t0, 156($sp) sw $t0, 4($sp) #Args: 0 #Point-Dispatch @@ -3123,13 +3318,13 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 128($sp) +lw $t0, 160($sp) sw $t0, 4($sp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 136($sp) +lw $t0, 168($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Args: 1 @@ -3138,25 +3333,25 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result String.substr +#obj 4 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place -#obj 6 offset 35 result Parse.c2i +#obj 7 offset 44 result Parse.c2i jal Parse.c2i sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 28($sp) +lw $t0, 32($sp) lw $t1, 4($sp) add $t0, $t0, $t1 -sw $t0, 40($sp) +sw $t0, 52($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 140($sp) -sw $t1, -4($t0) +lw $t1, 176($sp) +sw $t1, -4($sp) #Assignment #Binary li $a0, 0 @@ -3165,21 +3360,21 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 148($sp) +lw $t0, 184($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t0, $t1 sw $t0, 12($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 152($sp) -sw $t1, -4($t0) +lw $t1, 196($sp) +sw $t1, -4($sp) #Condition li $a0, 0 sw $a0, ($sp) @@ -3191,16 +3386,16 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 164($sp) +lw $t0, 208($sp) lw $t1, -4($t0) sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 168($sp) +lw $t0, 212($sp) lw $t1, -4($t0) sw $t1, 4($sp) -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) seq $t0, $t0, $t1 sw $t0, 12($sp) @@ -3215,7 +3410,7 @@ la $a0, string_42 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 20($sp) +sw $t0, 28($sp) j _fi_41 _if_41: #Assignment @@ -3227,17 +3422,17 @@ la $a0, string_43 sw $a0, 0($sp) addi $sp, $sp, -4 lw $t0, 4($sp) -lw $t1, 176($sp) -sw $t1, 8($t0) +lw $t1, 232($sp) +sw $t1, 8($sp) lw $t0, 4($sp) -sw $t0, 24($sp) +sw $t0, 40($sp) _fi_41: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 80($sp) +sw $t0, 116($sp) addiu $sp, $sp, 12 lw $t0, 4($sp) -sw $t0, 96($sp) +sw $t0, 140($sp) j _fi_40 _if_40: #Block @@ -3253,7 +3448,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 184($sp) +lw $t0, 244($sp) sw $t0, 4($sp) #Args: 0 #Binary @@ -3263,14 +3458,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 196($sp) +lw $t0, 256($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t0, $t1 sw $t0, 12($sp) @@ -3292,7 +3487,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 212($sp) +lw $t0, 280($sp) sw $t0, 4($sp) #Dispatch in place #obj 2 offset 1 result String.length @@ -3303,13 +3498,13 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 220($sp) +lw $t0, 292($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 8($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 #Integer li $a0, 1 @@ -3318,36 +3513,36 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 -sw $t0, 24($sp) +sw $t0, 32($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 11 offset 10 result String.substr +#obj 16 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $t0, 4($sp) -lw $t1, 224($sp) -sw $t1, 8($t0) +lw $t1, 308($sp) +sw $t1, 8($sp) #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 228($sp) +lw $t0, 312($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) -lw $t1, 228($sp) -sw $t1, -4($t0) +lw $t1, 312($sp) +sw $t1, -4($sp) lw $t0, 4($sp) -sw $t0, 52($sp) +sw $t0, 80($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 148($sp) +sw $t0, 220($sp) _fi_40: addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 164($sp) +sw $t0, 244($sp) j _fi_38 _if_38: #Block @@ -3363,7 +3558,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 236($sp) +lw $t0, 324($sp) sw $t0, 4($sp) #Args: 0 #Binary @@ -3373,14 +3568,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 248($sp) +lw $t0, 336($sp) lw $t1, -4($t0) sw $t1, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +lw $t0, 4($sp) lw $t1, 4($sp) add $t0, $t0, $t1 sw $t0, 12($sp) @@ -3402,7 +3597,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 264($sp) +lw $t0, 360($sp) sw $t0, 4($sp) #Dispatch in place #obj 2 offset 1 result String.length @@ -3413,13 +3608,13 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 272($sp) +lw $t0, 372($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 8($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 -sw $t0, 16($sp) +sw $t0, 20($sp) addiu $sp, $sp, 8 #Integer li $a0, 1 @@ -3428,44 +3623,44 @@ addiu $sp, $sp, -4 lw $t0, 8($sp) lw $t1, 4($sp) sub $t0, $t0, $t1 -sw $t0, 24($sp) +sw $t0, 32($sp) addiu $sp, $sp, 8 #Dispatch in place -#obj 11 offset 10 result String.substr +#obj 16 offset 1 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $t0, 4($sp) -lw $t1, 276($sp) -sw $t1, 8($t0) +lw $t1, 388($sp) +sw $t1, 8($sp) #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 280($sp) +lw $t0, 392($sp) lw $t1, -4($t0) sw $t1, 4($sp) lw $t0, 4($sp) -lw $t1, 280($sp) -sw $t1, -4($t0) +lw $t1, 392($sp) +sw $t1, -4($sp) lw $t0, 4($sp) -sw $t0, 52($sp) +sw $t0, 80($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 216($sp) +sw $t0, 324($sp) _fi_38: addiu $sp, $sp, 8 -lw $t0, 70707070($sp) -sw $t0, 15151515($sp) +lw $t0, 392($sp) +sw $t0, 17171717($sp) addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_36 _pool_36: -lw $t0, 16161616($sp) +lw $t0, 72($sp) sw $t0, 9999($sp) addiu $sp, $sp, 8 -lw $t0, 10101010($sp) +lw $t0, 40($sp) sw $t0, 7777($sp) addiu $sp, $sp, 8 li $a0, 0 @@ -3477,12 +3672,16 @@ sw $t1, 4($sp) lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 -lw $t0, 9999($sp) +lw $t0, 36($sp) sw $t0, 4444($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.Constructor: sw $ra, 0($sp) @@ -3499,13 +3698,17 @@ addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) lw $t1, 12($sp) -sw $t1, 4($t0) +sw $t1, 4($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.type_name: sw $ra, 0($sp) @@ -3544,7 +3747,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) +lw $t0, 32($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Dispatch in place @@ -3554,12 +3757,8 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -sw $t0, 20($sp) +sw $t0, 28($sp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra BoolOp.Constructor: sw $ra, 0($sp) addiu $sp, $sp, -4 @@ -3567,8 +3766,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra BoolOp.type_name: sw $ra, 0($sp) @@ -3593,21 +3796,25 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 12($sp) +sw $t0, 16($sp) j _fi_44 _if_44: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 24($sp) +lw $t0, 32($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 16($sp) +sw $t0, 24($sp) _fi_44: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra BoolOp.or: sw $ra, 0($sp) @@ -3626,22 +3833,26 @@ bnez $t0, _if_45 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) +lw $t0, 24($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 12($sp) +sw $t0, 16($sp) j _fi_45 _if_45: li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $t0, 4($sp) -sw $t0, 16($sp) +sw $t0, 24($sp) _fi_45: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra li $v0, 10 syscall diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips new file mode 100644 index 00000000..3cb2611f --- /dev/null +++ b/tests/codegen/hairyscary.mips @@ -0,0 +1,1414 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_13: .asciiz "do nothing" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Foo_INH: +.word Bazz_INH +Bar_INH: +.word Razz_INH +Razz_INH: +.word Foo_INH +Bazz_INH: +.word IO_INH +Main_INH: +.word Object_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Foo_name: .asciiz "Foo" +Foo_VT: +.word Foo_INH +.word Foo.doh +Bazz_name: .asciiz "Bazz" +Bazz_VT: +.word Bazz_INH +.word Bazz.printh +.word Bazz.doh +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 20 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +Foo.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +la $a1, Razz_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 8($sp) +lw $t0, 8($sp) +bnez $t0, branch_1 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 8($sp) +la $a1, Foo_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_2 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +la $a1, Bar_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_3 +addiu $sp, $sp, 4 +branch_1: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Bar_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bar.Constructor +la $v0, 1 +jal Bar.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +branch_2: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 20($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Razz_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Razz.Constructor +la $v0, 1 +jal Razz.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 12 +branch_3: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 36($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 40($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +lw $t1, 80($sp) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 16($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 31 result Foo.doh +jal Foo.doh +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 12($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 136($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 34 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 12($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 56($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 140($sp) +sw $t1, 8($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Foo.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Foo_name +jr $ra +Foo.doh: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 40($sp) +sw $t1, -4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 44($sp) +sw $t0, 3333($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bar.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 4 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 16($sp) +sw $t1, 4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 7 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 8($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bar.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bar_name +jr $ra +Razz.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +la $a1, Razz_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 8($sp) +lw $t0, 8($sp) +bnez $t0, branch_5 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 8($sp) +la $a1, Bar_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_6 +addiu $sp, $sp, 4 +branch_5: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Bar_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bar.Constructor +la $v0, 1 +jal Bar.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +branch_6: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 20($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +lw $t1, 60($sp) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Parent-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#DispatchParent in place +#obj 2 offset 1 result a.doh +la $v0, 1 +jal a.doh +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 16($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 16($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 44($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 120($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 30 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 12($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 56($sp) +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 33 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 12($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 72($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 136($sp) +sw $t1, 8($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Razz.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Razz_name +jr $ra +Bazz.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 12($sp) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +la $a1, Bazz_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 8($sp) +lw $t0, 8($sp) +bnez $t0, branch_8 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 8($sp) +la $a1, Razz_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_9 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +la $a1, Foo_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_10 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 16($sp) +la $a1, Bar_VT +la $t0, inherit +jalr $ra, $t0 +sw $v0, 4($sp) +lw $t0, 4($sp) +bnez $t0, branch_11 +addiu $sp, $sp, 4 +branch_8: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Foo_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Foo.Constructor +la $v0, 1 +jal Foo.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 12 +branch_9: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 20($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Bar_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bar.Constructor +la $v0, 1 +jal Bar.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 12 +branch_10: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 36($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Razz_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Razz.Constructor +la $v0, 1 +jal Razz.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 48($sp) +addiu $sp, $sp, 12 +branch_11: +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +sw $t0, 52($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 56($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +lw $t1, 108($sp) +sw $t1, 8($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 29 result Bazz.printh +jal Bazz.printh +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 116($sp) +sw $t1, 12($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bazz.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bazz_name +jr $ra +Bazz.printh: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 6 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bazz.doh: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 40($sp) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 44($sp) +sw $t0, 3333($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 16 +syscall +sw $v0, 4($sp) +la $a1, Bazz_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bazz.Constructor +la $v0, 1 +jal Bazz.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Foo_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Foo.Constructor +la $v0, 1 +jal Foo.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 36($sp) +sw $t1, 8($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Razz_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Razz.Constructor +la $v0, 1 +jal Razz.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 52($sp) +sw $t1, 12($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Bar_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Bar.Constructor +la $v0, 1 +jal Bar.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 68($sp) +sw $t1, 16($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_13 +sw $a0, 0($sp) +addi $sp, $sp, -4 +li $v0, 10 +syscall diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index 0a174992..e063eb04 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -70,27 +70,29 @@ la $a0, buffer li $a1, 65536 li $v0, 8 syscall +sw $a1, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) jal String.length addiu $sp, $sp, 4 -move $a2, $v0 +move $a2, $sp addiu $a2, $a2, -1 move $a0, $v0 li $v0, 9 syscall move $v1, $v0 la $a0, buffer +li $a2, 0 _in_string.loop: beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) +lb $a1, 4($sp) +sb $a1, 4($sp) addiu $a0, $a0, 1 addiu $v1, $v1, 1 addiu $a2, $a2, -1 j _in_string.loop _in_string.end: -sb $zero, 0($v1) +sb $zero, 0($sp) move $ra, $a3 jr $ra @@ -125,14 +127,15 @@ syscall String.length: -lw $a0, -4($sp) +lw $a0, 4($sp) _stringlength.loop: -lb $a1, 0($a0) +lb $a1, 0($sp) beqz $a1, _stringlength.end addiu $a0, $a0, 1 j _stringlength.loop _stringlength.end: -lw $a1, -4($sp) +j Object.abort +lw $a1, 4($sp) subu $v0, $a0, $a1 jr $ra @@ -243,8 +246,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Object.type_name: sw $ra, 0($sp) @@ -258,8 +265,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Int.type_name: sw $ra, 0($sp) @@ -273,8 +284,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra IO.type_name: sw $ra, 0($sp) @@ -288,8 +303,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Bool.type_name: sw $ra, 0($sp) @@ -303,8 +322,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra String.type_name: sw $ra, 0($sp) @@ -348,8 +371,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.type_name: sw $ra, 0($sp) @@ -377,9 +404,5 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra li $v0, 10 syscall diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips new file mode 100644 index 00000000..4780f043 --- /dev/null +++ b/tests/codegen/io.mips @@ -0,0 +1,828 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "A: Hello world\n" +string_2: .asciiz "B: Hello world\n" +string_3: .asciiz "C: Hello world\n" +string_4: .asciiz "D: Hello world\n" +string_5: .asciiz "Done.\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +A_INH: +.word Object_INH +B_INH: +.word A_INH +C_INH: +.word IO_INH +D_INH: +.word C_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A_name: .asciiz "A" +A_VT: +.word A_INH +.word A.out_a +B_name: .asciiz "B" +B_VT: +.word B_INH +.word B.out_b +C_name: .asciiz "C" +C_VT: +.word C_INH +.word C.out_c +D_name: .asciiz "D" +D_VT: +.word D_INH +.word D.out_d +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +A.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, IO_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result IO.Constructor +la $v0, 1 +jal IO.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +A.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, A_name +jr $ra +A.out_a: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +B.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +B.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, B_name +jr $ra +B.out_b: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +C.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +C.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, C_name +jr $ra +C.out_c: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +D.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +D.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, D_name +jr $ra +D.out_d: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_4 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, A_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result A.Constructor +la $v0, 1 +jal A.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, B_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result B.Constructor +la $v0, 1 +jal B.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, C_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result C.Constructor +la $v0, 1 +jal C.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, D_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result D.Constructor +la $v0, 1 +jal D.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_5 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 25 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 92($sp) +addiu $sp, $sp, 20 +li $v0, 10 +syscall diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips new file mode 100644 index 00000000..15289d36 --- /dev/null +++ b/tests/codegen/life.mips @@ -0,0 +1,5679 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_7: .asciiz "\n" +string_9: .asciiz "\n" +string_10: .asciiz "\n" +string_12: .asciiz " " +string_14: .asciiz " " +string_16: .asciiz " " +string_18: .asciiz " " +string_21: .asciiz " " +string_22: .asciiz " " +string_25: .asciiz " " +string_26: .asciiz " " +string_29: .asciiz " " +string_30: .asciiz " " +string_33: .asciiz " " +string_34: .asciiz " " +string_37: .asciiz " " +string_38: .asciiz " " +string_39: .asciiz "X" +string_41: .asciiz "X" +string_43: .asciiz "X" +string_45: .asciiz "X" +string_47: .asciiz "X" +string_49: .asciiz "X" +string_51: .asciiz "X" +string_53: .asciiz "X" +string_57: .asciiz "-" +string_58: .asciiz "X" +string_60: .asciiz "-" +string_61: .asciiz "X" +string_62: .asciiz "X" +string_64: .asciiz "\nPlease chose a number:\n" +string_65: .asciiz "\t1: A cross\n" +string_66: .asciiz "\t2: A slash from the upper left to lower right\n" +string_67: .asciiz "\t3: A slash from the upper right to lower left\n" +string_68: .asciiz "\t4: An X\n" +string_69: .asciiz "\t5: A greater than sign \n" +string_70: .asciiz "\t6: A less than sign\n" +string_71: .asciiz "\t7: Two greater than signs\n" +string_72: .asciiz "\t8: Two less than signs\n" +string_73: .asciiz "\t9: A 'V'\n" +string_74: .asciiz "\t10: An inverse 'V'\n" +string_75: .asciiz "\t11: Numbers 9 and 10 combined\n" +string_76: .asciiz "\t12: A full grid\n" +string_77: .asciiz "\t13: A 'T'\n" +string_78: .asciiz "\t14: A plus '+'\n" +string_79: .asciiz "\t15: A 'W'\n" +string_80: .asciiz "\t16: An 'M'\n" +string_81: .asciiz "\t17: An 'E'\n" +string_82: .asciiz "\t18: A '3'\n" +string_83: .asciiz "\t19: An 'O'\n" +string_84: .asciiz "\t20: An '8'\n" +string_85: .asciiz "\t21: An 'S'\n" +string_86: .asciiz "Your choice => " +string_87: .asciiz "\n" +string_109: .asciiz " " +string_110: .asciiz " XXXX X XX X XXXX " +string_111: .asciiz " XX X XX X XX X XX X XX " +string_112: .asciiz " XX X XX X XX " +string_113: .asciiz "XXX X X X X XXXX " +string_114: .asciiz "XXXXX X XXXXX X XXXX" +string_115: .asciiz " X X X X X X X" +string_116: .asciiz "X X X X X X X " +string_117: .asciiz " X X XXXXX X X " +string_118: .asciiz "XXXXX X X X X " +string_119: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" +string_120: .asciiz "X X X X X X X X" +string_121: .asciiz " X X X X X" +string_122: .asciiz "X X X X X " +string_123: .asciiz " X XX X X X " +string_124: .asciiz "X X X XX X " +string_125: .asciiz " X X X X X" +string_126: .asciiz "X X X X X " +string_127: .asciiz "X X X X X X X X X" +string_128: .asciiz "X X X X X" +string_129: .asciiz " X X X X X " +string_130: .asciiz " XX XXXX XXXX XX " +string_131: .asciiz "Would you like to continue with the next generation? \n" +string_132: .asciiz "Please use lowercase y or n for your answer [y]: " +string_133: .asciiz "\n" +string_134: .asciiz "n" +string_136: .asciiz "\n\n" +string_137: .asciiz "Would you like to choose a background pattern? \n" +string_138: .asciiz "Please use lowercase y or n for your answer [n]: " +string_139: .asciiz "y" +string_141: .asciiz "Welcome to the Game of Life.\n" +string_142: .asciiz "There are many initial states to choose from. \n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Board_INH: +.word IO_INH +CellularAutomaton_INH: +.word Board_INH +Main_INH: +.word CellularAutomaton_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Board_name: .asciiz "Board" +Board_VT: +.word Board_INH +.word Board.size_of_board +.word Board.board_init +CellularAutomaton_name: .asciiz "CellularAutomaton" +CellularAutomaton_VT: +.word CellularAutomaton_INH +.word CellularAutomaton.init +.word CellularAutomaton.print +.word CellularAutomaton.num_cells +.word CellularAutomaton.cell +.word CellularAutomaton.north +.word CellularAutomaton.south +.word CellularAutomaton.east +.word CellularAutomaton.west +.word CellularAutomaton.northwest +.word CellularAutomaton.northeast +.word CellularAutomaton.southeast +.word CellularAutomaton.southwest +.word CellularAutomaton.neighbors +.word CellularAutomaton.cell_at_next_evolution +.word CellularAutomaton.evolve +.word CellularAutomaton.option +.word CellularAutomaton.prompt +.word CellularAutomaton.prompt2 +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +Board.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Board.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Board_name +jr $ra +Board.size_of_board: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Board.board_init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 15 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 16 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_2 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 20 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_3 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 21 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 25 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_5 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 156($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 28 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_6 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 176($sp) +sw $t1, 4($sp) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 184($sp) +sw $t1, 8($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 192($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 192($sp) +sw $t1, 12($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 52($sp) +j _fi_6 +_if_6: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 204($sp) +sw $t1, 4($sp) +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 212($sp) +sw $t1, 8($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 220($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 220($sp) +sw $t1, 12($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_6: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 104($sp) +j _fi_5 +_if_5: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 232($sp) +sw $t1, 4($sp) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 240($sp) +sw $t1, 8($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 248($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 248($sp) +sw $t1, 12($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 132($sp) +_fi_5: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 156($sp) +j _fi_4 +_if_4: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 260($sp) +sw $t1, 4($sp) +#Assignment +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 268($sp) +sw $t1, 8($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 276($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 276($sp) +sw $t1, 12($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 184($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 208($sp) +j _fi_3 +_if_3: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 288($sp) +sw $t1, 4($sp) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 296($sp) +sw $t1, 8($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 304($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 304($sp) +sw $t1, 12($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 236($sp) +_fi_3: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 260($sp) +j _fi_2 +_if_2: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 316($sp) +sw $t1, 4($sp) +#Assignment +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 324($sp) +sw $t1, 8($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 332($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 332($sp) +sw $t1, 12($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 288($sp) +_fi_2: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 312($sp) +j _fi_1 +_if_1: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 344($sp) +sw $t1, 4($sp) +#Assignment +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 352($sp) +sw $t1, 8($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 360($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 360($sp) +sw $t1, 12($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 340($sp) +_fi_1: +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 368($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 348($sp) +addiu $sp, $sp, 8 +lw $t0, 368($sp) +sw $t0, 4444($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, CellularAutomaton_name +jr $ra +CellularAutomaton.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 9 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_7 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 10 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_8: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_8 +j _pool_8 +_body_8: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +#Dispatch in place +#obj 7 offset 24 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 27 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 120($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 128($sp) +sw $t1, -4($sp) +lw $t0, 4($sp) +sw $t0, 64($sp) +addiu $sp, $sp, 12 +addiu $sp, $sp, 8 +j _loop_8 +_pool_8: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 136($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_10 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 35 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 144($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 120($sp) +addiu $sp, $sp, 16 +lw $t0, 144($sp) +sw $t0, 5555($sp) +addiu $sp, $sp, 8 +lw $t0, 24($sp) +sw $t0, 3333($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.num_cells: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.cell: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_11 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 56($sp) +j _fi_11 +_if_11: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_12 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 60($sp) +_fi_11: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.north: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_13 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 19 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 64($sp) +j _fi_13 +_if_13: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_14 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 68($sp) +_fi_13: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.south: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 8($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_15 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 19 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 64($sp) +j _fi_15 +_if_15: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_16 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 68($sp) +_fi_15: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.east: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 24($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 68($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_17 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 28 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 100($sp) +j _fi_17 +_if_17: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_18 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 104($sp) +_fi_17: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.west: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_19 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 76($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_20 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 28 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 76($sp) +j _fi_20 +_if_20: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_21 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_20: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 108($sp) +j _fi_19 +_if_19: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_22 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 112($sp) +_fi_19: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.northwest: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_23 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_24 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 31 result CellularAutomaton.north +jal CellularAutomaton.north +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 76($sp) +j _fi_24 +_if_24: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_25 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_24: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 120($sp) +j _fi_23 +_if_23: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_26 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 124($sp) +_fi_23: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.northeast: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_27 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 24($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 68($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_28 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 37 result CellularAutomaton.north +jal CellularAutomaton.north +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 100($sp) +j _fi_28 +_if_28: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_29 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 104($sp) +_fi_28: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 144($sp) +j _fi_27 +_if_27: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_30 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 148($sp) +_fi_27: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.southeast: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 8($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_31 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 24($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 68($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_32 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 132($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 37 result CellularAutomaton.south +jal CellularAutomaton.south +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 100($sp) +j _fi_32 +_if_32: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_33 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 104($sp) +_fi_32: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 144($sp) +j _fi_31 +_if_31: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_34 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 148($sp) +_fi_31: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.southwest: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 8($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_35 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +sw $t0, 4($sp) +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_36 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +sw $t0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 7 offset 31 result CellularAutomaton.south +jal CellularAutomaton.south +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 76($sp) +j _fi_36 +_if_36: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_37 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_36: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 120($sp) +j _fi_35 +_if_35: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_38 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 124($sp) +_fi_35: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.neighbors: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 16 result CellularAutomaton.north +jal CellularAutomaton.north +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_39 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_40 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_40 +_if_40: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_40: +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 28 result CellularAutomaton.south +jal CellularAutomaton.south +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_41 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_42 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_42 +_if_42: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_42: +addiu $sp, $sp, 8 +lw $t0, 52($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 100($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 156($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 156($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 40 result CellularAutomaton.east +jal CellularAutomaton.east +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_43 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_44 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_44 +_if_44: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_44: +addiu $sp, $sp, 8 +lw $t0, 52($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 152($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 204($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 204($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 52 result CellularAutomaton.west +jal CellularAutomaton.west +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_45 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_46 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_46 +_if_46: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_46: +addiu $sp, $sp, 8 +lw $t0, 52($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 204($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 252($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 252($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 64 result CellularAutomaton.northeast +jal CellularAutomaton.northeast +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_47 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_48 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_48 +_if_48: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_48: +addiu $sp, $sp, 8 +lw $t0, 52($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 256($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 300($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 300($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 76 result CellularAutomaton.northwest +jal CellularAutomaton.northwest +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_49 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_50 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_50 +_if_50: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_50: +addiu $sp, $sp, 8 +lw $t0, 52($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 308($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 348($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 348($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 88 result CellularAutomaton.southeast +jal CellularAutomaton.southeast +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_51 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_52 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_52 +_if_52: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_52: +addiu $sp, $sp, 8 +lw $t0, 52($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 360($sp) +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 396($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 396($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 100 result CellularAutomaton.southwest +jal CellularAutomaton.southwest +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_53 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_54 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_54 +_if_54: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_54: +addiu $sp, $sp, 8 +lw $t0, 52($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 412($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 416($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.cell_at_next_evolution: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 8 result CellularAutomaton.neighbors +jal CellularAutomaton.neighbors +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_55 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 16 result CellularAutomaton.neighbors +jal CellularAutomaton.neighbors +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_56 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_57 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_56 +_if_56: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 26 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_58 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_59 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_60 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +j _fi_59 +_if_59: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_61 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_59: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 88($sp) +_fi_56: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 120($sp) +j _fi_55 +_if_55: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_62 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 124($sp) +_fi_55: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.evolve: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_63: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_63 +j _pool_63 +_body_63: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 72($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 21 result CellularAutomaton.cell_at_next_evolution +jal CellularAutomaton.cell_at_next_evolution +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 1 result String.concat +jal String.concat +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 88($sp) +sw $t1, -4($sp) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 108($sp) +sw $t1, -4($sp) +lw $t0, 4($sp) +sw $t0, 48($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_63 +_pool_63: +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 112($sp) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 120($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 88($sp) +addiu $sp, $sp, 12 +lw $t0, 120($sp) +sw $t0, 7777($sp) +addiu $sp, $sp, 8 +lw $t0, 32($sp) +sw $t0, 5555($sp) +addiu $sp, $sp, 8 +lw $t0, 24($sp) +sw $t0, 3333($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.option: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_64 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 9 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_65 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 12 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_66 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 15 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_67 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 18 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_68 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 21 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_69 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 24 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_70 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 27 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_71 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 30 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 128($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_72 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 33 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 140($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_73 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 36 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 152($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_74 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 39 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_75 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 42 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 176($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_76 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 45 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 188($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_77 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 48 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 200($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_78 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 51 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 212($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_79 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 54 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 224($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_80 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 57 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 236($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_81 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 60 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 248($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_82 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 63 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 260($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_83 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 66 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 272($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_84 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 69 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 284($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_85 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 72 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 296($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_86 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 75 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 308($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 77 result IO.in_int +jal IO.in_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 308($sp) +sw $t1, -4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 320($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_87 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 81 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 336($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_88 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 360($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_89 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 384($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_90 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 408($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_91 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 432($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_92 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 456($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_93 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 480($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_94 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 504($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_95 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 528($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_96 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 552($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_97 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 576($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 11 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_98 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 600($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 12 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_99 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 624($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 13 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_100 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 648($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 14 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_101 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 672($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 15 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_102 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 696($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 16 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_103 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 720($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 17 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_104 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 744($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 18 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_105 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 768($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 19 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_106 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 792($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 20 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_107 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 816($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 21 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_108 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_109 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_108 +_if_108: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_110 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_108: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 64($sp) +j _fi_107 +_if_107: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_111 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 68($sp) +_fi_107: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 96($sp) +j _fi_106 +_if_106: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_112 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 100($sp) +_fi_106: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 128($sp) +j _fi_105 +_if_105: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_113 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 132($sp) +_fi_105: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 160($sp) +j _fi_104 +_if_104: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_114 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 164($sp) +_fi_104: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 192($sp) +j _fi_103 +_if_103: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_115 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 196($sp) +_fi_103: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 224($sp) +j _fi_102 +_if_102: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_116 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 228($sp) +_fi_102: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 256($sp) +j _fi_101 +_if_101: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_117 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 260($sp) +_fi_101: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 288($sp) +j _fi_100 +_if_100: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_118 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 292($sp) +_fi_100: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 320($sp) +j _fi_99 +_if_99: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_119 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 324($sp) +_fi_99: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 352($sp) +j _fi_98 +_if_98: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_120 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 356($sp) +_fi_98: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 384($sp) +j _fi_97 +_if_97: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_121 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 388($sp) +_fi_97: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 416($sp) +j _fi_96 +_if_96: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_122 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 420($sp) +_fi_96: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 448($sp) +j _fi_95 +_if_95: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_123 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 452($sp) +_fi_95: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 480($sp) +j _fi_94 +_if_94: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_124 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 484($sp) +_fi_94: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 512($sp) +j _fi_93 +_if_93: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_125 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 516($sp) +_fi_93: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 544($sp) +j _fi_92 +_if_92: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_126 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 548($sp) +_fi_92: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 576($sp) +j _fi_91 +_if_91: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_127 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 580($sp) +_fi_91: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 608($sp) +j _fi_90 +_if_90: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_128 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 612($sp) +_fi_90: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 640($sp) +j _fi_89 +_if_89: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_129 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 644($sp) +_fi_89: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 672($sp) +j _fi_88 +_if_88: +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_130 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 676($sp) +_fi_88: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 984($sp) +addiu $sp, $sp, 104 +lw $t0, 1000($sp) +sw $t0, 4444($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.prompt: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_131 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 9 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_132 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 12 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 14 result IO.in_string +jal IO.in_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 56($sp) +sw $t1, -4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_133 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 18 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_134 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_135 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_135 +_if_135: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_135: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 92($sp) +addiu $sp, $sp, 20 +lw $t0, 108($sp) +sw $t0, 4444($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +CellularAutomaton.prompt2: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_136 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 8 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_137 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 11 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_138 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 14 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 16 result IO.in_string +jal IO.in_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $t0, 4($sp) +lw $t1, 64($sp) +sw $t1, -4($sp) +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_139 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_140 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_140 +_if_140: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_140: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 92($sp) +addiu $sp, $sp, 20 +lw $t0, 104($sp) +sw $t0, 3333($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_141 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 10 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_142 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 12 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_143: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 14 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +bnez $t0, _body_143 +j _pool_143 +_body_143: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 68($sp) +sw $t1, -4($sp) +#Assignment +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 19 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +lw $t1, 76($sp) +sw $t1, -4($sp) +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, CellularAutomaton_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result CellularAutomaton.Constructor +la $v0, 1 +jal CellularAutomaton.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 104($sp) +sw $t1, 4($sp) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_144: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 124($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +bnez $t0, _body_144 +j _pool_144 +_body_144: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 34 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +bnez $t0, _if_145 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 144($sp) +sw $t1, -4($sp) +lw $t0, 4($sp) +sw $t0, 20($sp) +j _fi_145 +_if_145: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 160($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 172($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 48($sp) +_fi_145: +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_144 +_pool_144: +lw $t0, 4($sp) +sw $t0, 116($sp) +addiu $sp, $sp, 20 +addiu $sp, $sp, 8 +j _loop_143 +_pool_143: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 180($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 152($sp) +addiu $sp, $sp, 16 +lw $t0, 180($sp) +sw $t0, 6666($sp) +addiu $sp, $sp, 8 +lw $t0, 28($sp) +sw $t0, 4444($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 12($sp) +addiu $sp, $sp, 4 +li $v0, 10 +syscall diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 59ff507f..6bb55f81 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -90,27 +90,29 @@ la $a0, buffer li $a1, 65536 li $v0, 8 syscall +sw $a1, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) jal String.length addiu $sp, $sp, 4 -move $a2, $v0 +move $a2, $sp addiu $a2, $a2, -1 move $a0, $v0 li $v0, 9 syscall move $v1, $v0 la $a0, buffer +li $a2, 0 _in_string.loop: beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) +lb $a1, 4($sp) +sb $a1, 4($sp) addiu $a0, $a0, 1 addiu $v1, $v1, 1 addiu $a2, $a2, -1 j _in_string.loop _in_string.end: -sb $zero, 0($v1) +sb $zero, 0($sp) move $ra, $a3 jr $ra @@ -145,14 +147,15 @@ syscall String.length: -lw $a0, -4($sp) +lw $a0, 4($sp) _stringlength.loop: -lb $a1, 0($a0) +lb $a1, 0($sp) beqz $a1, _stringlength.end addiu $a0, $a0, 1 j _stringlength.loop _stringlength.end: -lw $a1, -4($sp) +j Object.abort +lw $a1, 4($sp) subu $v0, $a0, $a1 jr $ra @@ -263,8 +266,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Object.type_name: sw $ra, 0($sp) @@ -278,8 +285,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Int.type_name: sw $ra, 0($sp) @@ -293,8 +304,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra IO.type_name: sw $ra, 0($sp) @@ -308,8 +323,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Bool.type_name: sw $ra, 0($sp) @@ -323,8 +342,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra String.type_name: sw $ra, 0($sp) @@ -368,8 +391,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra List.type_name: sw $ra, 0($sp) @@ -383,8 +410,12 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra List.head: sw $ra, 0($sp) @@ -417,8 +448,12 @@ lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra List.tail: sw $ra, 0($sp) @@ -452,8 +487,12 @@ lw $t0, 4($sp) sw $t0, 16($sp) addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra List.cons: sw $ra, 0($sp) @@ -500,14 +539,18 @@ addiu $sp, $sp, -4 lw $t0, 36($sp) sw $t0, 4($sp) #Dispatch in place -#obj 6 offset 3 result -1 +#obj 6 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Cons.Constructor: sw $ra, 0($sp) @@ -516,8 +559,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Cons.type_name: sw $ra, 0($sp) @@ -531,8 +578,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Cons.head: sw $ra, 0($sp) @@ -544,8 +595,12 @@ lw $t0, 12($sp) lw $t1, 4($t0) sw $t1, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Cons.tail: sw $ra, 0($sp) @@ -557,8 +612,12 @@ lw $t0, 12($sp) lw $t1, 8($t0) sw $t1, 4($sp) lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Cons.init: sw $ra, 0($sp) @@ -575,27 +634,31 @@ lw $t0, 20($sp) sw $t0, 4($sp) lw $t0, 4($sp) lw $t1, 24($sp) -sw $t1, 4($t0) +sw $t1, 4($sp) #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) +lw $t0, 24($sp) sw $t0, 4($sp) lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 8($t0) +lw $t1, 32($sp) +sw $t1, 8($sp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) +lw $t0, 40($sp) sw $t0, 4($sp) lw $t0, 4($sp) -sw $t0, 16($sp) +sw $t0, 24($sp) addiu $sp, $sp, 12 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.Constructor: sw $ra, 0($sp) @@ -604,8 +667,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.type_name: sw $ra, 0($sp) @@ -654,7 +721,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) +lw $t0, 40($sp) sw $t0, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 @@ -663,7 +730,7 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 3 offset 10 result IO.out_int +#obj 4 offset 12 result IO.out_int jal IO.out_int sw $a1, 0($sp) addi $sp, $sp, -4 @@ -681,7 +748,7 @@ la $a0, string_2 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 12 result IO.out_string +#obj 2 offset 14 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -699,7 +766,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) +lw $t0, 64($sp) sw $t0, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 @@ -708,16 +775,16 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 #Dispatch in place -#obj 3 offset 15 result Main.print_list +#obj 4 offset 18 result Main.print_list jal Main.print_list sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 36($sp) +sw $t0, 44($sp) addiu $sp, $sp, 12 lw $t0, 4($sp) -sw $t0, 48($sp) +sw $t0, 60($sp) j _fi_1 _if_1: #Self-Dispatch @@ -733,18 +800,22 @@ la $a0, string_3 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 17 result IO.out_string +#obj 2 offset 20 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 56($sp) +sw $t0, 68($sp) _fi_1: addiu $sp, $sp, 8 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.main: sw $ra, 0($sp) @@ -809,7 +880,7 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 5 offset 2 result -1 +#obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -820,7 +891,7 @@ li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 7 offset 2 result -1 +#obj 8 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -831,7 +902,7 @@ li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 9 offset 2 result -1 +#obj 10 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -842,7 +913,7 @@ li $a0, 4 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 11 offset 2 result -1 +#obj 13 offset 2 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -853,14 +924,14 @@ li $a0, 5 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 13 offset 2 result -1 +#obj 15 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -lw $t1, 64($sp) -sw $t1, 4($t0) +lw $t1, 76($sp) +sw $t1, 4($sp) #loop li $a0, 0 sw $a0, ($sp) @@ -878,7 +949,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 80($sp) +lw $t0, 92($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Dispatch in place @@ -890,7 +961,7 @@ addiu $sp, $sp, 4 lw $t0, 4($sp) li $t1, 1 sub $t0, $t1, $t0 -sw $t0, 12($sp) +sw $t0, 16($sp) lw $t0, 4($sp) bnez $t0, _body_4 j _pool_4 @@ -907,11 +978,11 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) +lw $t0, 108($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Dispatch in place -#obj 2 offset 23 result Main.print_list +#obj 2 offset 27 result Main.print_list jal Main.print_list sw $a1, 0($sp) addi $sp, $sp, -4 @@ -925,7 +996,7 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 100($sp) +lw $t0, 116($sp) lw $t1, 4($t0) sw $t1, 4($sp) #Dispatch in place @@ -935,20 +1006,16 @@ sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 lw $t0, 4($sp) -lw $t1, 100($sp) -sw $t1, 4($t0) +lw $t1, 120($sp) +sw $t1, 4($sp) lw $t0, 4($sp) -sw $t0, 20($sp) +sw $t0, 24($sp) addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_4 _pool_4: lw $t0, 4($sp) -sw $t0, 92($sp) +sw $t0, 112($sp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra li $v0, 10 syscall diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips new file mode 100644 index 00000000..78c503e4 --- /dev/null +++ b/tests/codegen/new_complex.mips @@ -0,0 +1,1175 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_2: .asciiz "=(\n" +string_3: .asciiz "=)\n" +string_5: .asciiz "=(\n" +string_6: .asciiz "=)\n" +string_8: .asciiz "+" +string_9: .asciiz "I" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Complex_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main +Complex_name: .asciiz "Complex" +Complex_VT: +.word Complex_INH +.word Complex.init +.word Complex.print +.word Complex.reflect_0 +.word Complex.reflect_X +.word Complex.reflect_Y +.word Complex.equal +.word Complex.x_value +.word Complex.y_value + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 16($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 15 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 40($sp) +j _fi_1 +_if_1: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 18 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 52($sp) +_fi_1: +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 96($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 108($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 8 offset 4 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_5 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 30 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 44($sp) +j _fi_4 +_if_4: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 33 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 56($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 120($sp) +addiu $sp, $sp, 8 +lw $t0, 132($sp) +sw $t0, 3333($sp) +addiu $sp, $sp, 8 +Complex.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Complex_name +jr $ra +Complex.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 48($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 48($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.print: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_7 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 14 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_8 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 1 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 8 offset 2 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 10 offset 1 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 68($sp) +j _fi_7 +_if_7: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 84($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 22 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_7: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.reflect_0: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 56($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.reflect_X: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.reflect_Y: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.equal: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_10 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_10 +_if_10: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 60($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +lw $t1, 8($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_11 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 32($sp) +j _fi_11 +_if_11: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 40($sp) +_fi_11: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 80($sp) +_fi_10: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.x_value: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Complex.y_value: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +li $v0, 10 +syscall diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips new file mode 100644 index 00000000..f2041a45 --- /dev/null +++ b/tests/codegen/palindrome.mips @@ -0,0 +1,772 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_4: .asciiz "enter a string\n" +string_6: .asciiz "that was not a palindrome\n" +string_7: .asciiz "that was a palindrome\n" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.pal +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.pal: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_2 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 80($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#Args: 0 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 9 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +lw $t0, 44($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 64($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_3 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 72($sp) +j _fi_3 +_if_3: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 152($sp) +sw $t0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 168($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +sub $t0, $t0, $t1 +sw $t0, 20($sp) +addiu $sp, $sp, 8 +#Dispatch in place +#obj 9 offset 1 result String.substr +jal String.substr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +#Dispatch in place +#obj 11 offset 47 result Main.pal +jal Main.pal +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 120($sp) +_fi_3: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 148($sp) +j _fi_2 +_if_2: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 152($sp) +_fi_2: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 184($sp) +j _fi_1 +_if_1: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 188($sp) +_fi_1: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Unary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +not $t0, $t0 +sw $t0, 8($sp) +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, 4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_4 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 8 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 11 result IO.in_string +jal IO.in_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 2 offset 11 result Main.pal +jal Main.pal +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_5 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 14 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +j _fi_5 +_if_5: +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_7 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 17 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 36($sp) +_fi_5: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 64($sp) +addiu $sp, $sp, 12 +li $v0, 10 +syscall diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips new file mode 100644 index 00000000..c4bc6d67 --- /dev/null +++ b/tests/codegen/primes.mips @@ -0,0 +1,847 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "2 is trivially prime.\n" +string_7: .asciiz " is prime.\n" +string_9: .asciiz "continue" +string_10: .asciiz "halt" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 24 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, 8($sp) +#Integer +li $a0, 500 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 40($sp) +sw $t1, 16($sp) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_2: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +bnez $t0, _body_2 +j _pool_2 +_body_2: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 68($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 80($sp) +sw $t1, 8($sp) +#Assignment +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 84($sp) +sw $t1, 12($sp) +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_3: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 112($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 116($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 8($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 144($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 152($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 160($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 164($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +div $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 8($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 8($sp) +sub $t0, $t0, $t1 +sw $t0, 40($sp) +addiu $sp, $sp, 8 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 8($sp) +lw $t1, 4($sp) +seq $t0, $t0, $t1 +sw $t0, 52($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_5 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 64($sp) +j _fi_5 +_if_5: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 72($sp) +_fi_5: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 112($sp) +j _fi_4 +_if_4: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 116($sp) +_fi_4: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_3 +j _pool_3 +_body_3: +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 220($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 232($sp) +sw $t1, 12($sp) +addiu $sp, $sp, 8 +j _loop_3 +_pool_3: +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 244($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 252($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 256($sp) +lw $t1, 12($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +mult $t0, $t1 +mflo $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 8($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 28($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_6 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 40($sp) +j _fi_6 +_if_6: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 284($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 284($sp) +sw $t1, 4($sp) +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 296($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 74 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_7 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 76 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 28($sp) +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 76($sp) +_fi_6: +addiu $sp, $sp, 8 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 320($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 324($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_8 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 28($sp) +j _fi_8 +_if_8: +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_10 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 1 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 44($sp) +_fi_8: +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 296($sp) +addiu $sp, $sp, 20 +addiu $sp, $sp, 8 +j _loop_2 +_pool_2: +lw $t0, 4($sp) +lw $t1, 352($sp) +sw $t1, 20($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 10 +syscall diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 7d075dec..d82a92a6 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -70,27 +70,29 @@ la $a0, buffer li $a1, 65536 li $v0, 8 syscall +sw $a1, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) jal String.length addiu $sp, $sp, 4 -move $a2, $v0 +move $a2, $sp addiu $a2, $a2, -1 move $a0, $v0 li $v0, 9 syscall move $v1, $v0 la $a0, buffer +li $a2, 0 _in_string.loop: beqz $a2, _in_string.end -lb $a1, 0($a0) -sb $a1, 0($v1) +lb $a1, 4($sp) +sb $a1, 4($sp) addiu $a0, $a0, 1 addiu $v1, $v1, 1 addiu $a2, $a2, -1 j _in_string.loop _in_string.end: -sb $zero, 0($v1) +sb $zero, 0($sp) move $ra, $a3 jr $ra @@ -125,14 +127,15 @@ syscall String.length: -lw $a0, -4($sp) +lw $a0, 4($sp) _stringlength.loop: -lb $a1, 0($a0) +lb $a1, 0($sp) beqz $a1, _stringlength.end addiu $a0, $a0, 1 j _stringlength.loop _stringlength.end: -lw $a1, -4($sp) +j Object.abort +lw $a1, 4($sp) subu $v0, $a0, $a1 jr $ra @@ -243,8 +246,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Object.type_name: sw $ra, 0($sp) @@ -258,8 +265,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Int.type_name: sw $ra, 0($sp) @@ -273,8 +284,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra IO.type_name: sw $ra, 0($sp) @@ -288,8 +303,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Bool.type_name: sw $ra, 0($sp) @@ -303,8 +322,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra String.type_name: sw $ra, 0($sp) @@ -348,8 +371,12 @@ li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 jr $ra Main.type_name: sw $ra, 0($sp) @@ -424,13 +451,13 @@ li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 7 offset 3 result String.substr +#obj 8 offset 3 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place -#obj 8 offset 12 result IO.out_string +#obj 9 offset 13 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -463,13 +490,13 @@ li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 #Dispatch in place -#obj 4 offset 3 result String.substr +#obj 5 offset 3 result String.substr jal String.substr sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 #Dispatch in place -#obj 13 offset 5 result IO.out_string +#obj 15 offset 1 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 @@ -487,17 +514,13 @@ la $a0, string_1 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place -#obj 2 offset 18 result IO.out_string +#obj 2 offset 21 result IO.out_string jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 lw $t0, 4($sp) -sw $t0, 64($sp) +sw $t0, 76($sp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -addiu $sp, $sp, -4 -addiu $sp, $sp, -4 -jr $ra li $v0, 10 syscall diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips new file mode 100644 index 00000000..52c468aa --- /dev/null +++ b/tests/codegen/sort-list.mips @@ -0,0 +1,1729 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_2: .asciiz "\n" +string_4: .asciiz "How many numbers to sort? " +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +List_INH: +.word IO_INH +Cons_INH: +.word List_INH +Nil_INH: +.word List_INH +Main_INH: +.word IO_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +List_name: .asciiz "List" +List_VT: +.word List_INH +.word List.isNil +.word List.cons +.word List.car +.word List.cdr +.word List.rev +.word List.sort +.word List.insert +.word List.rcons +.word List.print_list +Cons_name: .asciiz "Cons" +Cons_VT: +.word Cons_INH +.word Cons.isNil +.word Cons.init +.word Cons.car +.word Cons.cdr +.word Cons.rev +.word Cons.sort +.word Cons.insert +.word Cons.rcons +.word Cons.print_list +Nil_name: .asciiz "Nil" +Nil_VT: +.word Nil_INH +.word Nil.isNil +.word Nil.rev +.word Nil.sort +.word Nil.insert +.word Nil.rcons +.word Nil.print_list +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.iota +.word Main.main + +.globl main +.text +IO.out_string: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +jr $ra + + +IO.out_int: +li $v0, 1 +lw $a0, -4($sp) +syscall +jr $ra + + +IO.in_string: +move $a3, $ra +la $a0, buffer +li $a1, 65536 +li $v0, 8 +syscall +sw $a1, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +jal String.length +addiu $sp, $sp, 4 +move $a2, $sp +addiu $a2, $a2, -1 +move $a0, $v0 +li $v0, 9 +syscall +move $v1, $v0 +la $a0, buffer +li $a2, 0 +_in_string.loop: +beqz $a2, _in_string.end +lb $a1, 4($sp) +sb $a1, 4($sp) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _in_string.loop +_in_string.end: +sb $zero, 0($sp) +move $ra, $a3 +jr $ra + + +IO.in_int: +li $v0, 5 +syscall +jr $ra +Object.copy: +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +jr $ra + + +Object.abort: +li $v0, 10 +syscall + + +String.length: +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +lw $a0, -12($sp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +li $v0, 1 +_stringcmp.loop: +lb $a2, 0($a0) +lb $a3, 0($a1) +beqz $a2, _stringcmp.end +beq $a2, $zero, _stringcmp.end +beq $a3, $zero, _stringcmp.end +bne $a2, $a3, _stringcmp.differents +addiu $a0, $a0, 1 +addiu $a1, $a1, 1 +j _stringcmp.loop +_stringcmp.end: +beq $a2, $a3, _stringcmp.equals +_stringcmp.differents: +li $v0, 0 +jr $ra +_stringcmp.equals: +li $v0, 1 +jr $ra +inherit: +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +jr $ra + +Object.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Object.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Int.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +IO.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Bool.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +String.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a1, 0($sp) +addi $sp, $sp, -4 +j Object.abort +#--------------End Initial Code--------------- +List.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +List.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, List_name +jr $ra +List.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +sw $t0, 16($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +List.cons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +lw $t0, 28($sp) +sw $t0, 4444($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +List.car: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 360000 +syscall +sw $v0, 4($sp) +la $a1, Int_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Int.Constructor +la $v0, 1 +jal Int.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +List.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, List_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result List.Constructor +la $v0, 1 +jal List.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +List.rev: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 4 result List.cdr +jal List.cdr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +List.sort: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 4 result List.cdr +jal List.cdr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +List.insert: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result List.cdr +jal List.cdr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +List.rcons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result List.cdr +jal List.cdr +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +List.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 16($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 2 offset 4 result Object.abort +jal Object.abort +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 0 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Cons_name +jr $ra +Cons.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.init: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 24($sp) +sw $t1, 4($sp) +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 32($sp) +sw $t1, 8($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +sw $t0, 24($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.car: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.cdr: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.rev: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.sort: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.insert: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _if_1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 56($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 64($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Dispatch in place +#obj 9 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 64($sp) +j _fi_1 +_if_1: +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 100($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 6 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +lw $t0, 4($sp) +sw $t0, 92($sp) +_fi_1: +addiu $sp, $sp, 8 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.rcons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Args: 1 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 40($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Dispatch in place +#obj 9 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Cons.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 24($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 6 result IO.out_int +jal IO.out_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 32($sp) +sw $t0, 4($sp) +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 9 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, 8($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 40($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Nil_name +jr $ra +Nil.isNil: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.rev: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +sw $t0, 4($sp) +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.sort: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 12($sp) +sw $t0, 4($sp) +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.insert: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push self +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 20($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 3 offset 6 result Nil.rcons +jal Nil.rcons +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.rcons: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 28($sp) +sw $t0, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 36($sp) +sw $t0, 4($sp) +#Dispatch in place +#obj 6 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Nil.print_list: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.Constructor: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.type_name: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.iota: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, Nil_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Nil.Constructor +la $v0, 1 +jal Nil.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 28($sp) +sw $t1, 4($sp) +#Let +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#loop +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +_loop_3: +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 52($sp) +sw $t0, 4($sp) +lw $t0, 4($sp) +lw $t1, 4($sp) +li $t3, 1 +add $t0, $t0, $t3 +sge $t0, $t1, $t0 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +bnez $t0, _body_3 +j _pool_3 +_body_3: +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Assignment +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 12 +syscall +sw $v0, 4($sp) +la $a1, Cons_VT +sw $a1, ($v0) +lw $t0, 4($sp) +sw $t0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Cons.Constructor +la $v0, 1 +jal Cons.Constructor +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Args: 0 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 88($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Args: 1 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 92($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +#Dispatch in place +#obj 6 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 12 +lw $t0, 4($sp) +lw $t1, 96($sp) +sw $t1, 4($sp) +#Assignment +#Binary +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 104($sp) +lw $t1, -4($t0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 4($sp) +lw $t1, 4($sp) +add $t0, $t0, $t1 +sw $t0, 12($sp) +addiu $sp, $sp, 8 +lw $t0, 4($sp) +lw $t1, 116($sp) +sw $t1, -4($sp) +lw $t0, 4($sp) +sw $t0, 52($sp) +addiu $sp, $sp, 8 +addiu $sp, $sp, 8 +j _loop_3 +_pool_3: +lw $t0, 108($sp) +sw $t0, 9999($sp) +addiu $sp, $sp, 8 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $t0, 44($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +lw $t0, 4($sp) +sw $t0, 32($sp) +addiu $sp, $sp, 12 +lw $v0, 4($sp) +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addi $sp, $sp, -4 +jr $ra +Main.main: +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#loading label +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +la $a0, string_4 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 2 offset 5 result IO.out_string +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Point-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#push object +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 0 +#Self-Dispatch +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 1 offset 10 result IO.in_int +jal IO.in_int +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 2 offset 10 result Main.iota +jal Main.iota +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 8 +#Dispatch in place +#obj 3 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +#Dispatch in place +#obj 6 offset 1 result -1 +jal IO.out_string +sw $a1, 0($sp) +addi $sp, $sp, -4 +addiu $sp, $sp, 4 +lw $t0, 4($sp) +sw $t0, 36($sp) +addiu $sp, $sp, 8 +li $v0, 10 +syscall From 8f101e6abaacb84adfdcfc5fd3312b02d7a6f635 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Mon, 30 Nov 2020 17:22:10 -0500 Subject: [PATCH 105/140] report ok --- doc/Readme.md | 2 ++ doc/report/report.pdf | Bin 121559 -> 122882 bytes doc/report/report.tex | 19 +++++++++++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/doc/Readme.md b/doc/Readme.md index 44226852..94a496de 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -8,6 +8,8 @@ Oscar Luis Hernandez Solano | C411 | [@oschdez97](https://github.com/oschdez97) Harold Rosales Hernandez | C411 | [@hros18](https://github.com/hros18) Carlos Rafael Ortega Lezcano | C411 | [@CRafa97](https://github.com/CRafa97) +> El informe escrito del compilador se encuentra en la carpeta `report` de este directorio + ## Uso del Compilador Para instalar todas las dependencias del compilador ejecute desde el directorio raiz del proyecto diff --git a/doc/report/report.pdf b/doc/report/report.pdf index 72e81d82321f04708a8c361d148d7295f839a936..d92bcf960e1b3e77ad4e472317f96740087add70 100644 GIT binary patch delta 71510 zcmV(%K;pmGwFiR02aqKKGd7cvC@6oeT3?Ukwhe#Jr`Sgiu&cBF+eJ|z4X!PU01fW8 zeaYoPYx{PcdhChq32yJxhZH4`<@3&Nfj-%iD4L`w@<-16_5Qnee>3@wP|OyV-`sz` z;l?siiW_4Krb~5mU*G(keP~X@I5&qoQSz(~&mV^4sqI|Vev(G^hhOgh3A}&w4d<-X zS|Bf-GgaD~JIPrg1hM*8AQWrDl1ZS;iDIhUxW`QZRiPu*k9&M9llek%Zl_%~Im@k# zME}?qr&K0VG-H2|HgkR5eBD*DVBD%m{c(?NiX4iHK4pgaEZD-$VyF1PelUAfE|FFlmV9Ksk z?uK0frD3_?uc~`t^x4bTbi2$HEAujvzV5hiLmu5rQc3x$=PrhAzE&^!NTHb!#m$`% ztQ3;S|302i1Kr8Ha5WX@xE-#ZWLg8gESR+=(Q|gV<9VKE|K5{C=J0=oMc8SGmww+w z1uGWX*Uyb2Mm=2aH@J%t1_^UG7of{;_)Q7%BIh?6gqH?F&=I!&YB(sZo@m4XVp{t`$6$6 z91UE-i}*aquB2vC7O8*mWAod&9h+m*&l8)!%-7Y|ykt3eL&Db|A{RX&jk!$jbZw=$UCog}P0MR^o^J`O`XFOGz zbAPJ%Tss4f(HUf(2OD|H>9VP(CmPpp#s#jjQ!~437UFmVR4NX8H;vVGt);TeK-Nh1 zJqJ;?+FWtRTr&k%G+|Q>L&v74SIn+7<7y-Lc+go>wGZAg79$Sv2)1XSO3f@}WIBU> z9$oDyo^<{xvbujImWz+ZVB=rb*Dk+$?F3vqOtQ%rS=H_9xX3BAWCi4(WLpq1c*l6K z3f&FF%ii}Sb>(7Q{OugjP(RSp-1Luu!DsX+X3%R4JpbJh$KqMY`=4zb)}>hQ4Yh67Y0xqO8%?rZ9g#PtKpb-_+6EHaPml)7V1% zJ-I+rN8)Oe1NOaEK;$bo8XjHSv(xh{S}G0mrQXpJl$l62Z+$qqv8~@?W}5>NE<+l6 zo}Y%E!kB!)xl}YbdE3INWmnqMBfK2*IfH7$A^`J zAS7Ml&26G9wz=6mh=v2QGJsfskZH*Yw}^L-*a@MW z;{PA;gmyI>Yvh1B%MiEUd*>=r_yc2qt>Ia>zqfz>$`{rrI-Hxm zRS4Bnb42=nZax1}d;aivZ2D$&tE{3z_|;j3b9MVT_@Hh>P)AkgK;ckZM`2C{3;^rL zVWNNaC->0BFsK*4hH|c7 zqquBw=ArFfPoofIfRb`h0nuQjC5poU^TtD&4G{7Jqx!;VRn?=3Y@Xd8K(7F_fu@Tu z7gd+jDpGhV4fwDOmz$DhAu~8~iGh!d>W_b3XER_>?<6AXSA-k`&mWsFKyOVJh=0PA zG}78LZR-5-z_@Ow8QhD8BKyxl0~DUxc^CshixA&Ca2<)BNSfMP5P4jUd8J?lK%zvs zkF%Sbw*mWP-|b>KyYUIFSy7l67w6z!6-OcX49O`>X2{-B^(u6Hga1;>c~_y6#=9&xIx0x?P#On-h?ts- zi~y8e0FytOM>y4yyjX^_Mhr4~@t05qQ$uwgF|!9S^Bj527!tzv@PVzCa=AI-quBQH z&4z%JrgP-xE#D@4FKTWISqU|@Ef#+z&mIY5VW}|KzU*gQm9S4G`=M}n7Z3B@b$1io zGHYbA9re&U9wOet=q)PoCm5akAS1;4q{+8m=K$^!xlKMcp8M+(N^1eNn`9IDCVckj z`sUXlLbsSJ)(|jQC<(8I8icD&1mc*UEiv~9wdvcDQeE9lb;y7N-Gh(k7dMCWIGlWX8hT2qb}0&`69BFjL;VyJ<_79$s9q$Z zE~_G>oMKf)PS5GP)47Wg4zW)tGkoC3)BMsN11utS*&ay2x(LcDkc0uUj%aA(0&N@IwDYDD4{%0cQaa;0Qc=O!?0T33rjEd@}`}-+zC+rx$-MCDgqX zLCF;{*{1ZQ&*SKhj>zlCkOT!6Q_6(CpI=9eiZ>UDI+qZ~0X@9|rkC`RP#6le(#z!3 z^c${*V$KY>V6ywvJzwvka7{m^B)e`AQx&1lNNp65z()oMq7-chzl~C99Hc<)F+-wZ9YRmCW zl_ms~dp5N3y41V9H%u`GS7STJ^;nerFbv%iql3T4-zxSCWuur8MfzFfaz!_OY2HCa zTx>Rf%60C#M@WxBHb5<|ni~j6S_AT|q6RUwc+ddP3+!B_Qy+g!HpoxpP{{I_@EafL zLh0)sATV%9)h?j%Jo6P$D4W4!I&9^FjQp0Cqn*m7dDqZF7y1xwe`!>0%52Jx$mCj& zQ34#+DwX;}1ERcCsoGVWr{p@_dAn+dz?ZAD3yqPkxd=nbe%mnH0bd+am@=^kIi0`) zz8-Z;8>?SKUm1TxO2DpENG?4uH{mJMI{_rz*#>kTA*+lb$iJh*gv_jxg?L@-h-M@D zR6+e%_pIUN<~s30fDOe4T!u#KF1j?DmHCns;ge8{KeA)Jb68qH_*yda;#3|nL|n1* z&!w-+(`Ii}>(c8?tIx}C%2Aqa?B=;)7K(lhs6}qpKM8*+j zXJ1qj5kAc()ZmJbuK41CWKZw(^9XWV0+Ao}#DxM85k~&&;EOZpATKy2Bv+wB-Gic_ z2{Ckl84S;U{6NnKKz4PQ^KNQ_g-z@{L(unW-xFLaixvIPiPs1S*9aUF0r*x*nM2Uj zCZ+m?_<4VC4&V4z^4K~y++zhqpyNfrYx&1WxTYJ+Ty@T*um+e4crMvY?z#^G{7>!c z%35mW3rMNqjvpV|$FuW!8ZkAkQXs;&(@;|{2nYQ@Kg7Vk&%UA6#zqaUPAxsD?g*P? zO!g}HVtuY+DS(r18mgA!yB}Wmyx>fbow$nXdRsWJw5oxGOH0r67#?Cj0S1%_;DxG^qYD=T zI9z|Svv1p-z-}&KGH)i=7g+*k!a9DmbB=;1N=#Hd z2~pp@zyIzJM|Vsx3T19&b98cLVQmU!Ze)`n3`T!RkDN#rzSpnFW2RJviG=`so3`9i zw^}2QT$)R})xtoPu}DY*>2dY1pSJ}NSyYyl2V!5|`n?zV?MCfl_^Dm4qAXUsR3}lM z=ezQF^XFgju7bYbcX4F$Z1+DJdE8l@Q9a(ZyN@^jx%uV(=FP7z+2v90wA{Jx% za9Mu`U!(Kg{c-o_{(XD6Gg-F(*T;J%(97zrXp_y7exy zg*GN~dAJ2E{qMe#SudSUr*Win8_v8v+*xJ!1#f*ShN&62T*(pZaq^|(ss5)p_9It| zxxe__)@3d8T511U55;g$+5X%4lSz`|7EgZ%v;}I1v`VumO&uSn?#jNK2Hr&H$-eak zq>mKwWc)4LVkpYylX0fI#YVTU+hu$>{4^Z$eg6oH7u@i~pL56G`o~mvqfCNhd_8y5 z#S*JSd^;1lx0vr-q_yD-mHjXrVD0hLcU28L866YlR1TCHxlsQ&@t~&f>hTr_Wzv5O zqsw#A)-rPJWeK>0$>9b@@B5)CxRKU}QSbV`<0gy4}Uq5|F)=Zw9xSh@u;^YIGDMo9`L^R+vwYlI5+pE9{fPRA%XL#z_SY?h=W^_#)QExj<6J-XXe11YJQb7T4jB^y zLYtx5VWl2OdRXvzsTO#se!!Cs4=4eQlQ$1Fe^%QZvY;&{&BEK9iivc9%pfcj+x>Tt zoe5}rmEDQTqCB?YVz)2RFH?~-V%5A)05+gT!pV<~Zy9U6?Z6ebJy0mxN3c`V(bp>( z&78=P6Jp21{tGg%dRnQ&S%z~tork%f{H-H_OwHzn60LU$Xn&mXeVz_FA*&3e8*3>r zlj{#22!1eXUx3m6+>;RyB>_W|HxMO%0Kv%GG|BJNpvX(*$uIKImqq1gf|#7UVth#k zEm+sodZ+*jA1m+Gu;`lz#*}BGIMx|u(Fi}Xm7Zdx9!=!L78EP|F5I8x5}W-n5&*F3 zDU|;xd>=797*Aj>n0fAA5=f&W3yM#-^9l?s)*>Ei|KVx+LI42T$X`=mc}7o@+7KCk zPuJ~-Nz(`<@nSi=r2z;+z!nbp1q^+0M9F0Z04AS*G;LFe<=-F%RM0kMF82nGuIEr2 zx}K4y6AJ*1O}B{mVnm!}6>;7QxkYUqfj?}yR7PkbH-|&O?TB^z-Vh61!en=L1(Uey zmtCyUc!d#Op25)?C5HDM0AGNh+ayeH326rhVNcHxANWM5v{$w6q8 zTpSYN8JJd5{VWwffGwX)s@thSrel@x8w^16-gh$QxHL5%{}2Cz9K3h40oGp98! z1-WrQPZyIqn4W|ae(Sn=_?hh}D7@SbMBgNC{|DJsxUWbX7QHV(IoY;tHaAg!>cqd2 z%>bK9DzZ43qT}Z4gjAV{bQUgn|8#mSI*b7XfM5mF5Nl;h^v_zfmsP=Mz{|;L7^7qN z?DG5t#`DMpfGEx9^VCcAiN_xi@J(XCq4`)>O#y1~y6V8OB5!i4`l0FSzl(|Yc;%uh z%_AGkzp6eNV5H1$?RTuf8dtA>P}Rjzmb+j&#bg9l(wSf@?2`(@Nrl8%dXmtZ(Nj9x zF({tMNzkkZgxuj05(z?SthYddby?(+bPm4Rm2_8vCbSB%31d6J1_c6xHxr5(L~k#+ z4jo6@ zyZ%~m8RU>)2oyQ%un-!H(DDDrf3`Zg)9Mt2516w5;aTL2=lVLD-fy@(3C@!U=x__n^?^E_8;f<{}Sn!v7^21$ib!fJ`fUv?iee*wp4 z&}!o(a=Dwu6tr>wftdrwu$6B~_8*W9kbjQxEF)I@o~7=C25UHfdWEL01^^G}rspcg z?Sr4}Z^kobp_&&oUQ>Yo33O5#bKYi)vj$uTT+N5ro#Z(Q*8>aMnZhe)fYm3T;4yjy z#RA3^Cx(kVs`)-J%rA^94A-q|z@=iOf9lmj`mJ|DaW zB}?*`1MS;T@PS|k_BIwkLY}OH6_Pt<#Y*70CZBnqFy-kZ3$C3-&O<}V6NLS^KC;#? zG%HQL6@nOLBM3virF@2X1N(-96__ndXF7=Vwx?WC3g|PSSSDMHoH6VHD1C8xrWXi1_FXvajM4iQVNv>`bPt&@1!GmgWxtli3of> zF^SQe&GKN+ww_)|Ab{6)U~_{>g>3GhJ@_DVw2f8oDbS98uDr#GEed$fp1&kHT)YG$ zoBWJ{aT>-B9yY$~TTJF|rp1wCGt06Vd`?C$t+VfV%lV!6qVLI)p+i;jE)et<`Dyl# zMd&;(lF8&jy@Qznr}efwkp*oi`BsF$yHXoQ8Da*1RCa;Ov_{Y9ydjwQF+)oZo$@(s z3Cc#=IW|dN%3x4m*>~L2fDE_X*7e8FbW@)vlKfCYFEm`@v2H)YJj!Qt^Fq!nc`0mG=hmtnt-t68cmcOQ+r+1q>JmL7GOP8QPIPHOrnU0FHs7Nw)Vho@w!Z8qb0)(-xWx} zD&}i+h$Lwge_CJnX&h~zGksphdX*h`(TjIeT6gRbE+C^`x=5nH3u$q&{G?0vGL~TRippPoJ)WJW+x!22 zb`(_&0HP}VBpK?POx4%G{@l3GRLyv9BEvvE6lFN2~mt2g~D9Ht7m1jy>;eQ4Azd`iug z|IZD%ReFY05<&-yN z=d|8(aU^<1j#_HB)LxH&eE7Jxl7?Eccm0ImAfJ{qAbf@ zwSV>dAL*`!vR`+pP^I1d8EWo#I-um1h&?;l?M^&feE#os@sM zC{nx2p;MKWyASp5_vFJ(nI?}1|MP>d{_Br7e|-2AnwdqjRD@n}HnPY?UaGl=J@oL? z&1@@5$Q&Ff5=r0Tn2Y{t{$jmncC%ahj8^RpYc*2gr>I@gl8_ANEG{Ohqp+eV za#{>_s+5K<27H0W-w&aWq3Jt6P~jsLwLO22%^|*iJ$Wv4EWznP(+-xSbO8g5Fds){ z{um}s15mp-fu_TTZfx$Fwy9lBQYd|H6?rbQOwlTMLRncPjvg&P-9vxm*Pwqt6b;RN z7gSf;&2n+hX}X;zHX8gMH>w+(Dvsnk?zj1Nqa`#NTrAn>5M{8so{UZBOB>xT%P5f- zw5sOwGuBzgMp+?bp066+UK&JY!erU1e(T3;qi8F#wA_pWi-P^^#;{QQQb|7^-M}TT zCWQ@DmB2`JHCy3v1sA4%Afa`n8U3iKP!$UbTwdK>zxf$n5dPae7*$=H7mSCqm^6zkd1c zJv`+tpNcLTGCdE+X735XGPbqK4}@Ov45{RA??2oWn$A9MTxvE;&0*IygJo!B%Venf zgQwR=dc>0XNLq9=qwg9zXz*Ec6FO<|g4@rp4wcw2Zr+j%&QE`seM%jnl2LpLI>1@@ z>IAN?aqI43$K!~hhm9AA>oP`IHpo-ZT$%jxmYyCI4fX~{xCNNBIO0R=IepJTrS9|g_lASu5l~JNHRwxx0ru~gRHDpmtN|Lh z2wXBZqELEgvQ*eiF8EuKylLsV52kQxd;H8N4mALYsT+T?9IWQ(;fE-g4r5Q>1It0_ zC-jT%f+N=8xQ(&vc|ntIK-e7nqc}WXUYP;EqQQf$dhp$IY{{hH!*k0nAJ>wD=S7>5 zCOP<#CEtLD!svrQbd||_WTfcbv8?ui!3GpWi3t{iCHo$LzmK)(iMEN)1JI(L@V(|L zL>Zwyf;oQ=9J@O7)utn41iUDzH>=VmY_Bx5s&E=C`ksyqv_m6@!%s+5;8bwO=;Ogv z{@C&dflk<5M{j%A5$f7J=?I9ZgWw^Wk+l#SwavaEJ_%p0y$5I;sHG2QZ9E;_w1y`; zqpboCm&H@QKeYaf+hT3&Z)C>a^GImQc**Ay-j;voGGO?g3l2SFuK(hp`yTB-PXqBI zfaeB)J|F!luAUjps`HTilXxQnhf->$MqMV^*(%z^H#>nHja zMM(QdLg1Dq18BF6{*L`%%g^XnnKfp!10qMxu&*ZDt)nAlr?hCgnoLWw$*qR3%H8?6 zKx==t3p7@wW(umnkSdyV9=RkM5a3_B^^MbAO!>6XbjF?(Ozz7U{)ztH>TAnmP zqK=Sg?8LJ#Mr|4btJ28HRr^o0wF}N*q5-q!dh2vip zR1d&8eNSD-gaJmWm^2{i<1~H*l5%TGX(6m;pXPAGY7U(F(Vft(uqT^(Atd#{!?st*0WY! z$@}os$AkbOvj4Ey7<++)Nea258d#cNcSi9#(>QL^#$Y1CeDJR9DhYGvFer8e932jq zKbt{NHUnl^PHvmY@y2Yf^YO{;EJUjfo@sv6KE4f+?z_z>&Hbr~eosfOk^^j33YW50+|d%!mfirW6soA zPN&0@P@%c=EN2+7q$7Tx)6H^=%L)QnV~UA!P;)b>DkoK8VoDj!+hl*uS@T6X7l)m) zsN5<}`+4hBrUbIEnTx31=$`SCaS_T|A+26Fd|b}J#5{)8FPQQ(Y*EP!JOERx7p+K| zOz13Iw-h1ybQwnqD@-~|LoK+1x`K>yNk6r&H`MqgQ3 z3LVK9o)jH8e=zy@WNu_P8SilP_;gHGZ>NZPkt_n~Q`k6rxVaBL#4+f$OPz=B$Frm& zEXd}5pc0YgmS`qd62nH5$#*SQ6&hF{gEWh<+CRqM9c%q z2Mit-UBmztiUQr~R>BtVGjX!N+c|4|7>D{fe)34mA_IX?A&9O3v)^=fjbutdy_ zJcD`}`0p%I!MEWWw3sJ=?|}mp>j~iZVqjHh+8LDlu>tjuvAJh)pjY8-@IdqGSRN8Q z_!1l=zL4L)KywP99EDy_UHsV}>uXs@1L1eMZim2CngxIUWLq0oxyWrELx2S;E7pxt z@dzrF@zro#j#6g~8KsVDxBOW*1Y2{qVd^~tJlgli*f0(mTMny6*?PFqFGf=roL>gM zRVt=&Yx}f@A;e5*XUM4N^^yE;8#%?q;^TKX8t}4J#ISM9{5`9JPtIZjlO|^2D#`j} zSyBqaNV|WsUro4(cl?~w0STX!*G9|aE!}!3{!ar|oII}Pw2xli(=GaBuY={=L18cq ztob4yC47C$3JVi@HlZcK6{cA+--Icx7G6wg9q)KT0S!Sum^xRu8$Vq*TL6>creify z(}6`aS4a)g0STvT)$-DPzLFMV>&>Fx-F@-ZD5`({TDYPL6LM)UAI?gE_Tubt?yf(M z*Aj4A6uNl%c-nv~$;`UJFYiQu8b6WmxR#5uq6B*N;sGZk0eYbeJq_4&FB(r4NVAG{ z^NZtI1jh2oc(_2|QkO@|ltnu6;=wY^e@c07ao5KxmB=tR@Y2ClnhJ0h>jv+G4h5dJ z@!@}pZQ_MB1S~Hfu%N4;a{~gisN7ZKR3b0`j{zs+JTu^My2A|4%Z&5I#uAMaGoJCr zFRpNZIR7V}#Xs4kuxM(_))(`#HWex@)(vQ3{(I#Q&!o1OV`j#}f!FIULK;KHG=^NJ zG2%^j&3_nJq|R1LeVU7ag!qD7X`a|(L62iO%V;Ox4IS$q@j3&_%{1~hTk`tyJD zE3L>=wNBZ^B>l!1CdgyMmA{|lU`9|tfCfNYqhFs|v2e&4U-EcBqnGNguI;M=e}83m5&X<9H(?f;U25Yn z&+}b*c=hXV(XN8AA9qpc@@)4f%{=V9&FDSawYzt({{8BkyH|hvK8bh6gn1m>-QE4p zx_>M*-tH2h8u{H_wfi-2;mubjilX3`o8Rt!gcWwP0v9--NppuAlLh_0tq;X0vp4kP zG>l-q%)YxsFbR{?=#2L+Hf7h8{X#7d^TZ}N6OL%&?JXop7ADs1?hdf{yYA*Io25ZL zP6f7-V64lsdG8XZBcG0aR}D9DP#<6mnt#)BBMpl2SeKK&RdvhbWq&v}ZBg|D50t0J z8yg1&zcq&=Fkg35vDzpJ?oYLhcT-LKjRmxjsoj|%lQ;>ZlsTyCeN*+YGB>mVJboui z&>$+mpPHcof_cz)+*a*xFY2Z}lWPR` z1D&&KI%`EWv2|aJHMd&nnI&jRf`8amHSeRymZx?qDp_`tRdrYP9mrBO*)SaP;S)Sq0tVV{s$fd`q`{6uor_Gz>sZo>h%H3x7U*5pOIa^Q8Y3=^Eai$O*2ky&wfNo;Z!d%zN3B{9Xwn zhgIH_))_Q>lzW^9hq`JC7KO(xr&>&*>58i0Ue+@@D^NK06$b)*X}SsoJMasuEi53# z@yOO#7djD`(}}=QJ-2|j+iUt1XCXKx=A`~um#3-d$Vdzwgsz8&<6MBVf zocK6QUB;XgaDnI>M-~B{51!+RpL{3JD5e3TX`F6}{`1Wb|9ZhFOcH{d+Ab?GCgQGg zfqEuw&|yF$VC3s(j(_B=3oRPln)VmqDbZDqU%X%}DMY&DZ1LlByJcDE&lh|Ff@!*k z7xwZl0+l+uJCt{tp(A3RTYi=WSq+Iux-1I@DMn|QBz6$cvsjdsWe6cPB5S}WxzU2# ziXkF$0T_6}S5GJHRQ14ii7w&LS29!yHO4SNowydNjADrVRDUakX=Ni))zqUOL^uA+ ze1xiyWoV=*>qbsqu#1U80>o=xZ4@TXp7EN=>EOvRa^#m$I`^lsEVxO5&1S%M-*jbD zL1bB#H%Q5=2w`WD~Zyr)9gNaA@$@qB#%c0w|{T~@7xnw~KVfFw#K zVjr3s(F1Xn3xCLj#_KQPIOa9Kv~&?!FwMT6In4tBkXb%^*;Kr&5Cq1-nUae_5ye^X zwm-;{TIL-4v4PBiU#7Yv07`2YOmf)+dB7gAl}J={O(ikKAbbLM7qPcKXy;h$$+N-0 z*l-u&3wYiaEh942kcam!wH*)0O_2M{AUEjYwkugA3xCA*o7v4#Z&|be*p|)7+zj4X zTY!(BrIVcTl-V#(o#p|2^96)iu_SnVe_C%BdSdK1{~5=pEw5L ztZ}9{K^i14WSQ_>ZUdL$CDPQU{2;59JK1oyHFw4(#B(pU28Zy`I%DCaDo=vwmS4M` zpX_y#0Dlq}I4&t+9<$a%uf|>Ktm>tcdzj~xd4`cW=JRx9wvg@F55eMr;>YlWWX(NO zbCi?KsUWn`h%V%J9&+F;kpz#=Y=ZB8{+=7%oSp3%UWy9^v`dbn)U>QV%l8&>Z_~R2 z>TnAuY{|}`X9njNvpLBA!xVxDr*lrzIs1Q1=YL*Kx)@V*t6VEug}|?D1hXxi*<_$% zu@)ENH~_&A*H+^PUd%nF_1vqs^tSKY3&9mMHdln<;?TtL&KnG};x)git|`Fyqz8&;TwLiGOH{Sa3%q?8ih~fZMBV7H)HBxS9?<|0N}~)Ul7^{I)P3+) zlz-7qR#?fDyonF1cG2kbVAIhtx@5ygqM%j|`-pi}wXXrgR|^`91)= z9@xJ}EH)Rh`@wfi!|PAnrqe`T(|l;Hy?+nB3piKOMcaI)Oo9oGnCXv9znDqYN_$E0Hq_oRNm0k6auuc7DWcL4Wp>WFgB1v;uDVP=mqsR|W4p_;|^i&y0FwMO*vy zvwccDJjn1L;3B4e*v{=iqcopZqGXHwK4-XSrC6e3M+I+>{AioQvFT?YFncpCO#NM1UDU!n3wk}eg;mL-Gjs=ya*oNqqj5S;EIqzT{BoEeacYhc`h;2Rf-DTvu zEKafz7H${cN(v?53=dWomE=Ugs0-@P{34dPitBr2CJ`sKq(F%R?PLwKV>0`*ddqxk z08FeA%t%*#Uk{CLk#RbeiJ!<6Xkc?b5Y`k@6MS29KbA5WxbQ+DL@3E2O46S7*E&`X zn#U5#{*r{$Tr!7&et*NubMi6gmk{Ul9ZJHQeuHakD(vzH3QGGVVLXlJd0q`nu=8Qp ztNG6SA#WsZx2p=EY>KKGHs2W4C1XAKRBGvN_3aUijRX{4@COm*V_|G1b$r_citP8r zCRph9|ELE>QWu@X3}h_ii;;&*!aUQjQZJ)rq>FVyv&jzlE`Qc|fuoD$-H=(2OZJQ( zd1>vw80I?>{mq{^FPlKBtXQ-k7%5N9bgI^gn^#Q~K+&$0Zke;emrGjcMe>`p@OHaY zJ&qRz!nODT1K`I)F%x+%VAv3__?91q5#OAewz~LfXniFyX5fHYHzaPag>P$o7%4C% z?3GFynC9E`*MCX<6$d!|#TFIqQm!E4v){MPLjh>6k%4s}*UBvRlc8`Ek^QK%g&g_o zp_R$Y!Dbc6o^TSG&?_o^^2H0Hn+PdAmv5?unktsZCVSN^7?D6Lovc=%Uh?hb zt4Ycv!+^R^i&I$AFEHA=8w>qQ17%p6p!G-I3qc+@@>WP4hvrakwiU>Fjhi$Hogx%c zH&4|)`kp4QW53tj*Gsj*=Ty`h_PxASGP+F(p+jqR3_(2?h*xBAFSqP9^~b)&i+JEP z#*5B*F@FZ11>e5;`|Wm9x=Bs=(sK?Ih(-#hHU-ZtLFZj@Y4M1v(%3p=n#fDFTbx2KAsz`MFhgn7yh-ZfEXsVB|{6HL=AevH!F^->aOw!=WL#lsxPOYfTD~d7U`M4J9E(w}$8*91ooI8Z zBRmCft&pB|l3wt(uAm>|vM^P|00&y6g}WzG%D@JdGH{zzKO{ltc#=_oD$V{h>EuU# ztTUEXcYCU_%!5tN=#bKUGw{NkYI~5@%6DAj2K>HJ7(;iFxV09@$DemF!1#>*AOMEa z2!F(Z>EeEQP-(1A=gAMKYfaozbWa4vJsbA{d&b~H*34+wfBT^>|0jDb>}PY-&*|S8YXafs+ed6-z{S}v!6Le- zhsPPOzPo$%Kf3gQSCh&%CIm4uG%%BqC@6nzR!eW(HW0q=uh3BfY?cp^D;*o7EfOS1 zo9xXt3Pz%BwvwobQfueecgUf%k1qDG>& zBh6aSeaI*gb(Q@aE&HtGRov68%f9aZ*u6XKe)?6(j4@J6$+N>##ODb0T?9uFVj2tPd{YC>rZPNTIM%%lre<&Aw1N({v{2H`WDg zRTZ#B)!paMA91Bo@jh+6!TpQ<;ZT3_O?%xYk0!b4v`0Z}9w_C54L6ughDMDWX7f6u z@C{|Yaih6G(f1{R8QqlJ#%Q6C^<{XnCKCQ*c;^LmdOSeY@hcAc0pd{ zPY`xzXFU~l9>WLQ=SdH(IWaOFD#mEl81Di&2|(SqsgQXxo85LB3ObG37dL+;NsKy3 zbYrGu)af2z`ZcKkMO7+NmlZ}8+|)FGT81r`&`XGGv@zeHj<8yi5fv^A=PZRh>(92zmBswU!{Z$DH~OfgF`MAfW`WV>I+z zQF&;(7~(~E9R5p=;Wdly)_iPe8r?NZhm9Xx59?iNKkHF%6oh#hbZ39P^{cBMhQ&6H zT#gx|itJ07DGEib>Ju7KEPswPmpDX)9_&!jY#f#3DDL(5#SS{uUcrQU)W-CKb_NJ8 zop(J>vPP4)g3COuu_$US0Z3vRn`QDSfN)%L+1VcEd>u6C9DdBKilg4GELN(fc%8Br;? z#CG9+Z)Y4hl?v~GwOdRbuVs8sKsTGgngJ(5<^UF`v3W_`W(l<7&=RL52vY-s3};LM zP@j(A;HY)*!2~EFFhh7VLW!aftz=B{N>=isXz*gueWF2p2v!bHRJd_V{~#m_FHF+E zol^aY-38$w7;t~*;k-O@X(EFTC5w0G?pllaJbh(WU2l4q*oNl+6oTiWUpmO5zd2{; zi(rBCB~Q%UK^s9CLlM`vDzTDx-E#J&G@G!QpdHsIIg<7|5;|R~mmzU9#O3FJ>6`(N zulG6qZLTiA&+zmVkKtUBYu{|F;zYpb9+(p)C4QKFx%OY_wui>vKHbcdnaluit~{By ztdc~q5`1z}GKDAZ*<*1lVNeb)3EUmLzqtAm+y#u_5hb7W0MA28&d;5BO)L91BqWrl zWbi2ogm+s4a1p+n!X+~3cE22U{{d?d_8^ntQxmglIAvu6I5jYnkT?_tGchwWIFrE{ zCx2|ZV{m5O)-D{|cJA1=ZQITrb!?|&+v?axC+XO>ZQJSid-mSveNXLEU#&kwv*tCf zIaaMTYYYk!Ne6pZbuULC3j+%yGcQ0*QeB;enVA{D%*X~uK_TW0G;y_duopLR1@Z#4 zfaU--pd)~V6~M~O%mPON5OZ+!a<;a#a(@L-o6-E+2+*`OF}Jp}b_QrV*gCjdn^^() z-QC@V-Cf)mo!tZ(|5>C41Oi;GfB*|?TOdG8Nm)lmQ3^mUrKkar0@?$eO>6GoZZ-kOpAk;0&<+j{-1rus65<7bX|Re*>_02Rgg{1I)tN!49Axp)Mk+q<^Rm zkPu^17Xz5sn*-#f|5caa^G|%MX!2g)Ffd4rg1)#aLo85nw1OMUVpHnq=u($R4KRf=D%D?wx zlGj#M)sUw9-y-<8Tf*MV!Q9&35}@Y#51%H^=KpK>w_Dl7`ac!)KUn^!qJID^|5sNq zado!#1n4m{{;Nco|MmQjWbl8ZL`5AueHd7oxd9ApoXh|gHZFDmHygL#f5A0#b9M&W zyZ)Q>e{%UB{olm|1bPC^;MSHM%=kiV(p$nR{3VKJD;aA$+{wbtDsC3H_#BPuG*Sg%2 ztGv^Ou+KQp#@MPB8h z7Gk zV+w%KJySD%qeR;am$Ixczj82{Ph?e{_%^R;pI@uE6gHtdWk3sh;uP^%#L()EC$|0g z?yKu%QUq2AqIY@rLdESeDaep+u1uV{dHfZ^R%vXeaNGsIg;^$t4VM=^qqa3Cofx2f!P}3KJl*vBa z>>yX1Gby1YiJ1hOf?~)H892LZfs}A;-d6fO;6=!_HH&Q&yp-#Di9W=!BLwmpRSK@;=6~+*yp^H8S zmf|9lcqCg&M3vftoGr>c1qc0^i0oOvs)_%8%T4JNq*SS3{ize4pMVG15ej92CMDY} z8;ALZKJzwTVe5VYA54hX7tbrk*or)QpH3ed`^gIpmt-#j(e} zeF4ms}D?=053q$zZ?@IS-J7! zU+tWb7F9p|X;x=B2w19Qt8)S7BYn6#a8R|5q($tz&E+K}9ASI#Aqa-StNUC5*ieHGDuB#hggE?|b-qfi{e(%+pVSe~hO5uNQ(wyCq=V^tdyY3G z8hfh%K$(pvpeABZg0VvQwE4(iSrtl>BPlx$VRo6i2O^U&m(b0#TzzPR3YBkReAs=) zS|+C3zNsyp)Y5~9KW9+b&-n_d)xM0>N`^KLdwDELY zdU}lokzc0--)Bt9vM);WGk!n*4$X0i#1sj#wSOVEl!S-lAD7qk+%ph`it59VRk)UU z&r#lyxG$ZBQI!_~E6rUORuM zFYEwMWigRhWWx1Mp{xPlaVZ#wTy%YrcfUaT?e0^Jut_Pdldq+$;=6Y31<&~z3!E!E zxK6-#L%G+8mpk4T7e5NHX1+hxUY8HATJ=dooaX>TYrTK`v8Hc>Zodh0a2PY(n#vz07;&4Q;@eFT4Fv0g_x&OSqseXXuG(S~J53wPhKe1N;t zleR@x)6)9FU(}Bg&v<`)6 zA3){5$vr*P7IA415^$sXOAb+F^QpjZzf57U*_UQ}zXJ*zNL;!ltbYoL6zFx+`B_oY zrGWh+(pDQRlt-gAEpDA0zSU`kUx-;%pa2usNOqCkvI{GBp_bw}VrEED(eCP; zr2kwQFYOL8VKDtn@ER!#_i2_|_rswifdJFxX{$V;K%9%b@QP+}urN$7>u%_YX?H z(H3VVKRYUnPBig|(bQw8&0O8Njl1D za4YEY8fRVQkwb9sx(a{jcvy@Hi>zA}poncuC-(iQo~Kn-m=f+TLpFAqR&6%F`#!R{ zrv!IE&+$g#iQ4Mk0mvrqEeczCtdy#laAU*z>Dd=Q@t_r1uh{Z+$apn&;wGMxx6BrX zKDl)gdE`T32T;MuRd-VC+|-IE__-Rpvy4||Ee&TH;5toViGF`xN0oKDbdkMbMJ@5b zt52|1jL!*+Zr0&tDIltuM>4IL?fLeTwy;Wa01PC~B{QDneSrJX(GJ*I_+9zgYKe>_ z{$CgdP8sYBQwn(dP!e1p6U+$wkUK=95cuh@_#q9HJF{&y}bdDyy3N5uN(N0zp`R8Y;z94*~AD>OPYzUc6(X1>uqg0#zs2bWXV$||~|cRcC- zc%T_C4C~|}v;(0;w7MBIES&?1@WBYVPuh{tmGKxDD!NSqW4vZ{Qt?%s3%2=Zz4=W*=lFkiaW+H%nMRFLkOjjagxjP*u^vjc zF<;>%k1>HiH@+r5;XSmZ{;jN>2p@y?(Ud9aO_hhem?yUHT$%rCv^64W?GD=%S zy`}XmGD57`_psp132Ush5MZk*^$qq_U+4{31+klj%Yrr@3rMGYd+r_1=a6y*vj9g_ z^wNKL2wcbfxr7NZ$B-c+E&A8Nky(BuM|^B}H_Z>~GH>ojlbsunElQj5E&L!p{^=I{ zjbZ#EWlZ0j;CEg-$tE;s`v?pQPuLUkICYN`j%cZfi2VB>N~1=#jF5s>$`PgASK?pB z7lDI@zr(dBg55)ySR}@wYyd+3Gs1sU z_1b;>b6J#g>3QOVLoQvD6~$6IS{_N)NDe8L)E%!sbpy&ZoOCgeiL@kbgR@7&6DvR%l9z^B|R)+YD;4c>)u zgAtIb726k@Y)fW_f8U`Vu4D@3i7@pSMcUF*OmKJO3<9q;n^PhEQ*E1bXv+6J+L%$(%;|_l%H54IY zoz=*CTy@D|H}3KA`wR6&39$b>Y_BgDQ$^@J7jXG5|7(T2N~+BfM{!R%PO2o{CpD2jsll z{UqxrJIM(DP%E(++!KBX8-?pt4k;s`>o}cVwQCNDXLRu7n6Ns;=E4O4Zz9}~9<|`I+0QZ11L^XuoocV2l z_H#^d`de(--fXSzh9(sHndH&Lv-b&QB}lElAeMu#Y?>eOC1P%}*-Gg;plh_4x`&y|o_b81$>_?1&OU(F zpvN>R4&Q##^{%CTb(!e#DC4s51@GOc0_#${0#n-`_Xh(64s6P9&*~ig+00)RFWE!56dT zs%HP((Y}nYcQt?QFBZ7FNyy#xwNG<61`o>;(FC1+e=TM0x5c__Lz9{0muSM>yjZY< z;d2{cn@rkRzseKABW}DBu!l%L>Ll}z3tzT;Mx6B6xgLE>C<==@0et~BoA+- zh}xlOmrJ}5+t<;?Ov9U6qnrg_nlbVgS6^9!2lw`@?&}Fhj$&vpQMPEs7E_n{MhZ7lT4B&tTPz0UO6_q$|VetN5&2&Fyp&BB{s`_o# zJBP=)LkaV-1rc#VA9&E5UzO-A_0y=Eh}g)FxC?*IxIsx83ph2*B*TfzPUeAm7yvC^abiThU$>iVrEmKzy|PTdk(E!>a4R&cM;fXIHDG_B?dTs zDNcWxX{~_>2*jUC>4o6Uq5XW!&mF_X>*z|` z(duZ-CC#!CILLuqYR$ORxu;^ot(-wLU86>qon019w>7;|2CoF?P^oY2Q-!NpC3MD+7`CMpj)je2z^pL{#4}gt#G1Dq7(es%#G?!P_ z3D92Jb@NzJ_xE|xNGG^R0bk=DR!c~MZp7D}E9{i##FwXYOtpgCUDDE2I&JhcNmX^Y zNKykF?tpJUS?!GSh2yfivj~N^ZgGDK_!K{XwU!gG<`rgcr8Hr-8$~O~T3%+AN7{;m z%E9*ebbtU~gfxmtdY>j4fp$XoD!PyfbuZ4)A}4h;UH$FrGl5Z7XV-EtwSULfZ=`dQBM zV}(Vr69E>PRjFiumdt++!={G<7F&jR&aS12K>HH>@Zt&4BsVc@!oDv<#mWKZ4#0s1 zS@%U$g=?7Nhtpz)omk*5?#2qP)FFdMCsyaG)ju~t+Y%Vk1YVEiHLrgGM?^{@&EREF zlr$YLSGd=r3#j}_P&DuX)pn|o{8@sAbQT2~_x|H>eQR3YK0~RC+NYK1K%8V_DlV}w zkJ1Xnp|1*qy&G9BDvKTzM@9YT!3#%ywZ!XxHNMsNfS{-^S5NX$3{%>@g z5Jh$b4*p(<;2Ou@`I3JXzgUi3%NW*A>SY=RS%&h!q~OAE`8k+mE{r1tR@rCMBL+Y{1Y?f z2?>!UaD9FG79148cI8cUxFP)`xsN>4Y(V;)DKEh$=(g3XbFqOe+M&=wj4 z2GRVYG|MGMJhOkq6}%c?)ZTWtMr3r#Y5Ucp-sxzDic4f6%n}a48pO1kYk=t!L;zjz z4LAD)uR;OSM-WpOnYnyeNZg*#)3NLSeTjKT$Djo@z zGjD*Q?_!BGt(caGQa72?LCaj+suoq`cw+#old9q4OpJd&5>MApKDTQ_3pqRXAm1Y> zYAg7qLG;bm*OuwMirZ^sacRkua*jb;6ux1;!cn86yh#n!11+fRG|&WB;fO8lO?Vy> zFIJM8!Gy@pWCz_E?!&>LPqTGXHxw!G6;+n6r_f4I{e5M~{sL+8$kvgZ0h1chvrVK;;4yjK^bYyRR z<}^W}CYsCs^c@K{OucV(@eg4E~F1=NSjJ!1Z zJ}iGi$xdyYUOG%TSv^>lSf0DO?aoJsxk;kwRgkwQrGX_O3RKF9aOAK=wMLiof-K|I zl7 zUlJnno{H98t}otX}F2hGfbvbz;;8O}9q z9qc?9e^I5*Yg*imzgEzGqqqk$#(agGVF;hy$KbfuVoww^D^l-PapFFkSCgP{sKiaAxi5$8CO0 zp@sDU6Zmt3zm06DGk(utrmWQJC(N$a4zu+ujsAeBv$@&k`O>-1R$N23a{H@DK+6^+ zNv*Z{h^O~~0{Nm6CmAC!#f#aQ@{`tzbU-+%q!c zjqW}}I8F!Y!vzVuH+DQdtOK5ur2&0UdRjTnnN8fkdUKL*4-dS9P3%Q}j)-aocmrEU z7#Lojt{NYwb#0r(tZOLY3#9c!7(7h_U!#ieyWgq7Ll=LIT5Ljz@ zV$W`P3Me%qdhGa501XZqu{CB(^kc}f4TjFpWxRF0k&1ci$0=hBUpsmt^!el6!H(3t z60P{o=9Gp)6B1W(j-poaFy?~vgQOTJU57LE-Id=2jxiw3fOeD*#6YH<{JJi*CKx!Q zCE$N0%@nbXWR34VdD<$R?E(5IO}OtFVq!7_app2oWM=k<MNzJGEmuNUtCS z?COvy>hOF71mz~pc6f9Tbg%>{H-iK{2_hp&cVl_?qxtOKSeB1z%H!WLgOOn`H-Uc` zEo9~qpI+TPWnZ@>Y5dYPk#4`P`L+j<%5l%=;(oomaZIKF0W+D$Cx#;d&QYF{2@~ZP z2;*#B0XrI;3-lDZ&%+dkE%YCeNpq(l%8N!+Z2YJn56!r?T5W+#vyya3Ck=mML>T#g&FamZvBZnzo=`LZN!C7=Xm<1VU%#Zk zewMm60lkb|sN#g92@>q#*$62dUV(hm4WFKTvxF!z(7d|sC19O8^tLWJ39;pY==T-q zYQXB1wa$ zH2YJRO9-G_%ZZEMdORHXSXhtePc8ZmnP$Il)!65 zn|T}QVTb0h3aDqOH2`dUC+2MAq5p)U7e?Kq_Q%hPI5-7~uCL~- z@hY#duF8EO^#JVxXrDJRB+i&I|cB zrWgC<6qSEJFS@PS`9^tGnI*&UTr8eJj~b`k*2<>lQ?9gR)y#W>eC93tds-%}Tcaef zo*+k(vY27j6s`t#&*YQm>)GfzbJhFVu2)|?H}>E-y&BMwM;s0}2<*Diw4k2|l_CHd zIWtu3+m0$a<8k6&Hg`mH)?as8EAUgI<+R}b28n-%cugEM=A>c(X+vVi>4FBP_<1Vx z)AdkWxEy;Jo+JJuTVnb$^vRIuK-^QrpuwP@uT@$tw!AfzzQkREDxxnDnvEYBltm*F zGSxqf)Kg`R>T}6KVitQ8bX?xDgrUm~cuIq2#@5|u(+!!@QWwec5DZ%0Z zC4_$xC7PBAD&4huL~Vgi=tNqX8v=IeGQ2hV7Jr5mq!wNodlH1k+uL(B+{pxYNnJ;@ zv$B%#lXjR(yaIdbAyper{!(KY46v02ytiTim6+}Xf1;qKhRwu?T5X`mbrpR!@;$t1gRJDHnp3Oh97z zG;__2zY}dF+506psgJp&8)(8$=bGW;d9cmX%L-*Qk3H%qhU*7-RD@4o(6ymY1jO;o zaWNB&5IYPQ%&n2DpfWS)M$m2&ho^rXPkSAUUNyH3kQ5Ggy!R5*$|TFGy9~racRUT` zP3l#+;4wt#p&S8XSQ#Nhp1E=Dj#dv{|Np1q%Bqi#Vq?(}E3F6Y;=)5$4%M55`R_JW zA<{A1rpEmzIwS_(t(?r=s_Vv<7P+n1Z#1YhXak7*6Ud0d;ijhCaFl!x_}zaM{V(7i zlr>*U75(2`3055sNu)xdi4_`j?cU-XYJIHOyJrrA&Y1@cWd!bP*a>v5uoOZo+7>0G z$4z$Sq&rDzktN~it(NF>9!(S$(9wcDKG6Vt03|^c$DRZZtnYdj3z?a;btZ-NS?vy1 z?a>1PGe1(VMckcoL48EolC_nGyB`II<`rSjH0d8pKg56|rs)A_%U& zk?xK5yAe3bX2{!l=s^NIi{EZFVTnV$0Ypvl9DIYTjCW^&KUuH z5L3xHDzCvh*os!90gDLVrxul<5D#Rk#YBJ?l>8CTq%eFBlq_IMeei$nmj`JKk4w^m zp~UyBvx7MF_o_#|xR=O~V>77Y|k$f2t zRtz@h{ z+&g95#vGFzGxW)|!zq8=aU_J>b!QjDiH9N8d3qElMW*4hVn_itJfswtDru>myIyra zTXYH+PW5-4I0_p+;pImz#aPVi?%$9L!sM6!CbE-9M>S|%1(Fr?wO4=58V%r+G~7}1C4Ww#$XxS_bb_HF-c@=7Yvhc|rJVUpRPGk9xWb!O z$9SqtYpDNZyR*vfoo%SUA-E^|1$wL``~{^$+QFJqTj}wupCHkr#Git zK8Gk?|9PT2(lX=6SlP+fqakNo#`>@woyoZ)_aS1v2aiP=PJc)EU<3T?Mm)EBb3d!3 zL2maZCg4H)qD3p({FssQRMd!MRoB9&+tFuqmuM_skho5uMDpv?0D~=UxX@N4K{nzzNMU?PcRrSkDTC{RGR8KeoFfuJkBjqZ$UalFCEP|su(p- zk3Svv4uuR{=2X>CrSpmK+1}*NvFZHyQ1FisP!fN;j%Acz2BiuZ4rGBD_s|+@LO!Z$ zA2c-!G<2ytn0v-8SGfQXp&|V25PiH}Cp?Ye-ks{^QthzFJQ({UvPP%&M6c|fL}P5&{tMabJM3;sPsLD9{BH*MMThd1TcPqqYlC-95AU!s=i zwXY;9@-TV+Pz_HLeI)RQvqYA1a35-Cv+P`tbooU?J$z4%PV48h5o@wOHg;Rdxn|*l zsDFMg)WtW4qHD7s2~qbdKB59J76t!;!PbB9{pv>pC??nElztkDt}RUHS-@iD@)7cp zzw0p}^rL}>VD;G2bgDFut!a84)bT4zZheaN%^voZey`N#lpGVNDGTtk|CSN(=YZzh z5{sg257;dY!_<%0jbx8b2^%7*AME0GuRcgg_C3a>D1xbY5I^RGu3b;MBW4ZMjE1$&doV6w5^jY|;t_u&{bKz!t|FJ9ltYJn_qT zM5&rP3K4MhLLRTe%waL**`$9MDOVU``STksRXyzVuVrD^@95wWY}UEA;{XKiz#w)% zvJmpf8ZpvOboeFOZuvVtA6ZL_g4(eYH=C$1J)pB^(m*^620A&Jyff9(a(qL?si>u zFDN4Q!66PwhTxMs8$?sdLR!$M)N&l9hItija?8s5xE zsuFg1u&UaW(rINolVYZkWHD#07@`e(NI_(iL#&$wPXW6Zc7xJN52)1SM^CP2k;uBR z7ZdAZwY%|)nZS>Eg|&Z%E7eS;OW@EPYA4k}+~4q+{`?%Fod_e!3%=pK`H)}xIT(MK z5!M?TDYnHiM?KSpAm)I^P?+b%^|}MHRuwUw0*jP|oVkE$0gLl=6hrVRzKd10kV)XjyEd;O?cxAz0hwe=T4(%!{;6Uj?1(1ivyV}QyOc#J z&>f5Xkip=>ZKy&#l1Cxhg6{^_onplD}5juI5k z^Upp^v^|rslPwe!Ok==B7$MfO-`j%JJm1e{K?Y~#(rcXgJ+Zzue(4`Zl2N5;6i}MM zz7g$t&r8#jA=kVaeYaxH&Zh$Eu;{K7AJy5Ph0q<2I7x{AVOpfHRbHhSx%0kL*1ENVYnsX+ zJ!!`H6?<2Qr@!>;p^y7Bu`tJ=wR8T@O3Ks?(LrMfR)(`njcPW2y1j}d$(A*W9i%XB zX#&(|z+8XOOd8}-pkOqQCQ}lvC(?u3g@BRzB8Y87!xtJml(^QZeacYEVxrySd=$PH zljx6)_oiDenNVT8A5J;@YKoF}NzyS>#R@HOoso~z!iM9$_tV7oAO!l*1P!tL0DSaDRjk5+E5{1oyL#W zRc{&QT74fms!&q?uqTJonw}Q)+zz@kyOX7;7wk>=hH3MURqzMqY69=Wu{wLixa1~xnqf(HYA7x{=buv3l4c8m^5nmc{eb^&a5 zlaqmE&mb~QE>4c^E!5Js)-zrT0P(Z7Iac9g`Pp6Z^68PEse64456|HPOfU$mXJJG} z7agOP`bSP~5daHq(-}Kow+;tHa4D3~YKnh^8{FFb${;%ep}IS?OHyoBom7J@cKeGPDrQub$i5ovkMC1oj*Bk;93lwG9&ip%V375^2AbtFjy zb@XwgpNWp`J>?rC=Uk7e!MwX|P#P++scl8IsGzf;4CZjw&HnHz{eyk)BUe+zX;3rrQ1h^i4wsNRyp*5@%v5rFZ;meS7(;ti#R!_Dsk;MOPQ@^WS}P8a(wiDL7Kn9t zA$mua*JS`*La1lfNwUJGD>>&E&_C{-nh*KRIM~=+AA?TG2uITvG_-zXPuvKG_+kT^ zT>*Ea&6Q{OWC?;rTl>Sbzbbw7t7REQomIF|3k=W&#j43En35?)ETlS-bUc5myM%SP ztdY_=+M}fJhbj)!ZegwxF>R!RM38FWEqrDh$zTfqXt1znT~*l-Sf9e+wfPNYRe?b~ zRR7*zB4(PeAr1Dwl_>l@BAaKD;4De(YG3`Wen%AdsilU-9SwflU?XW5O+ncCxBBQ8 zn=aHG+9vO;JwxsV^w0VWB$t2R&ZtK)MBS%Oqs3m+Q7tn^-_{iVqLntOZol_VsCeCA zyHaDGT=@MOwSq-3Tm3*c@oA_z@=V;+)IAwrN7oSU)xR6>#Trwrv)GAka;+{y=&_s8Q^9|(owoA2LX2}j z!N>Ic0glp|0y!)Z-)k|a6VC-ASK4P{Yz3=9N=CY7GLMF%esxqeEfd@Cs{x6Sk>G)x z#Ww-iGF8`XV{ig9)GRVLe|{#ETLi<73&!6k&Loa^dkh)QqCi$;%{#8Pa0f-ox9sxi zpL}n-i)hHfjgVK zr%ok;v~47TT!JQnzHaZgZl0s~;PU~e+yrM=>9Vm=3HO*`qey`7XA*e4U0kz)VZ zH0_mj#(f2L+7m`z%*9rLb324SK(axDf!}~SqmwN}AZ|MiR!Y@s<$pw3%P^3B-}`X# zyB{`9mLcSE7!iN_vIE`tvQ=YV4kxo-$JeOZfo#9EkaU=a^Ik@N4Fw$8DsN zj*v-plcg^=20;2+p1DrnnN0ZzO>PJ^(ow{qOP#^A;a9&VDfvSO=ZBRlMS2fG zP-QPuK#)4t&%pgEj!k=o5lRh}LE#|zYuV8lFedYL-<5xj&8Twqdum3d>Sb*%g_98H znZ;~wUMj<pYzTKIK+B5F-YAK8!eW)%S6m3M!%o)87xrIdk!p!N?B@ zksPdv{u+h6a^;Pm6fIq{5%C)m1MMTDwpV|`mMM^AN+~Ja9A8SPiKR^Hcfk6SrD3A^ zQ|e^|hys7ME|Y4}#m|^bMKTe!%5#RYKz76#yRHN(eGWZDUdRzuF$^A!S=`c#SBw1+ zT*Z2xKtR>?mH75b278?z*m_3D<~o_rpPp<(+Kq}-Y~H}e{Z}Mj}cJ2r!ADbTy6+Ito&1=#-aC6?_Kzt=LP*(qB)&` zsCy&W_c^^FY_k$GJEBWxVncTC#3`18d@NZMeT_$0j6TJ)z0mc+tGgaD#?8}Bl~X?Y zbuNE6)O^Vpq0H5c7k@)at8AMmPjSUCd3WfJP_;I)Z69{&g~q@ZyeO79@$hn7&@r-t%qsGfM6J!IN}ktX^Fhj;%)6B;&tT%=12=>c&tM7{-d{?q~IJfznOn*v3tZpii>}<(3!A;npP&0T}*W9bNH~JGfF~;Olb!{@1F+>a;L?~9RN z&d&hFF~!E-;s%RT%$(FcO&{;kQ4z48uAm~%BWt}-zMK*hHaMMp=AFg9j|(p|m@EvH zDALXrJpfhlIbagJEV{CQ#VbxKs7=Y2hh=4IZfWz9p5`k)_{-CPB?6<~ zcN!lwgmp-bm|TX#B+5a#+{NXKeYa}b?3JI>d7lzed7Z>lI_u|qqFoG%iFAKIn=@g_ zKVbOdS)x~S!W@66vPl??0b|;;S@+YFy8F6nIhwfDPXzVOz~U&~#ery#(p>zAmrz(; zbe?RC$>CAG{2hPCD0oO4^pBun+?L{*+rX?4b-mC#!WMUgETk!+DtaMh zTn0wa+8%Auc^}wc14Y`~7`N_Uu|@0gSs5X{8wpTBb%L(^hY!mnK=L%qu?fR{F(p4D zHI$I8Izs5KPViHci3u$Q{eFz!_zW59LB=8E0kbJJ-;Yx%#-oNM*Ia)(_o2r_^d>OO zZc0fADVQHCK*glX>Ssl-+v@(K62Af_Q5{_N+-g<+E6oii0Bkd17oy~Mw#i?T4<*M8 z&_pVvgZi%m{uf2ocLlZ5l>s%flxvxce*JYu1gZhV_i8Uv)8hGWhGRdzRv-#X;Lq;i z(A8yA&pxWgy|W@L>4Jao_b+$4&iM)qE-3UvTtSh{~2jUJ?$UI{?zch&2j zHpP=O4AZZHknKsl^gyLJzWL8}e6Cs;n>MJ({$8XJQoFzA!ObTZtx)>3)92lRQbfoi zuo(MP>2aq=s`KmpxaAjLOyZU1((~MmFPA$@3htHIIlr-1sARJ6uF8G{Cx*xd6FU2x z+gWNwgKz!B;<0~GyHli0^)$3Q89ZQ~lKNy1N4?KUm~6I%`^iOiziHoym13j4X~(7#urveYM|P!GBJ#)2&@77-Ua5SNj62boNt@$3J* z3)(;!=N!)7F&}Slou3u7h;oOqBL^ z_ykum@98wm4JL8LedZ|g`uD9l;G|-I?;g$qG~L4~*N)H!r=`$G+$i`V* zMxG1$w2y16LS+AzgA!1E>$t#wl<@r5ExWdN;*#C;0mPNk86)6RkX}C z|J;9iWXioZ`5n*=_h&Z3k2#Fn!B?N-7uBZZ16z%x6miDGXGtw~STWe!GovEVnrZFR znl=$o_bmNciEkcoXH#9;Lk&dxUld(LOzZ)17+~YsJ&9o9@8&qAB!Igc%irnFrxhK+ zTrWYHL%rr0pna%_jxB%iuY5@h<2XUP8+d;*M&Pd>9iDKjBPF}+8suu#HnJJ4b|G(7EV21QYQ% z!98u%P0(EO0Lp$W9rdz~GcK|NyB5CCG(6%^;zqDNm2XXTwqo7BOJ(q)!Y`GQPQrh2 z`cE!ivLm70W*U?DbXwIj-_hU5>?hynsKNFK?oI!uRDF6UU(V~$&4LB8FF76q&q2ZY zm+r;VTIBhnqx3#2DWj3Q9yW7|_Cfc_zwvG~31A>L3Nk0*R|lm;GrcohJ_k(lyz)F4 z7Zqba?eDa1S^GS(Ma?;4MYcM?VA{4<5qX@4mGT^{k!gWAK^MLnW%$9p<+)k4UdGfq zixO#9H~Ln_7{v1=Ga#^1Iy>h)bnM?D_j``_w+i8HDeIA<@DPg> zIQ!@a3Rh2BmK+Aqcb*kepe>TF2CUWmM1l|pBOw>?o%7>18;{Of-_1DODY?YX0) z@||>1_OCIv{dkF~DdlD=SF*hqVX4+ercA^R8w?6<;??=`w=vB$G*$N1*3x?ev9oSXd`l7 zxfw7*?{l)!Myu`rKnj1v*X?tc*7W7?rS5DqIoRl1_cPp``$=CFZZjgZpj9|w=gca* zCP7~=O5vuj8s|LC4BKcZKe85T-g-p^o{@=s*!;=rsaIo#*t9A&Pn|~PZMR(9^H^#R z@i|prrx0dV`!?UEY0#1kUcRh>y{@5YO~5f#DtRop*$Z^ygM@#D2x82r07^i$zwJWK z0^OnbM!(;r!6pv5H}N(gUbCSP6(r*k^_|POl2EW^G+G-}>}@pq&4wTf)*X0JzjHFd z%=BlT7w@s>ZSGu_(gqo}RRvLsyjjvI(Vm2em3S}^AK%9UdqPu|$~Mr;{UqJHX?mz6 zxKG^zs2HeYUS^hKS+4PafE+qDei(U4NB>b4a3Va)Ze=(hoa;z<%$WeP~k&~XdM^to6-V0uxAFYwmnv z$W%nSULSI4Ggo-6EulQs8aAHSAJ@Snw~0v*(^zEct>7ND!`t71vCHx1XfEJU&_rbH z+q81!cR!A7u^%1KgU0|zMDxbQ$+6C`t|6(71xf@)*VdT>Q488Q?X}H+GKBKE$WIM1 zmBqe;Mq%DR@!W2Ijkm6f|6=-~w=$bnF1JdH$Y?)FI;X4P3k;I9vjR}vMc7tdEw~{E zJC4NB)b0lrQJhE|E?Z)zG01C(3OJndH|h-bcbGRyzf$z@xsnLtarJ`l6>(~~3*fxKO9}QSsB2Y@Zz-v*Hwz(C z8c$H^4ynWhv$$Gym;X@!h^HB^+J$K3UBHZgPL?-Zx3TX(b1)sOeS*2`*sLWKBUIlggU_$gxj0;x`_79F1Gl`Wi?sRNPY}KOCUdto$iB`G zeHs3`!~8aYToH>m$-oC&t8-Wye;A+v@jmhW1CDLB(0MB@uN3=4Or2d0<`do@;;*Te4FH&js-XzhFYH44mn)Z{y9 zFS@>8$Pc3MgJOy#W9L345RZk!=R7HA5nLDkic?atq+WOF`dDn??0E-YzLvp%w$ki$ zcG$}Rth|M2cT5}zZ^4&uK1CcCEV|e3LqQu=C8i8C zlXR!s7|S3uG8J#!B7SVll?xqz_|P$dC<&$^bt-Sz$TnrA4oN)Z5VYdYrVr#fTEa5u zUmVDFEkpIrwCz!~tTu@{IK!*QDF<4o_-sN$0dZB#2>RI>>WoRaNFE$Qa8>=% zkVG_Gofb{6N@DP@X?b3#9PY{fU zR{LJYf1SyI&aCeE*Q%m_G)g%Qkl7vEuef=)Wgas?uTp`Npm%RaK2=1tCoH8BsZT8g zc_-DSB+{p*-DImoQ>4gc&e4CB6{>QSKXD%bm3G+ZY6AbtF~Qo+tEofrYKj;CrQ~P2 z_%HwUV**Ey2W_zAn~_=|zJ!Zjbw?$}02$_(75?LBV?dHt=+>NQy z)5*t5G&Xa8z{5E^VPMb{u6e`c?E9Y+!klF}P>WEFS0I@rDjE)1n3te;IranynfF~C zB?;&^>$kE$RO5@yAaw zacdfBB$9sSL=YZ-CH98|Vn6){(V|bUZRTvC1xB2nNY-B`*3!swUj~1p-eg$kr~9zr z72zQ_iu#S9oRGR9mU1D9In;t8$crS)HiGlvgRd;wolk{3#BrrDH+0!3JH~n(X-<3e z8F{;voGc4Fy;SA~7kmj#SeNO3f5g7nX;(8&1#4!wuJAX1XBZ$-3J%houahJQhhYk5 z>v5DVb_?Fb8=ECRgKle^)F~uXitM8ubE0&J>kb$<6CKEPusj`1BznINxnS`mZJ82+ zzV(KA_R?N0NHNhgR77*xH2B3!xD*)CdCn*Gq`l$($inP`KLr@>CW}qMlu|3ZHB)D8#eq?42X7nI`mSR_4p`QDn1KDQ=UzG6)SR49BGT{jpAoS5>AF(44`-Jfkw%wO z9TAmo0v1b>$z{TprSd&!t}sfxg)SZO+>Fc@m9|oq+hn6f>!aTBRD7@j(z$V&4cBUa z7+=|bm;ZQ(qWbZQ4FIacMn-cGtlQ~oYD*s97RD}Ztypaon~-7rHoV@HH-7G+#uCE` z|5(CYwtf<27;pLj4ak(q5t>=C&Hw~e#MDzM&v1MPNmWVmCVewlwOloMIGvU?ex?7p z?&W_;%6Z-OZ1y*@2?H9V^#`+|8*co62=f#=jBCbMa7jBK$&BiL%|Vk8E^Vul)aE7$ zDGa$fQ?6U>Y)?UT9%(pB5k?7{QGENs>(Q2?_jb0@RvqkdU^-D8N-b?19PRezryH&O zOm~ybGT7zWh3ZsMKg{Vym{6$_l-?fEz`=wx49jrLB{C|5)1CUqkG8@*?tO)S$2wyY zSb$(ouIQTuamn|D|5i;EKpRyfzMaU~M*b4OoJbxW#|iUw;@$)UE#=HLjA>supn$lo z#=G~!-%3WB>h%A9?3^e%+#Z)yKjl%I`wRrgIO8l|zw|MJw6=8m4zeskXu2o(gdW9Y zoN8aeVvjE{wjjge&B_@}na``YDG zzCAxU9zD9j*75SV-!*J}%)9T~IXmwVU5h#-4XEFbOaTp<&L8%8s~%b#d9rx|vAY~6 z?VYO59NEAH(kP8m=_r5CkFe^*q(}kdQ*#*)|HKE&*<|_#7PIe z|M5x-$|z>XWMAVZ<(bEJg|$1NexFSKDHiXGVPn&Y-*33hbi5C;p=rTVUafwU&T5I94n#-tIJdMh z7PN>?jp}t3;VppBwZcg8$!BZ+qt3Prk%h~Iu7D0rVl9McnT}c0(aWe8mbHT4+@z+ONL)XX>MOp`cJmN**g{ujjF0xRU zR+uSoJ)^F}>+v}7{9K_+`YUPat#;4iM3;WxuRjo{^MX7&RI%1}UmaeK1Swe1L?an8 z?8P#WaWp-E*a~653>$BCDwg_>Po#`IpywO`+H(&>y{hqZmU`WWz~jGL57H(jwPK>V zV}uMzggigD@ju;vW6}?o|21lC_!SYs%q~8;1=1hzzd}If8SAAtt1AyY3H#KHPvAQ` z4Bx}&W@pV_u)Ca*atEwbsog&dT~vm3_Sen2)Jrq&tFzjxMC8~ro&;M-ZXR90V#reL z?-tDV_MMH9Mz?bwVF?KJbdn|wvo6LsBM ztJ~clZhG~i0>8bZyz~!)(G8!RZb5pDSg?V&QLaEMgRU)k4vH_X6CPO|J||j z#|Tjt?qVl@#H&1-+#R~w)#ojntr7JC6ZfMC^{`&uLENCc3uaLKfxLgYqz^71G@=a_ zf+gA)=~6#z-X^F=#Gn7PWeWP|(C)XsIn4f9N~0#mRD<}21fY(yxzf|p?juZ3#YyDJ zdKXT$Z4c0FIe?TSRp6jW`h4`zdqiMzUk@c_3-By|4yX}<^Ac7kk_*f@k{6vNhJa^( zkhNGmT)F$NAEo4#k$~UVSjYc-SPT%*Mv7I3X}V|g1aOD1A?~^y$q5t!AqkxsvmOre zN7?ne`BS5N*p9iEfZuoTI_m} zGplBQ^&4$2$hbUxlGXj@YmW_GA92b2YUk?TaO9YsSjQ9lkd=)LfBFvjyoErD^!KfD z;7C;rz!lc-j4Vj57A)nP6*{I|1rid$1rMbFM~+)#(pIKgusXVYq-QBJt;0k=U*%H< zT9^fXFW05yr*Cjbbk)I*`ZNg>uA^MS>ip|}x4NUjCZk#&?R^#)X8~FLag7SSI85D) zbqzRn#@MOg+=J^iu2^~Q|Eic;?WIX$8&TdLNGOUb>8fey^el~EU!_F#Zn_L1X_nST zsr48=3sKQg2tlhJCGSE_nZ#JN_E#+tWIuw-72{5^HSYW_-J0n>nr&8WX4Y5wvr-j* zqoOi*8+{xYaz?vZ3mD+TOhH-xaU08IFUCd-vDZbfj1xRqnAWEcO&2VciAUj;>My*v zD3;Cb#ZpAjBMr1V10;$1;|+5R7xvK3o#d#Kk{cauoRTt8E{XwB@ofV)#OPJNlY4X9 zFT+>7L94n97~tuLeS`OTC!>A{0I4{CG-{RJg675#y|;1G=%TmZP|B`Z4<&58I2d5e zVO|L1VjvXJo#Uxh885>iU>ZnPgRpmzhK(o5(xW6` zTyF>s$ZKWB0SVE+dCB6trov(Ddi+`LDU6hb~xi=Ks!vxys>{81O$< zPd-1BX)NxCEXF-MGB;^-BF6K7#(3)=nWvi997VU;rB*5dJ7l=b1F;$(Fp^uB(7%UC z7(nprv$CGkJXaGbLDu%MoaFibHu|u~;SM`C47@?)2X{{`7a`A~h`2V8N}D%vZPM(~ zd&0naPv&c&fZ@C6kIAq$+{|k}s1CM9pW~1gdwnzz*RC+M4ZBz@?m#_%> zjNq?*J)5;xav9yFsE`{{@119z>tS0J5P&0S-UTitoK4j^F>dGa! znZ89Y*>Q95DrANtSkk3`VxrON7!=s5h!3k^Hg&1Ol<=^anAbDKgTBPIYWhciD(=V} zr(WH&5tP&49N>!$pqvkC@qpMY!lgIn%i2Ozy|DE$>$zF+bwoMeweJ`oMxGCwV6TF- z9yOJB_nAaSz4zh>x%NGfTGPO7`?jb^d4f)PHUrE!m#mp2IG7%P+OSe8fPcVYp;95^ zYNzM1(S);~HNw?0fzyJQog91^aNs)Uc3z6w7L=OjVNb_5D(A&-u&2j317|31Yt9dY#41dXgHqZYTZkzHE`QMmiV1q% zv{oy;MWh_Ko(=SZ%ek*}GFH6T73xeb*1p6KENz@sW%O{9Gk(FCWv`wbrM0V!x891o z+6G%jBhzq#zuO?L$P@KvNdz`1Mb2@28v&Xma+xbM{W8}AKmS&H{X@OAQ^A!*_(N}h zcE8{AqBF+#zsY&m6yrT+oZU#(qL||2Z+|i_Tdb!2K3y88H?UcjItNgaiQHUsB;1SS zLsni~(6mn?ulb{It&}wl!RC(!Dj2BFML{`t-7Q|Xpk%Qp>Er5l8%}e--(umVLuVd6yXp0`#a)qJ~UPI zPaz@%D)<}_GVIYieyNHb8^e(Ww|7XVMlH76ty9Co$=npnTGdYMQWKw{W4=k3DU>tw zV?0Bll?NCb_T+D0qTZE9Mi(xB5gqG5Ru{($PBPckC)HLp%leFL(f=&(WKvFsu)JAT z97&M);VX-%8H2}KTWA)4vN3>u`Y~w#)$(ljj%`m8M%*z8ED7+aJ_NaKWn@0FZ|Amy zQruPG98HNfY&we6Fv3jXkbZOb7j&SS_iD8qN~K?k4q9RI)1agMD};l8n1_jZ+U5?s z#Bgqik+mXbM5lkrR60dQ-WB}sDHTdZnyyHSG;|=OdIk6G<|1?MVN{twJYaF3W0+%> zKKhhNlnU}9(QO6XUo@biWFDYpqz@Z2za&<#WhH7pE!@C46<}|BlvKGTj)_)&pe}@# zKmqcO26s}GjXjg72OZacNBaOmqKkKoE(TQo)o!H+*XvhHdMO?^&S&nl$w3Rn5)>yB zWWuT5vWQw|3R6V)my#j@nDh~p%e+K4ZYz#ebmitVx0haYrZu4lrXO)NFd@^smup6CIsI$grgnyZ>5g{q;PhEp50Yd_ znIA5XdnIBKB=goZOQ?r$e%LnX>O+S-IMYeG;?^Vm{; zlKgv#@*1eK7!?p~!pX4T_Uo2_++J6)TjaI5q6svlQepYWt z=q|(>_Z`65A=dqW1*^6~fbbfC!ch(ac0agZE3QO{l6D9oxiihLNzc`jOMc~b44ndM z?Kk;qw1qeDSNhqvZvwP}4%RmV%HF|GBx^p1_ZGt$#x>7ZWpPhGA5_N50a$o3ZYE>{ zaKda54p!mlAu0D#F+0Vx*QnOmfF9tED_+QynB`k>JYW`og&IC4!~hLWI^dmOkc|c8 zECY*XUmo9~2jPn+mx_)eLkwhNmK~Lnszm6o*~1D9EVHb7JF++%1*q%}cjg~6Kq|?; zS`=|%q@$I_20rwodlldxy$|rmAM@p`@<)&eORiGSR){j9oUt^W@+`0fqKl;TD85fX z*X)sXw7<1~%K2pd!{{3`d)x@2_+ptuu=U0YYumZB(8;1Ky__3WC9F2$si;5&`gc1T}Fby-|~fHUw=t z*9;AuwMu4ly~LQDh^D2N2MzBPXzVJH(|rOkZRK)*nth)pl)-4CArUdOn70AjfRjcd zP~#~GaWyA`!6QAmg}QWYyP=opYDAl&5Ge)IIRUXOYT$EMfacBjh5{yBMD zjQMqbJE4thY^L_@61Tjuu-VVtvwzBxzx z)8kZsgvQ~?T~jXn9EWsMx0UqDC}Yj+cVS`aLq)!knz&(#Ch}6l89@3>m zHQ^hL*KBHXj@T#5QFA5Y2V+Q~2ZEz2Tz#fG7b5Q{Qcalrqxml}<9Db(r!Y?Hjz<^$ zt;%0A)=}O43|ElXW;S%-9~qm;1Z*RjMzGnZcaL``R5dqCAe7^AX~BTDMO3(N12)0kGX$+LaCH-0PPwhg(XPqcrZ%Ot+H)vQCwvXnlV0&EZ-tC z$jJb#oa<*j{kVcMj7t$c4JgTeZRF2?ezbHj5w`WRR=Z99v7Krqw517f#~5#`Y9-{w z+MSo`;_I+AhKdLa1@}x^AVqith(@|Jf9g^#-?vrSr!!vhu)FyqX2gExJwijV8WX4< zH|!Kka+puS#ytu#1mv9TKX0_ zwos>?qZ<{r!&n<991nD3v``43eTb$OGvQ0|bs7ykt(&nF{qyy*2WkW&37IjCM9g=~ zxW0r`@?@vzF1A`Xj$0Ld+&%wiXJG&RR?sBhJ<;nHGzu8lB%ay61f2T89K zMUu6)?EMSoH1?}1RNgql66>Z>;a@qK_>BnbX-byWW<>+>b2n+q+mpi&UeRT)+d(ZN znQzbg8q+rGlG!*)AaXe7@jgch|5HRcc=iyl$id0Ux_as^F{v@yWEVQnL`!VKFwV!{ zV9MdAb-?KM0NuEP5TD9_m)0|J6Dq?p)`*kjJ(G*-7M>+?1SmdMY z@)3Y03~S%9OKe_l`d!ny!y&{{bDwLKUJa=_CP^3RqVqK7{vCW`>FrzbgAiz(>h9Mn zXHfHHR-{W}F@ZI^LwbaFo=9ZN+lt?$gX~vzzW74>06bx+_&^7L!4H)NCGe>P1gcMa zyqb*X$f=KYDX4#qwc$}1$Be0X%Ue5W9F$F=OUfC2;x^N(YoepXzV<%0y2FY!+eF%ngX~s~=#{A=!dI!yBekU9^doGKV2bTX#Nq4j zmPDEw%{U)I;3fANqt)Q6V}ZasV{5?!=4#xrm6tVFj3W^ZAB*fuNK2;FwCbzhxe%fs ztAX&ko6os_kelVfZHP5Z+byk?BTs4&8(n>fiUKoaj zx?D{P?Ml+kr)(D#9VLpc_vzwpR!X&(WijO|LmG>J&6P`NeXo&F!~#taZ&4MEqej8= zV_kIq4@PZ|_3O-|RHtRh8i`7zY`H-!|jcBIo%%Y42(0_oi-i0 z{3U$ZCs|Q0Z8s~sOjWR{4AYa54FqvXeWv5DSA?f!(nUTq-Q@PkFnup2GjQz-x3W;g zW@I~mRn2b?qGmHQfjTJO!YT7xP%;Tev9u)_0WPX;7<$|DcgqLRI5p#RI4-Ha4m25> z$=aqgQHX*pdjH#8P@Srp8SME;u3v7y=!m0LqY#m9g#5^+Y7Fm~nanJbSz$8Bj6|OK zb8D(mj`x%yOTZAMhZ(=bAqvUZ=9?{grqbYpH&wLK}1^IBMFN_73_A^?ppXzg%|R~FTOMiGxQ zgKJ9wQfimDS4XSqai_;Da$_R|Ue23`-t+nGtAuykYIH}0D}`b#Ll=vjjb7KF=u2V! zC6l+O|3?t`zZ7-k6k~v*Da8Iorp7}X6$HjQxEeCcCG3YE?Sn|zP#xK}6JsGM%z}5_ zm)CVPGT5%j2su0esJ_gSHs9TU{w@`da&XKF36DIjkh*on1@raz-#-#3UjX-eL=R5B z(r>N1WpwuFVBvc8e!|ByW!rS%(A~e%vaJ3a`lFWz$og}IM0SkvSg^>OjFU*az{+^$ zrn>^gST0>KP2R9wh8P{Co~HJ3qS`9FaO0kYrgADUo3v(P>PK$gplE`BCsKr;I@n(! zw+Q_xLz%!Vxj8}nO;UqKz3<}l&tn)9aK}Hp!Fx$v81O9zY)g9Hb7dAv)EW>!6%dM5foq75xzGB-Cpnv}ASWy@~u3E$xzBGHxam3Ililre{YVxWvq&_>bW!yV1S7B1v^g@q!dyK%+1*dxZE-%tW(hkt2~ zT&H(I%h+PfMDn=p`h4|amtKsI|NOA-PZ2n@<|1Db>BM;@;Y`!klgA{yXBca4&08K@ zPf}Ok$Wm^?phsM-J!_I_4)u%@*zN=?EQ~PiuYRU{3||Ie`??l?XrGE;q>Ytsbp{K+ zq;*H4YGu-(+@01LZ>@<_&=$D~r7E&tehS*NV>fes{ z#SW!aeOpVr{enJry+2+{Yv2*JF_f$H)voQC8z1>cX^Gn0#%HMJ#;&{l9ktc4|7prx zkXb(R2K8i}tj{}tl{x8yFw4EMiGOf4om*04R?AKO)SVoQNY&5^Y ztB1Y&0a8$hKb(Sh(PABXPSP83Fp%;W{8JfEodoo$K83q~Yi+-f;VrPU%QLu{#)G3o zj)VaRyFj#{i^~jAkit_xy2&8{>4sKz5s(QI^8wGOT&uexNV~ow-7sh`Sm#aMjs_6c zLxaueC+Pyl(?Q-=`DP?dEmGIgK`I;(duB^xw|e!=-k8OI)Tk7g`z4^$2~kZue>qhlbe&K6?pUwLt!%3+>$aLfFR8 z5r5GW9Y|K0NJVaFZnMjG6Jj*Ze>9!(pG=do}$Flx^u&i2_O>L6{pvbr+{6m)sCqe4N zr2i?TamC51v#RjvJc>P2q}K<_tQQ_@aV&Zo9ew9mQ^~M;E5VH~ul%s#++3I42+gLZ zi=EIM`*WOIWp_`8<9*EhaXlGb&lpxo7S)>%9{09luo1ep6|0Ng+F{zeLbVBItf{Ak zV7j$`Qfm8~J^@&!wN1^erW7tsB{T`cAK0(B-Iw)5hys~bMu)y%?fE`fLjD~psu9i3 z{E1!;Zr9bADr%bUkW2sqd00PPYrlut;5pJ3k_NE)W4PamoBF_Pl=6&UjU7saK(J-P zdUOs~E|bVV3-{7kB=@On;5i&++@&XHw$)~T3@WMJH(-bIFFz(crp#X`MoS#DnY(~q zvR&kVincdzol1OuS=%qTaAB4uJDdEC#_C3ab|Hc`UO-Qs&}<1-!_fxxT~u3q?TQ5~ zGXx@zaqD9=98$+c+Kseb9RoIyt>P%EN#i)G-|k=@qe8V=GpzsSBr{U%Hk54+s3W9* zgV8fEn)_V7hjc|`j(UNYCE`zvkVr-N{oI)u2zt17?xjbQjG((S1Z%%5)m5V}o0KO; z81ev{yTt#bT)t9e{-g1GRE}u#PbDX-3D$zSj6x*{bk^t(W)QP0R)B0|6HsxRgEPE( z-JkZ?mKMLTh0eY9wiw|qZd-xdF`OWOI+Az)y)LI&)RK5cGlobV+o9eK<93@-W{U+T z%5eg$4Evg>`h8&sPA;CjycRhl)j<_^rChcHwF8WpXCeZlA7r7MyQo(a$JfRLfm&?R zOYN3;;^alZTojHRrla1UqnKEPMV(;!;U{$})g>9fPG#UT^7tIG{x0 z0tun&(Nmib=Jk%Y-lS+{@6TQE7Ffzm(f7I@9sGZYbNrOSDeUo!F()mBkkQ|~^j);D z-l5al6>hBmvTC4H&o3hCI(+ecsBV1;;13OOR}2D7%;^CR8E`izZJBhU-jH-kBCl^D zxSXsE#4WwJ_td)mSkpcotmk`w*i9F-r?Q^9BEo9L$#tZ-uM zoHfMWg)}nWnshIrcOCFG&mEp!esw;%8N4Kf$Jj;{k6##7x7hjN?u~T^Hd)` zNlRj4)&8nQFrs%YA5}iJJegA7m_?NNR&Z9>n9sqfB>SyO^Rv9CoM(Je_dzz1?Dw zSFVE7Eh^Wi982}xJ3Lupabg=(TAtT4bBzC}QA# z_UaVlD;E@lQOT=lW|QT+PzhW9#J!#log|(&>+yNo>l7e=ss<9Om2Yk}M(DF*cA>hi zxYov25J_yYWoWzMNE&DY?D!KWLDtd&Mm<_t$o}Qjz;}j(UmVF}D$kF(V4Vv!d5SDs zy+)y#%W+khWI^BCAqtdjY9dn~f3INmiMehnQn_GzV7ns^?u0RKAEg=_W-T&QAyrI` z!cW*gk?j9}EZEVl1?(0(Vk~7sI#xaHMVjPmyLHNBcVC>BTXINY*!{)nG5NE6^<6=Y z&IQ2~FpZO-N~V;Syau>?xP2A6>&hYIV`z;#ZUDMG{mo=R?d=iWPkzoQ9QHf(_Xd`# z(8HPW@!G<=)nkRpYDwIII)E`jNG|XW5WVJ!3_F5J7rL|YT?u@4T^XT<|?_w(u6sPOyuPCTEU8l zeGhbcZAVNnz=X1VYb{{15&}>e9#ikE31?o7Z-KN2-BOuQi2^sLG8h2$J&sdQWP1Oq zR|747Kxv!ie_*oWa|bMXX2oz19<*y6)q7mNTm$~?gbhevnr8PdQR+dm-IV~w-R&J`mP=x->0tU~Cc=6kA&GAPth3B{Kby9#W`lO0;HJN40$AzhwWCjoDEt_bB zWnzP}q8HUZT|5s{P=3lW{Cm%Ten=2iY=8fM=dYOfV_DJ&rZv>xJaa6ACKqKpTUt{k zDq{5jxuuQtvFsi7X?b>Cy>4OQR`Zc-R}w?+rr#90rcuSt%{50|KWHzg%RhwC*!wx} zrPDpO)i{W=D;l35Wma?3rRj+CSzlq^d}?oykiT4+86SSoz+B)Z7#?dcn<25D41X7Y zqXb7tXEYUz6oLs=FT_H$Fea-ipUFg*Osr0Ad$w0)s^`YQqXJNEU$J~*PkBDdUHU_) z4C^pH`cP-0#i9yyZx=uJc43anQx>;ob<38#SPpO;Ro!VRUcWb31nIwqa zd!nj!LjoQg%_EoBdAVg#J}ba5Iiw7K2M1qUA4wGX(%0uuF5NeBqBOj*`}*-T+dHfR zd9%}8xe`^6nYS&!3MHt>I+4}7lqUZl)CJx77&hCjlmskizT3Ol$|pl<1Za9sy*CrC1sxGhD}h>zoG*`UinJ85011K3(g_B|Od;XZ>m1jopp4bnN#oEUqe$9(3X6FVqR% zXjQ8dDH?3{9;{ymov7{mQ!h8|hwm!1>;QgVZ_cqzJKOJm?*8b+fi0w}El3|(NPX*n z7Yn9@3u{YOtyn9}<)a|Qogl1F!C=3|e{tS#6GSpjjRJ65too4wRJR0wOMquM%Ol-s zCwv&Tj!CcuFQ56|OON7mXF^|rC4p9L2DRYcu-2y0hb!YThgblTQ%7N z&UTroqVETWR~jCl8nC#3J+FtIMTy8<)N2p%iOe_*%w$`FES%9g#89riz{MGeX_UW}3or4rWA0=^58laM$R1u`);IWd#L z87F_Nx?_|kU9crwc9+ekY}>ZoW#cK^wz_O|*|uF>?s9e6wym$<_s*R=>(2a|Z+_%j zc_QNM*b)1jvodofIkA!|y|Aghv6+OuoeMoP0}~HGT}4yL$i~LV6lgC;uVQa&1o&%a zha)E!buu$@0ovP%8M&D805r`^0b*t*02Y5105dl?Hyk-Y)ZW3<320&I0-*YfK}}0b z_g|KOLIB2||LOTV(-~-C2cYhPDVBWC0An`pb0<@XkupPY(@<*w|4^A{Ko)bVsB>({HHW$hQEJU z!p;CAfU|>{3GnYUGY=Cphksmj00%QCTcES^-+KVi8DQaLWasj?2QKyipq+`0tLZ-k z{@Ts$|0U$$WdAq9_OI_Rn3BD-i?fLn(7^@pH>;AE#DDN~u{3h|C$}^3uNz=*{x{Op z-o*8vlK%Dmh574sF#_5-16<5JT>gK_Wo!m81v)#}7(XQ@crncD-Hnf}9W>gw>HJ~uO`e;Y*g&zhnBOTx(1-p-`2UH(|4-!o|0nK$*XV!Q#Q%Ty^M8kyaJ8{fFtRoKcM{+~ z&lrFl;GaXr?thCmvIW|B{-5Iid!(k>e~|n?!brOq{cVM?oyA`{m>8J;!w7Vi0D732 zDgj+gECJ?5Hh=r{uU*~F)Xaa$254vYSI>W237}_YV)}1BHA|q0wcS6BXa5hEnVso> z=l)lsf0;8X$Vf@6NzwlAXX?LkN`JL?QS)^8OYMJ@B5!Z{KL`Jyh=|yG0KDm$IXD3H zEL^OAw;T&IfSZlg_y3UbUm)iH8p|8GH~~EXI)BS%V*a=I|8f1-Nbi5Y!HCd zT2x((>`ebIu>WcJ$8F;3~qW^RJ?@~82^Dr}kTlr&e!W&|ho|WNJhm|`# zDW)^f#|%Ck>QLIKR#XsBW8dqa93zvLZ?V5*bV3FhjF zI)K!zAOM~0(E-uVB&{J1qYJqS1hua4^o%0u`00^yXl!KoSMLpE|2`h=&p23eUL!2O zlvCnl7f(Z{`$m&b$X7S^_-Eq;#xBkB_6)Df9}T1yTR!IC+u?t36F8fys&%5VU92hs zSqgUjl!P;RRC9lOHp$r7lOlpLmk*CqFl#64Ts;S#j}};RRd>1t>&_*``Yf*Ibv^ez zK?Bo*Wa@w?v`-HA(5zA&t| z)G~wLj9#j{HV|cwgbIdtLzEnKdiktqM9gp98hU8FY!Q9PFAC@MWQ3y8=}4iRibz+j z?9?uh1>DvjT4&__;v26bnya;?Pt5_XFk$GIgsaEL%ujz%3WN}Bki#6_W5SOl;ZP$G z0r#;*xAA;~mN~D8TygiySxfsY7kB=KMDH>=J1 z%wGKClWh-X40Zd4DTu{myC;T|?WqTdbm;ZFeKtYT9SENf4p$DD`!hA9%12I`C_iKf z^wm{vZPb6SlsV2?F%<#cea+h(ipoDx#hQ3i#O&bO4fPa`rKP3{y-VI{+qajdNVjrM z0)A47{N19bjEO-lG{La*_L;kV9*%)+8`s_hSN6=y%#{IBUsV13$4D8FZJ4bQd-2n$ z+usUup;C1A_uUTQGs3&O@qsB<*z=S<4Yx2>B;tRDWGR!ap?E_x>0GiUbwGkqK_)Y~odI$50htAAHNeTRyXt?J@j>ij)08$BgfZdSXZ0$fzUvuPUD8h- z-fZrHWa_a_;Z7=LUFGa^zHTD$O$x&`-W9e%DJa>5NE#-h zlbQ}u-e9+{0e+ytKVbd{4ny)A|MZY+bH4Kr{34H_0cSIf)UWkPP|g@TZ~p!I9kqWO zRUNYGl|ML^f83JZ#x3{JU@#EfV+DEaDYRZu#(F(Ga2ErZH-1tpwi4M@Gg);p1PjeJ zvU!`9`~fI%aS~b27AfT)qH}{8FNdE4QCn$bA|t$rfyYFL;-e{Xw03C2Hf*wF=HH08 z6^r*|P&c;MHH}z^8dJCknd-YB>1luE5CFSNM(tDQl-O4ycuct-nl#SqPkq@J0Wpq| zXgP?NU3xuLIw-Fz>m16?vdA_j?(MvB6>C6@f;}yCDYkadjv&=}7bQb-k;~mtY0? z$e_1uE50$NzsvCj3*vLu=={WjWdflk2x9t7g}YO^ehi=w$*=b0GK4$X;dcjg0?CGpIdJcq|GCrw!KH>i@WmGkFuzr zW^)pH9-nUxhs-gy%Btb;TS||F6Y18Jd;Wj?g~5E^a_*T*rI-IK3I< zSJw1twnklki1!L!T-wh&is3xpNf?w(b1NH%}w&Ylq>(&Qa| z#JQd6t5GRFl_UV4i9~^3`_WG)ZPsW$WwQ#4Tu776qrR!_=&fr3Msi@HcZ~xH0CSkq z1Xzq;oqA21_~lTdmU-VIx8IGuIyqBzawOO$@*xdejAvXv4ikJz~~Ki+~^7)YXtIc zy5qohyTx4#k>{?9)>Cz05Ydr^CItH@oB?AjScHE>)89A7i>iOPMssh&V>7+e*heDd zP756!*OFHahtG=w3`fPsMc+h4sw%bD5Dv6~d~awpIJYnM+w(h=W;M&`g+Sa>M0xW7*~<4>Yxe z7Mj#waPww0b12a#DWlx{ZY4}0gC5f`%h@XD)}$MOp5)?qIVDDa=9HA^APkrIq7jM% zR}i+r9l5&yPe@CLT}r~WAT`1Q6_oZ&iz}6u;rFwi1H(T0RBgBWGJIwJH-RvNVLAaMEi_3JG>LcZgU?$(0`X5OX6@GK*EAO;q#^mUmdUIFuPGy}_H@QMs z(0Vhd)OM(gS~I_YM&?FZII?(~`Q3&2Guhlaf{)HE0@*Vw2Z$BHvE28RT{&Yx{kUGq zmE^lC^1+5(&+9gsRukcnG7u|yQPHs(e3_PS2;C-Zi(o;~X|V_i+*4=h8q%YYLvWCr zpdszUskqWsO^LeYAz_BdX1v&~ViET5$cbCFTo?PAs`6NW>lDx&-bw#-2m^ZA(B4As zbofA0)((i=)#KdQ)BfO3rm7Js49*;;FB6}h&t^XFdU`k08=C>wLhqtx?3 zqv?BksWx|i3Zwr32ZnQwFgOD^I4B~5rF*yZ@zdSBu67+td!FR_Q3xbz;=rs0IGh+u z#_tmKQz)+q+EduxqlBM?(Cb0Fe_Q-w@I{msrU?1A3ZR2<0dKLI?hR0YIq$wh@k4#!>bVov+%cowi4+FpTR`-^jAGxAxJ1x53DzavDt zHS>GmF4%<5V~6FrcK7bk2P^)Wk_LoaonHXK_W47zWEn0mslz5T57vOqY@AXFLZvIB zaI0rp=VLTEWxY0JxSv_O)Wg~UN+ttzK{X?PkBaU9u&uaf%2BbtvhJ$1i&`*`r!Hj4 zft_2rTPK&*NG^7`ZcQ&Hog|{Nud1Cw(+vgBX(FEo4u zR<1yiQI5`qK2-J6Oi+S5q0^f`--@Y;4)_kA`(S;|TN6ozX8BW`w?K1e;2~0Gwp@btBjx~nP9bdh@#)%!wv3X~#<}hR8AL%^Z0=TcH z$CrHsMq%4NYD!JkkwJSd?E!kv*-&g89?LtQjQ!=S(&dIV=s4OxPAO_PXuQkptCP`t~c@QO76deGsju>s<+)dt4^4y zr1Pge>n4tJz2_E}@jOo6B zQdZh6`>af_gpS?&{2H{$^RH=h;sK6YAKbK~w2wht(74R22N!Sd=KK=Stv+)}vDpqj z6%@bmiMQD=6>+xKju`^Z{h|~t!t#5DSb@I}85wOdlrh;2Cr!5sxifEnYe`1AbwA% z)G6o1b3$7N8odYIwnMksH4tr;7w8NFrqip)QM2~4hlS*81)gOO%XUQoA}O;c}w1!#{>ddb)M&N=*ePg;pw z!ve1>DwU1CQ}$%ll!ZPzgl0+aRJD5dd9?u5a&gm$)6RLAcUV5uP2;XLCohG>;{vt* zO}Ru(5$+&K&vxrhHVCk+7hcqNkbhjobp{{qB*(CK(tWsmz8m?-4^}{R{uu!jgXo>5 zRr$=Ei0b?u*&xXE z#B#Jpo*J_}kH(4|3SbmWJ|b$3-2Qs-1B+oAh-NIk!XB2RA*IC~X$1M=ezONdeB`_X zLe~+X>FlUzFJ!NbFa>6%`1Lz6wwU(7V1UJi1-IINiV3&Z-=bL-j?7;Z7|+*2gfag@ zGkv7z2Fv1o7SuD+dDo146utjsFbO&0ZwdX#Uzf;@D3fO`lnpAT$gaXrU6uQZQr}I% z5wh_iBT!sk%hQ2gcyJ+E`6uNwL;Q;YiVy3~`WIx9sBvzT;MAqvu`sl3cp^M_V*zLW zOt(mXci^iKuy?eFb*6EdPqu3^LM=acg92MtjDlP1RwuoD9cDHJU|?6FQU0y|QR9bL&Yn zZnyuV@!`kHzB!xy(VJCqfvRp1SZ_k)_xC`5M~V4F?&V4T;L}z64LIh% z4#KKQmqAjfmknsC;a%_XJ*ughWfN$B>iIHcgf|7C(c3l@EQI|=W2~7d5Q8!P<8tfg zn9J>`*F%WrU2@)M|9g%b(@{#*L%RFR3mmtZZ0l%%!dy6=Bt1fY_^Y1ig!$K?$}3Yb zW~^>QbadLX5P&%zY-d065(KuiYI>je-O3$ZY%OxW!JsUGYA5CUNWeL@a>&(=Lkvmf59MpJL z?I#thuwS}gd)s!9Muk7CGi=&j_6oe2{}}AAnONj;H;=$}8-mXiVK9)Js(pgT*p$jH zx#enR&EaMwr?wiQis0@HV(JTj-adE-HtJEK8x-jtu-G)>Y}IIX6GvTi@94u#P|pn~ zp78-UFoM1_>88mL8CUO%-!PZz4U|tJV6R0qU0rf<;gV>`;}m(ut_Ba##r9X}Q<^rD z)TM^%!)|gm2!Mm@Y4JTp0SkN0NCxkalbaA?31OvEW-){U`raU=)M?y*ZXSj6`Br2- z<%!aA?`T+8J$|EbWeg7er2R<4`&_?1X_+HS_`%5hr5HN~do0>V9o?4k46#%OST&+f zFOU>l+;QI+QawIx@gMKCD$05ghEdX9mo7~pf~Va=cV9pyR-Q4MDk^w2eiEzlbz&o} z7+UfE&Y6<=n|FD`GpTQXBkeYuk9*N}kROOObre0#^$i!m?576-K28a(}fOjZYCj3=H^*A#!f=g+Cp={(eXbe`=myLs7 zeeg5i7F0)jU6wdjZ(01_IIdJi&lpC(p$s}aC9!@L9PcykWX?MsarDVe)(RYcqeA@- ze?Mew(LKG7yS+%7CDv=C3w%h%f(^SB>RVQOoaAQ|uASH#j#;wQ$acNSK21Z-ONM&L zANE3q#6Zfk4wXr*6FpwO7! z(`lP$_>vvJFWrl}8}06!;b0uVA0^Y0851cJ5h@n=@ubd4BYbcE#EMB;M$7F_X_Jg@ zmXT#>gq*RkjOWmXrUjOTVpqoji5K@J-HSPBXrc0u1W ziSSy-kxW0e$Ml%Z*o|E`CP~Y1DzU?8+Wk1RT?=?AP;_78^y4`Qr|)ic!dvyseh-(m z8R|GUlGbWv@HFyAO1FDsqwe>VTxXYBTS9&*<{f9~po>Ap;Ts8aJx98futD9aw~dz< zZsF}5N_;7g+Y~FNUdz#jx{22teJ0-l2kj>|9%ii3?RCy z$@-0Ns>}+aK9liiRhIW%7IjNdL9=0~T^g$$)?wC@tG(K~to5@{>(B@xD;fskNdnHP z-cSZ?UK&f%(=Tr2$HS3t(}ojqr5vqXn|ZIH-1E`s0)l`My#+pY4BItvIUmY1UFgwv(tA3_z`&_`KuRC z07W^R$=QH1*y7yrIV#Bmk4by5r!-Hq2j?jrwrhn+Yp*eUNn6~n$q+jBo_$7JSiRjn zjBUNLB|IElkLhUu;?{}Hsnuwyu8l8QUiiCziYz#W{(KQnUr;i;di?=xL42`~>vL?d zC`Km2vG&ND_Co|cfO*8sdKeEb49We=3Y|~A{!$5jB25MV{YtVMLk9K`Ny)r9#uhAv zQAlXgKs#$Caj{>ct*L)@K8_4Z^0U@j7w2;lFeA-+ldnBZ-f=A6P4EDOZS9AM z72met%O$=@Ql7|n8(+OUsBZA$O8qdSqef*h>Mx9h{n_Z3#=Gqh#xaNUCch@1}v-q`2ClWy_~ausKiScOpsis)81d0e~hzLc}F4oM<)6D7+g7ZJT#89q%UZ@6{E_K<{hLrAE8}Db?~Ke04ZJiaHr!GV@Z2~M>&L%MD{2)= z?NaI1A*FBlf;15HN3Quw%VWbf9v;Ee$?6;8j^RYOsJwssaQt;3#a_g%^gg;?A3sK% z7NjI5leHG?@<`+Z72rmHDu=*&Q&G7=nmLoA-mm;xanZsu3C@1Md2%m@e5_589}Y`a zP@&*xY69n7DDPutOc`O@AavmZBSr)#lEx>@X0aRru6Y3J$P1Zsq^;POV1;8#EpUSW z@KG30zf{&iGg93)bPTO0A}AC=G1`fCL>{#0S}8>RHLG}5x$XXciQ|Ae80$~*$IK^% zv8)p7n*Ppaq8@~|;`#ydw`%gbWa33{5zIuN=JK!CRNBxdFrt=aK$^KuG!0j_THO%J zqEl~>%Gt8Tko%#_cLDt|@z2te5u{jqS*Tt$7qdUl!dOJ>bueAUCMyE?KP<+1-WiKd zeoKXDCGizV=N~et|_TA9i7e2~{GmssBC`0Thr#FxUaGWh* z?l-+TdgYjZ59zJYeIe*K3AuZa6JeNvrCOhk-z4r_k?I~xjWHXKY7|nhtSsw5Pp?L0 zqZB5hNEN|(PeTlklBQG#rc2jWc8Pc#ghK=)xwl)tGc)(yrrxCZZsxkm@6$Drd*x(B z{4FHswHPsD{K<5OK)cx%XiSM0uwhzTHCbtMYTJf?#mrh&U&!mnQ^Yg6W6lg$T9PMP zb^tkgnEJhYGFQN*`;R)(juQWsJa$k>^LKJ8 z93%hJJm+k;Ht2b1a6H%K@6l41?|am!K(g3h>G85lNr=JaxZT!A2?aV=MGONmWjZ*-tFc38?AP<`268y>x zv`G?tU{1Q+P7;?3Nx{ZL%!t^?y}fr-I8t^#f3cT)St^ul06nza{&9v^g7eUc zVQR9G(b-N-wP7#Wj?#>pCQZ_y+x=C420?bhnASRmEQjhT!W}W4ss(t6Qh#~S>k~a` zwxJP(3I)9PY+d%)7RWqv4wpp;@$9;#iy!31=;YV#9-g%%V*ABUbBAQG75yn$7Uzvl zq+`n0K+EscMc(^P2Z|+O6{Z;H6(<3Vq;0R&2(^f&e=ev$(D)Mit1JilJ_n?Kz>Re9 z;<6x!4N#q#3OW_ME`HO`buyxLv_NFiHMCTbP@ifNf7m7wBD+6(gh62(w1^EYz{4Qp zGDh$9HPfi40P|3(sUN2$)NA|*hDbAdav7JCrr83h20>&+bFw~hQpL5xd)s>}e`r?- zj!!_QDOvg-Z)O9`lvT~`fheSu+6&SM?6burmcXOvF+YD+poPEwb z_FaMBdB@Z*gZ0t`8SHpDF!@b@d# z^RM=ryDu0srtU@cbrl|wKM*e*xJFVcmzxzIml0z0DC3qDrE6v9i#E)ZFv^$quA0lu zua5iLWco1rCDQ4b7;MaxvP=FT-H&p)9Z^MJ?h2Fp9Q)-KtKP`P5BsD1b!~vfo$eygj0lzgGu1FO{L-$n;r+D^=I9koN)>r z2ur0v{=>3nHubr%+l4qx>VoD_jiR<9{$rIk{gh(iA!1$hE&o3Urn@QiMwu*wDj^-pU}jZc~Y zzvQ}NTJ(|T(HEA4I?1cjFh{yS!!nMe%0&6`0(<(&`44wLih%DpN({sM7Rf%XRU}X&*M#i`YX*x7jHeY3VG~+F>ll+X8yZPrW zTPreYGlzIwQGpOh4ph+i!`gjop**z}1qI-(VGCO4X9jAzFDq7!`|1cdw3SWsX;WvzTf@z>7%5l`I;#Bd7a`Dwi&6(_!00zKT^ z%JkSRif{mHD@}2UNX)Vm`N$VlU=GMMCA#?DXJDO4?)J0c{o;X8Xg@*e?v(%2k9hNp ziR{XA`t@Re82Rl~pUD@fFlmJt4tS}xZk%2T2dY>Z!k^gCdrMy9{D0to$hiwNW<()Q zb4Ce)mH6?!nQ#1@8dXvw*vU1SN9G@AYw)P|zsVaMj~G#=T^+~U>8tA``8*hB4Hxmr z6O)%1u=w2-?Fn*U<0bZ_cZ9LC7E0!UxwQ%!%Pu#6Ug4!6T>;=%TA7O#BYb-SguiEC za(%rR&ddj~Rp4iU^d%1VKUax=!ynl>bA~2-rd)|4m)Iwdfg5X|mcBVskfzBKtT}2+ zyMZ=maABv-{0S|eyTy!Sh+)yfp5ce8zN+!0A^JE#lr#!K7#<4U!vOTz7%$gBoFcNd zYQ%DXAg*-yQR)nbm|C&fKy-73H(-U-Uo8sNr39CF@Ps1Eiw%}uLiOm@wR#lS*g9rp|RlafBUF^_9JxMjZ;<1BWo9ij=jQLbrpcrY&#U( z3GhbpX6oMAo^9BB3xSD5oX|oDylU55Q6WFzq_BP2b;6uYqhTcycm-t@$G@TuM{!K0 z{D5Pa^sxIahWp&>1?tw1rTiR%;~=dPiz!|04(59W)!Ke;g2zw`@%3$Xtj48`tYQ9t z8(Ne~RZP5uejL6Ry_@odbD{yG$!#*yFw#6eQsKTZ8}ZR!o>Z(WdLIP~M_V%(t-eWZH(GPB>5OwGrr{vuSOW z#7Lj!SQlWF4f91@g5~~eFc4`lSkzH}Ft=y1PVH(!3DUs)7;j#SrZ3|%4e&IrciMGx z!$(~3HVk$vVS3nr(b8Y9cV;mF1Dw8e-G#?D^xZN1J%I!TLZ?f~pnlMIp*2Yz*Fd+R zEb@ho>l$*4GQ#u+1fDrU+Yi~1AW@lF&=`PM5`%Z0OeP4|FORZ4v9C|o=o-0yge@S8 ztQ;3>IOlatX<}bErkPXp@D19Gl{%AU=WD^oI8k5W5rf0J@R^GkdRMV&+YcH&T0N_0 zB4e(b1jbNKhboNaY0pvb7X~ZtgX!KM&nyNQ;A9VM(U&|R2coy8&SPWJ1@m7LjpicR z0&+>_c`ORob-rEp$$RNGMBoyCPv1N#1dZnp=Zs%KsP3i|8%=Lm#SGH*9ZH|tuG0Lo zJsvt?oz~;SNO1zkdA{3b4(KdRa#LEBh{37y#)Ws^bCk8H_q6Lwv>kH zYcHw;{eDJ|$c%OHLPMUjKzeFmD4AmH6~Ju(hUcHKQy04bE}8s zMK*w)r$3E+LQ*T^W+80{N`>mVlU@;{ELY8G;PPx0sKb9~xkF@$jP;a!v0t(rZyJI( z*4kj~2_9|#tJmGOLBjI-UQ68RbdT@L5410pE*46YUy8gNJH-V7=_K9r~E&d39*ndio^86;MsaW@(KL=*5h2q2Pj+-YkkxwinSh}N$-RC_3O0I}P+K>(@{R#%nI|6eR zyo133xn6({(T;i}jM1%q{R4f}N<*{c0i}!b#~%%W%Rr1Jh~}$*jh{cOepaQw2_ZqX zf4XM8CAjxaA7g&Bn&hplUq(s`?12lA!XcXt@+$^-nan&Y>|nL_z1x=SMZp%C_s`dP$$kH%oB%xd zs4H9jh@s853SVS@c)rq~Hge|gRiN#c5k%H{_#wEL}Gq5 z=H_xnx4pj{t2-tP$LDT0w6A>oEP%V3))d**os&QseeR%tb2t*4`5(Vcb*ZQ&s~tbg z7SRh$zV#*5&L4O>=fT23aU+{vCs=QYC0vTatzYZkI}_Mu{JeAmsb z_O|glf%x{(|0VfEriV?dYgPrZc*t0L{^>(B+mpi;4B92>GJC@Nf^xd=C`#{2P`f&%N}P0Ic^ud}@5H?!2}yzTd9+_{SjDBa1=L2qVRW0o#j;LI=*FtkvWOOzBdi_>|p zD$t}avW2m(N3nE$_O4-)GN{BA(|jv*s8gf+8iEkQrx&NiZ|~fuZNqT|`QVMHJ-Z7P zuEwi>ui0St`Ob+Ji|ECKvh5R&H;QPU;5Ejq#x07k7K|NF+Tt0?9^{Ew6VPqH#ac4V z_$W6|{R4$WOd9unCejIrZI_j`hJ2v@r=ZOX)KJC}ggBki20rl*b{ zQ6}rQOjAO7+tRvxGUkvELSAAN9zcv~c3gsT>~6|arA4h6Z}0-=fNZ)x07P^Dw}`Es z!nyO6#rO|7H8&e%Z3MnoNu&!hD(F{PC8|Jz(<^L*hb~yNcS@Vop!v3=%ufflW@Tu9 zR}_t)>Lacy-%wg_5~WAQiRK7bY{Jvk0`%gO@DOFC$xT(Arnl7ZvJg~z7U#)~)WuH9 z$D#;)#g;*wfxkQV1MW}eawoduY>UU%Zw`YB6n1EXWo$uD^Aigdv(jeqK8-|p40Onz zAmfGka@H~vCvv8R4A=Zc?zk(HN=3 zEL{$#@fb=iOb7Ck_AW}MI~zWK&iTMmoOSV0hLT#=`t*$##&dgDMX7N5ZKN)= zDUuy&4Rz?dKcFCa#8+c@k(yHawyjGZW;q4ME4QLuY!zTc+WMiS+J0Q)(lTNr}>pwx>y;yS^v#^i=qYO_BtT2t?gn|y{%*$6vDaT zAUx*IQyUWfZQuP~y=W6K#v$WebvN7=J&x{P#U-N%u6QPXBBIyx0KQ3XiVA(2BUq#O zz_!4JDBA_rGxvUKS}zSM+j4x^`K$B5i+*3~xFTb;TG|8q85PZc?rQO3b**BlJ_$yB zJ<|bH0#LWH8B3;LGk9|C-J_y|E!W#EcMgW+7KbB0%I6-^>O6Rt%x!H7-6_>UWbe`6 zT=SF7&NZT4n0z_Q6)JVMGK?<;+c>OXOr0_MC#t@dP@+dty@VJs5X$3~dTGO*Yg5yZ zV5IC)-_nKf^EuUjQ_y~lKA*4%&vu^qjgp2`;OFb2hTGd{-b8wSor|*&UdHo>jHWtE z8F__B`_WD^rwE5rfpy6qlehc!@7^4;*@CB}!CGlGs&T28^&n(#d+jaP^iYg$TAr%m z1-;(MKqe0}O1xvWmW_$K=%r|o{HH1))gh$1JO=$CWM+}|%ujOuz^|ArVz&3Zy^Nyvx` zffl$=se;DIEmPTty5-}b9ItbIxxMDoN6s8Tyw>1zc#i6-x+ec+2=axKskXeJ74M6s zIMo{_TKt=Tk>?xN&4qHxj>YhFdjVPBL+Q#gL8oYVtiS_hGOxAMuUIxN@>O9`io;x= zv=O72SvYx|^FKFEb0udVb&Qcs)Wme(yF%i>8m3y2-omI-e6gz+L)};koqbdR%VCgr zKrNX>*I-2k4W3ETbj-HrqEGNRXG|>DqU$?g*=ZtwnYFG}m4$`U`sK`pEtcf=vIs_; zppvlkvXX|iNKxH{X;x|f4Dn9CawjHc@nztUlwfJx~GKN9yz?q#YdCU*6 z{%lnsiR6rgoRfjyouFVI3%r=UUzxESxEvc!v=YI~6C(h&iJ(#Yna z-8urXxpy+<&lsik927Qj`Sl1v3wUX?B@^I@%vMTawhOkP@V-5rMptw8Va?MCMsa?B zXcbB~r7zgEf*t0PE6-&(ieH%M zlS7rpY1Mgh4avg8m^HL&`{hV@Fl_vPiuQ?2UR_+O9nNUEVu6s>R+@{QYdz`yHnAMB zOdV{-CKppKj zTiqB-J-OIV)_*Of8p@9n@*X`elb)kj&#I=J|7AwWy7!NKcZ>13~4N6rF&D}$mauUZPVo02yJe&QZuBP+ZBp)c37$*M!IeR!|!c}Q71+)8Fd2oA6nMX-p z=wRr7x+Eg|M$!^UL4(egL|P+a4#aR)V#thl@%)|^EHVi9y+M+PwRQI92CAw8Fm*Lw_r2Rz_F`v`&lk);;}+dP?9< zY93M8{PTUd(uesTUKNWEH%5_KZP6NmJ-Q|MjBb}jNflYjV;ypTzSZ*u?pG2i_*J8dAM8i#CStCLzVM@3f~8DnyXuahnA^6@U zec3RjZj}^t4ZN{p?6HOvmkPx(Ft3)NTF>Ltk;qBdQpAWmiXy0&?jMDdrm;zv^>2Rj z!c>(`r)UY_>X{z+P zyOlD*skjcUUA+1AI{L5Th6Z;?Tx*vgCHsIWzPmZIDJ*YA>FDtpuNLXBFCNQ=Q3BNuq0>$gjdH(wkN|wd?+k3Pr{)xw7uw zkr?;104nNVAzm7;ck*_~d-eHC!C(sEk2NY~5A0kN2E{OQm6AD_;50Ago{7rydOE>S z?PDmhD7->TD+!kbX5@Pn0_5`;PL4LmSWCa^y(J-kx-!gkKpG1$S(%LD`4ViIWX}of zyp-5L>}H#rL!`3i+9Xh3@#Vwehhe|}92IF8ms=I>6s}(Tt_;T%GT1JK4D|AnffAx> zJeArdK0&2ZTq(M^;9Pafg=4JLsp?)bNNA^S-!Ap4n~VavZugM4{qcp_yeO3&C^>OUJahSKiO>91n0NV_Ym((ybV|Z{&P` z&@(+v$-zn%DQ`Am?#>b$fLCo}yTsQp{>x16n;E(`+NS#V99xn*VQeSuuS6yxzaZCt zWMU_|ABqSi>I~2Gi?Vcw$A_IDMb#s}$90Dvi)HaM_1u)YwSLgRiGI2uHRY#<8 z#=yjjBgkdrA4}WAqdQS=?^^T$LkErF*;OzBODx;^HDAbMv#(>7u{H}EjkJwQi)1Uu zup6B@bTQsk7HomJtt!st`6rBBFK3MbRYXt?v^{_X#X$B#!NG~3MttHM5+|j96lN2y z$QPBPZn7`B1KUG~6g)R6cD~>&0{KgiktwuoSIk(e@n-avW@T)8%J&#M`4ZzqEi!LG zkT1K9Y+iubaBSKxyb0=+5xGX4Zih2(AJse5j%9O7KN+;v&F+cB2*#y{7?6uHmLN~C zKaB6>j=i&{DGnM4n(H&*ERKtRNqrK#MV4O3s*ABcV8jm`)~0ud%*wWK$>CEl6`H&> zacyu1%YD`pWTbmf@1tuy6<*PUV&$Ywln^?)$_=y<2i4sxHw zW)fe@JG>p4aT}0VNOLpBZ3DLx_HlC5dvk`~{H@~1j>a-rM_Uksn1H(H9&JqYN@Mr6 zEZTA!G+d&DMY1&g<+!yk*XtG(wNk%E9C&UpKqL-|E0g9)n&Fl`VR63QsvGP{>Xf1b zw*LB)94pB-1NXV;=|%#7zC>8i8E0`2C&o3rEZWiK_m*QPAgW5JQCa67li z!5bv8gvaCq{H@3BFgbw0dzIXHI@!m81^%;!whq)zE_y^hJ%)1 zTm_qM=VyU0lI>ma?-emJB^V6%n>%?hclJ(C^_K1XRiIKu7&3BX99!;j0GI=LesrF> zwbw3+N+$+A?Fj%sY!Y%U-K(h2k4HOhbw9_^!p2>A4Z2@{KV+-#H*h%}DKY6JuY7UK zrxs~<58i4Ym1{{(s!aMU1|r#35bIXychTI~X(6PJ&;wNVRR9pLW>EjUoeIwk!#%uu z;O_O3=h`0EP1C|6z({Y8`)opYas{pEr0ka(IBBBv-5@Hc``$^BdFNaVQk-*8s&%G`%}{xO>B9ej2PBU zv}<%=FE6$7H_f_(3S&n0fJq36BP8fW$06ojh>Na&I5#gcvHveg6SnLx`e@UFw+TdJ0x?YztO$HVF*zXF^(jOh6_mYusSZ zozz=&ZXFUrT@@TxmJ6lA%07}k6A^@HDjigRfYzagsBP>r=cMFFqMM-m;`kL5tvDyr z>eQ;@DAX{0>V^WQl|1=D{EB#Fq=~Es1w8vNHpM{38@&d}#Q|JZeFL(I15&|W2Ta;s zrTD{4gySi6^PE`hjv7k_MR6^-4g>WXTtcg76)6BeV#z>eK)IUIbD6NK+KyCn!Aq9L(?H3C zomivGMrrE(@3~5m0FU;dd@Ug|kx-)NYJ@w7979^Kr3>Jrp-0WTLb1*H*ekS-1}&+h z1}rVo#3tZ0mVzCYFJ7n9D2zZ1nyU80$5& zFmUYelnt%@{|!3=JYPj+3i~n>H@oqsnI_QP9%T4}8)AP&ezBGk3%0X=L5o^yT7p6U z^0RI2v^W7o6!pJAuF-$MKSz87Gp((fpyw??|N55P5tg(KxNw8Ae4oDZ2|;##r!Onw z9i!s@qjmqWUXtrIasN87abRAy@5ol<>t{Omb=1SV@s zWj@wDl)~kXewkBivxCTg{Mp^~h$z?D_m7A{#OpKYf2E2-$9lDJGjaYHqmB10=mH9S zPd)VERxLip#!QsYAV53KJIIm=B2CrRQ8kiWo6-q@%lupxlbMh$;lq8kB5la~{qoxg zb2O@9UNioffVU;1LWX~63EBswACctzq5^1IWNDgQTyqG2j)FLLw*|u({{hAz z53@E&7`iHHy%YpWPhr;5df~5}Gip(3v4`hWRnZPq#5F%bQ9A_RJRvG*lnfqw9ILoZ zBssn#O)~~!olP{LA5gc<(T;@QTXH%A&Q1=x23(_B`9e+F5;Pj79FARY$V1|p1GDWD z^hXch-)_gyp^BM*Ik8!rfm%dUHs@AJSG3to$m*uTW1A>^em3J(49KIGs-}O$j=^AI zvX&UFr|(yx7iGY-L^391l%~P1c3kXVS!lgz`f7eO3MGHrZcgo5E!>-R|Ol?`e*$6T~*^h79)*s%1Eq zC91Puma43U;8FY>g(^s?OCxtK9B2HzZ$?EbP#W8z03eA@{?2H~79nVcCAp_t1mA$v zV|EFV(8yFv1=o=d_a~o(Y!!_GaC!mh9y!DNFuLyczfu9{MiUlei+Fs4iBMA(G`;7z zPIv*(3MO5D1!6|Gv5UvWipG^zbu1nOu=DD>xFDvVLe0f)(9PZHxCH=`nkoD!#RxqT zb3pZ@#M=b5D{`;M-DPnEa{^6pPd^M0dd*cZD77gMr{)hZ!mvu#_kfYI}JS|fDCM7$}vNiVoK6_9RGsV_Y z>Ouby3bPD=fIfw3fV(}#)EuxwFIYsyNFVi7LmMw{QX!PBG-)(hh*S|@Lo#(7|b!#OcmvLN3f$-im zgKXh^f(RTa`bE(hO+HnX>X|Y70=G&U8cGbu5`SEO_h~|LrbCp+w2*+Im=Dyd5qdvc(<9| zD(xz=;x*DS%7W#h^i>+dUr3hB1mQL~v8kxJZZf>fAOD{8VGdiZA<~2c;r5XORS4!q zL-XQvPdepqK|EE4-uhBA=|8!Dcuk<*K(`K?EOd2)qNVVQR>-(H#xwsk8UHqaR3Q(2 z`updB3Cgot!sp1Z--XEfIB5c)hQRX9DO%!K8UGs;8V$yYvLH2DUR!|R-I7<=m#m=~ zC9Hc{7qc@!^gxgDkxXoqKr4JhU$+==8;5z{`*-9)*{vf@p4X$O=0K#?opwb7e|b#3Fck$g-i^D;OvQ*W@YwoMZWOiPBff2CHKaUEY! z*GisGav~>_zyOhtF8@qJPyEZH6G{YgprooiA4mBw++@y5g8?%*)JUS7WoRfm)s++x z#`J9S)9VE9*uHE{*O8%A;>D@YJCn79gLLW+6B2``oH3TUk&6&5^2;^)_O+aYFf3>{ zk7$#;g9xIUaG;59gB4T>f8q-8+{oz3n@7jWU$4S(O0wD4CQk_?m>VG9f11Li$J;I0 ziD$D{Cf#7hMkVcOfRx(OeBN1ycKcaS6J4Kc(Pg>Dq&~x1-zC2ksvl2@YVuOp=l%ER zo3e!2n42`${POzWZ^;xA9ao>6jV`$+GjtCHpTf9R1?LE+4}s=E@V zgFxG#MXXMqk1;s%Ou)naiXF7qGcvFS2-$~sJ`WV|Z-976aaPvza4pa5Mv+;5^{c{+ zf$?j#K3g8uE^YE)k1&A1r%o40D3o)A>H9o6?bc1m-AgKsada!e&Y#_39B;itMX=H1 z5kHPSBuDC1YI&8Ne^f=qD(uV$d8*@*BTib=h(HWoU{ILQtZX84nZh4g)0V$La{`n9A6h>T z*4L}RahSpPi0HZ0VpDSRtwczK`)h@lL^7)Vdan<4K%j$Sf1~%SR~SHqb!>Wtd^pRq z7G-7LQv6^F6Kc3TV}ZBOSxe=?#UJJtHxp87(a|g`?B_u=l332i3`kgPE8&gL;iM3Z ziRD#*5b_3e^R|s`?yw z&fG(&!?R{RDIyBY{W2@1uuk0c~F*;r#_FRaVE z6QI#%w@*;uu;5l^BvoOlZyF!i^>641Z3qLOV`@ojh4@ac7k(7F*|lOg6j8Syl50bg zpi<1Fe>Cb}YIwWj5dy5$(g<AY-TBgk$ zCL4Nv^>eu%RDqXR1q9{1gF}TBw#GVbQ3Fx49Z;Ai|Pib~3hU^2wle)0tcQD`bi#V<#E2U=R@Qnz-{u?In ze=h)g^}>A2^cq|$-cj-TBiv^#u4pf|5b+8=l%Ghh#%gFlh|Q@NK&?^r_XaU1{N8(R z^il!0rz->Sy*Rk$MP4A0XMeKe7(0tU+aV1bXDvNGm!0E5P)^3pj7de0@9J2C1q~0i ziokJIazcH;(PqDVsK9JlHZXm9b<(Z5f5E3xm3^^}=~*LqS@LZsB86r#dIsv5WAI>7e6;_27)r^WH^Dhu!9i&%_g>`%FZ zbcD(~`(p2oBpLmD49x%UrS)fGSzh8{F#^tJPekjte5Vp_;|eI11`W9fJRs0~e?`du zaW3_wc%!F_=$3Q^4P{)X12+r1+(bh$WW~gNAFfwDWgnIoc-^`OxTH527AR=UEgs<6 z9PrR0lAW&>AVX| z#ux}W8H-7QVFCR}2u8qo>x=Xf$}onV0HVaVAS+x`G|1<5PdBFdHKr{we;z7Ms}M;1 z*&_=C{Pr_q#k6S0dolPSQiFa?tVPzKvkdAn%Ib*FaVyr;6Ll@zwq4ePD-S5g*amfF5-mgdH6W)P2Zr`V*J z1R5ww8uzk3^XS8B@;Wj$e=hQPLG`G5j|o{yydIs$ltCoXT3^Ax6t-ASv_kEOF78## zRv_gq)td32?xaNf;!!yIyrENcul=+Tn!=R8WO?~+(H{2PQ^zYy=1YWNZXZW)0Vf+g zsA(~o)1#OQPF{2Ks;Y1{*#?ngY0YR38m_Bln|ynY(^@GDCxIJHs$gVoK%3}rfHv$A^GM(|IPSSPKjOCmE=jdXe|^6LUPMupBfFWM+1VW%A_3yuzH@MJAte*cFfEv6Ml#QwWK!VY zGpU)3A`~V)8e^uEWzsQaG*gl(=SE5~O%K2z!o@NjODHHu+^0Q1EZ0wAHEe}hrz=E=Rx3qauo z{^Jd=-D&I$BaMEE;7bX*pniemT9&)kbCThA4X5! z78#o*b9S8F-lg-&EX(({lBkO0$D+)a({hFO*b+Aq4;R1bNY2wDE!bJ|C7ov1 zIkkMk9sA10>7t}6f2gL}H#n+Ij^pH(DvKScbw&L=StR*nn*OG(Uce%DOn0;NI@^v! zP5LI!KF*WdNx?3D(?(7g5L(EiQ-$FHa-wYj5~CVB5|O1>ZzOu)1LfOI4>A~N~zA&o<`b2W~%QMrMl`K zjYx-d4|0z2FdZiV7?E&t%J@a{rR@8x7a~Ba7b50CA+j>isGWVW*0sXI>iEEz?O1f| zU)j8lg~T*%TEJTH9t(`y0LDHNn0R+!;!R*wv=L6#GQVT}h-+TcK`MgRyl*xtgf@Gh)4j-Yr?9jlBY||DsZPd5!-xy2V397g41b|tU29TlRv6dk1u%}rofnTS@HTXk?^crlh z`8G}%Di+%+a(?T?x-^dO20-I@6oigJO2u~RfB(P#E5Go06HOEe-N*`c8@JKgrh#4* zhHEE%H1)WX2%6FO&~!oP4u(z@uvzwgI9oKMz0DRr_H}-ew9V}#i>|O%{eO@wEcU`y zxo;*5(q`L0_w-Eofn*V{l{m&`oX!lK-6*7&8%QX@O@hu1+y?)qG}*tOMEl7q^j{@4 ze+nF7z#V%P3KCZ#N;9FB6@}=ynkXBt%EfDr?EZ!4qC%9sMdwJ3MlPy?FSIwBA+3>w z#shS1Ji1E>a%!5U1aC!gg&-jW?-2TJVAF|=R<&nCkQ>Qh>H*0L5cfp)eRoNrbDx zD#L|CINQ4YKRYs2Ju+3iWn_MjY5c!sWDbqIro^V2qRH*uLgS}f$lZ2O}*&e>DB7583Dn8%|mJkCV{v~3XNG03hfZmb!a#1)MgUuW*xdZf9G2* zTR%9zT8DNlXeP73Q`WIjUsqY?{xxdDKU8*$ZC`ndsJ72K+hRM?Zui(G`?19A#x@!QERkHeMep_Xc;(Z)(6gYJMF5(gh0OPYzS%RbdnU)JiRNkyxK{< zp4`&u+xXWPCnryjUyVOVfd})+e|5p4s>e~-8SX33_C4~Wl#-SzhECRsDeVsd9k!X1 zyBA4%eN!^)H1=~z^=w~yuz6Wd=IQisaXnAaf`)OK+`faaM*MwE6=_+CJ5A9kj=NjV zZ)tyY@$TsG?CC}F{>@}QpUl$iY=3+_Y=*=(b6+6=VKYTDkY3plxp>_Uf7!9au3I4* z8(h?}!RxLK{vkG;y+1#H`{L>N^x}d-ZHo^u(eG<=f(|Lvt(2$NL0#o#S9zt>7WK`V z3q(hKCm*8zhohIrZ;zk8J^y9pf}?Cc+u{VHV27ylq}SbG5^l|oSat2N+uR_P?idnx zW69}<81nk37cVbftQ&Hkf89>*izcTBqA8YUJ(@(<5T|yDC+oX*n1|T$>*4dCj>hYD zkiac=#DW}RV27mlPO@VM#ZJc#uh$$Rd!ySohQzL82${PwWMFXrxR_?Mba4&d>8DRg zo-F8q>QeDfDbo@EeVLWX?Bg6MgWu7q)I9lAR(Cl`;FF?E^0fGje-z25+3oFw-+aBh zNf!JL&DjhZ@V}Bg)S~3 zMVZcLbgOw*w;I8h&8_0gSqdzRw7A*{ZtW|iD@=!gW|3J(mKXC$af8)y1u3RDK2M4Q zYe{~cCll~$A!V^{vE;AUpk&_gcW6oO}O7w;~oQAoXf zD%pyU>qGR$rSy*b!TQ{jzI%#AeZ?pxw~8SWSBlxbV&dV7-II=cirKzms;ie#E4|Ej z&}-|GqoQ^Pzaer^j{=6*b>4G=~#aN9A=|$gGgi0ktw}dG&FMS?Uy=A8FWx`$k@}i-7lP7=B z=NetjD@xr`itUuD#_Kh`JkWNNjcQ(V)5knRY%0nDe+86jDb*UK^Bo1c{%W-exYXLz zxa{|UQL^DK-8%OUb2(s;Y!Q{wc0$!LPKg07ExJ++aS4P&;#)ZFc1*g+s%~Ox^{N6# z+y_vLz8n-3n7giiw7x=YKRL;!`{QzwmwWW(6@_&BVS%Y$i$1x-sGxeJJ9V{3pI@!& zdXGN0e_GX}J^H*Vj17L4-lkduF zu#FS4Ec*I^UB~eRsW`hHRoSxrGNws-tC$NgANh9JT_>-yS;F5I$tpkoe3vW^gLL{P zuom?<^DU+6m*Lm}Y*I!zG)6%|MK(f0GC4y;HAXowMl(Y*L_;?@K{q)$Mle1gJVrP) zMnOSEHbO!&IYUG>MmaD>Gea{(LpM1=H#s>*Fg{%hFHB`_XLM*FGBYwDlaVMWejW7yF&;&^sgF|SB6pX_Gq@e|- zU>{nc4cegtdMu^m9i7kxTTp>*XV`>Yn1+7nwUVV+%fSu|LEg%~$6x@;P=H~p@Dzg) zn1Kna_#J1HFbf+n2PK$?1z3b7tDK3AW$W%GYQ=hfh$`B-|68rv_m!wM`z;l<4tsC` omv9Bwa09pY$K&7Ee&zKGh3Fbkm#*3Y9t$!vIXMa?B}Gq03WP&**Z=?k delta 70203 zcmV(`K-0g1zz5g02aqKLF*6{SfLQ@2f2~?ykKDKof6u4bM-Q;8SpV&!C~ysOEs6j= zB-_4R?!jw2yG}j!ob5Se^65*8l5IKO*)7l~TNXu;6h;2XnZMq@dHb`@Z-intv;5}% z%MCY{iCo+mn=zfMoBQhK*W_b;>W8U5+=-kgm4CkLkEff^rims}^?<$!wZdIWEw8zgdVQ2OFw&?mjMt58aX0?GA#f;Lg z6%ee&GhkcoF_o5OsR*PW_l=fke~WY@GAr78*LDgHRH+wjXJ2c(JI)Q0R>Ug5+vA%t zWmhV<{jPx0uvG9D)m<2Uaq`veE;GgQG!LXNJ1*Ri$KpAuqE=4p&byt$|)<%-WpjIXm3(G)TD5@_y^u=JN=C_ogICrvj_ zMGIcVTYWsWb>JSB;T=np@~Qdb zpm^es2Cm>DKKHUKshN~ne=Ph^|9){t)P>NjDu4}dw>gPsV1-Z(J;k zvPQJ-;zikNbHyD~%@kbGh)vn|EgPR+FuT%>tBv5pK__+DJUGXgjo61H*q(vPHM5YB z=?uDQD5`?uN$Z{>f2kT`Is0e`HtuD8?b55)PQbOpBpdC>%64DJSx%uP%OL+m%e;u* zJBEW*=x!ih^1dUf%Ob?Z-_ITmbv;c@b@%8Qd_lkBHaQk+-~_At!6`k^=l@;VVBJhI zj#1X>x_h1wRq~)KPc67Y7B9QSy(OMa-<9=90-nxwkTtm4f9S{Ov2Z8v7Pa(k8ywx_ zX=ot+o(fM>1>$m(1NOaEK;+9e8Xk+LW2egtS}G0SbG@S_C^M35&iZh2LsPxR%r*ri zoclC%nV$NN!kB!qW2HPD%W}S?P`_%YA%Ecj7~q2Qc!( zK>-v`K}fp9o7+TJY;&`B5Df=pWdN}NA=8o*ZV>@7z2Ad40s^F%G0r#*hb%dl(|IVa zVkd-hivNGW6WY~mtdRoh%zfN`@0=@(;SY@6wT5TafBez7E1y}H=ZjR!z#V-#{S9CP;K?W!(2W1cq2AZNc3@~pv$mYGc8$R!3oe=@2&dYw#wL7kI`pkL;53_L&7-+L4y$AIdBz-o=BR?SrB<#jd{6X z89<^)xldCu)vp8g(Yo8&a(3erTC*%OAudkdy-Kit9X#5(hWD>?xA<%DU7vOpV)D9e ze*&pTEx@b?P=<~WoOgC&%=@eB6Wmyl8xzmM_k`ws^g6&;O?g+LlZLx2H##av^iUdm zfQXoyi-Z7_oB@+NnnyU*fxKAyvqlUuIPvFD1)uuzJYZ(`VCE8dO&AjVa=*b=OF7>h zzbUr8T(iOBr12cMIm*>m0ycBDK+G!@0XIp|loIyNMQ& zZ^E|6qN~4p5!%^Yp@x9LOi6gv*C1SNA`r*)Y>Bx;sCCy2l$mu!lJD%GR;Sl@yGQ$OaJk4*-(ZeEAm+gTRtc#$m0!bJk>wt#l z4$@D%9VDpNv$=2PI)G79|Dmf0f6>(P*Ee=o$l{C7`#ibqLM+3Kk+1K~Le>b@8{+bqvFj)qPB>L!+@U70OQ=0*yJ1` zp)wR|QOsQdgap@$K@MK6;MAklr}pxUdxSkXB=Iyi@v__1o&iUSfT}pf+a3^KQx#P` zZW;{_P*{g9N`S093H5nMe@y;XbZ3NUF0fsJGa#dZ3meHufa|()DpSlVwXsPttfEoK z`y!5CLO{)DL%(qGgpk$8a%iTI!E2vi-}QYP=1FgSyH+GC<9_Rjc0(@DDYupsKr-Bk zEMELM)oIZ_LTdDq0%9r3sfJ*rHK5LNgIoe$SPkq5xmUh*q8Amx1IPG>CWy+ac>e!Dp z2(xEf31oJT;kR+`t2|SBN}+D7Uu=u*Kr9Z4N}14U98aL3t2&FhS=Frpt_*?0BUCCE z=gw9!;(5|L!601Oe|QWYj#q|2h4$4Aih?HeLBjCl!$*2P0Di0dH|M6t zTiArKZ&C{Ij$o-DR`kC{UL*3{!NW)ZzLip@iWzNUs^5s8^Jc%tkCKN5vEdF8AkG{X z0k5SRBjK8Ee=Kv=IivC!z$l=$Xfe6#K7?^UsITj1sg)}erG`6xd}toe7yzWjTt%}K zi16*ySJd&rLD$pIEwJv3Yg;v;9fPxDLrfh-}yvle|%>J+;{Bb^}a^YKjyY&qbqe_ z1{FQbMB)NYVwa*Uub;0H7ChGW2;N$0)|{UegMpP?SlW0-+IdAL8ZEHL8%@-Qi4 zlF;#VuJBn}RYQKIsS7>&htM^E0c8Ssq1xkE_zM9X=470?=G+PFRz!?OhXB^w8ccP= z!3y`|T9P)tM;mqK_T3s%U8+1FaiH0laEEBHRDU#fxY$s{#4$m26QH^=A+-8Ypo<~8 zG4pN|7Ln!5Vg6;1+~0&ICGGDK{W?a;RKgkMn5cLZqTal}fAe46G)N+oDGXG9TaTPZ z7Ji>!(U0BI7*iJt@Y}|6q(srmE06Xijv@@qn23fB&|Y_b{hnI^)x-2y{XpF>=lY#f z{r8>P#qd+RTt!)|cBxLHJkNLK@$UCO;#~!OzwYA5aS{&V-! z!`<7To!#Y8?zG!IJnmE!>u_0r2VbM}-NSMB`~E|Fcw@3`|F2IET$q}=tGQVA$DT`F zUrFgpG1iAa9)5lMvvuoTWD9LfOIw$<%xk6nuX-qkgUa@QpFf)_9A>a2;uz0}@ z7yg_({?^~8x*KH@9OJKZH(f2UI>g^+BKH>aor|^FVm-5ZvHWN{FLspHBVr26}1p}kE<50dW z+dqqO+K^DEqtwoWiHnL(gWuD+uB7FZN_HY+QsT9OXstE+FBAMFiri4`iRSQQ&aZ0ErjQC?4s0& zf%xrQKlNxN42e7~6+lmF(oi%Vs6N<8w8nxL`Eu&fx>!^j?)eHro1xlar5;FnSnzqN z7I>(>!;>TrC;@_#O%FAH%C|uU9gfIgueJ#EyskS7cuG zv{Hw&4Cit>4|6~HTSo$!n#~I(TJI9j{y5|NTn;)Rs|=(YYbh|30T3Ptb}(vRfYJWa zlP3@*0b`R*5G8*B!N}S)$?wyk$V=to7kTW?M>x{B!gdf>TPcc%DCURm6iWPnr?$2_G&3+gO09f@D%D)x9j~E_|ComVx zJa;b%q*0O8if`u?7+9=DJk_ga$_q6=pu_;{heUV=rj=AbOT`ah z%V(47c50C6SS9=h1JJzpos2nohqQT6qrkNRYz~P6Iz0Z!X^l%kZrqR4#iS0VC*g!& zx~?96WIGB9ueSryH;LQ-Ms^kME7FEV?+Z{)wr!iuO_YB+@vmevz^0OlEDomVxcN3A zRc0ccg$q7hPOn9WF@OLNtY8{qtxSpjS&R0vD)XQLR%IwyD z#~Q40^$LGgT^wb(3#L;{MqnkK3AVyMsUVzGNQ|Y6gw~9n(%Ftd@kCC7W<4V04wsNf z5K3dc1rn^wBA29d@XfBIyAd>@RftU(+W|Hx5E#6jP|P5Dd%<<+IMObE9z-SiYSbI$ zfL1Pn0=NKWc<^oOn0RhMn5J~Hvlfh=6`=5r)e?WxFl>@|C91%=>%R&vgB%hJfg)!e z7D8i@+yWN7Tgb>Q%%;$PWt%Vv(3mf&>KP3Qi~L?!CP66&4mICdlTy@4*I>7#(gmzi zm_m^e#r>g`;YfspgL=GhV5>wUj$*f~h{eY;JOJefJ-W^IA48-Mo%4ytI@n*2>{sXcB^3O4zWyFf#v($aiU=4pquh7)h0N?@L^jyWbeeje0&3MKvRP%zy zYYOl`flf+e&f9Ep)`07PtN9SSlRPKkdSF32Q+VYJuzK+c9-~)KEMQ!5Vz^k=i)~tk zD{3vl=!Tuzf55m%7<~jEHF7c!gi zb_bv#+npTfhWzWnJf5&nb1SE+pa2(8@sgf|7T{JjpcHfUEa4WP3Cb8epJW+UX)Lja zrczss^De^eLh@?_+2p zz-v3Oxxu7DHuujSe2_WX#;W%eXh(ln-r~d-1w3cZUy>XyUV{-&B8ZhzpCo%OT!;o% zR(R30aaQ3OWRN;CObE09lj#08&;_X z>cPkfeEo26d!J>iW$X$FU^63%w)uy4MF)X7Jj}_DJ}D^quVGkX)-ZI?fVF?Yx{8vl z9$ZrEUvXyt3!2fLSJzpYJCM7!DSgNxEX4E^QN_FYYQ_OLSQgs!;y~p%4Pyrn8{hXW zCUZB_;>fX?Wmyb9C!?3v*>}9-{LTl__hiY?p(=S72zrbBH2bF_bRJj9Wb&Zi!OVcu zdfT1If;Nd$*2GuWnQkoF8&7NWJK1}aG(QH zP5gy%8Hag^T9SGukthTjIp%~0OupBCihs}w$i84ZkV_pN=Z9!-GSKe$Y9>dciIQV# zuZx;=aedSRtcNNpdYFGn6cO+3#^ zqwRC1&&yb^vI8%A^=?Y*jy=K!WYkL+NfdY?EiRUybjhCF;*SFC?ErfRlYi;H(j&au zH`5O>OJlqbrZ`x|o40^R*I?WKt7K&?!QvH_zxsMSJ59Iu|LuP$su}=9RrpChY#~g( zWm}ZI!qf4PG51UGxI7iF|9e2kSPR9KtJ(~5!{B0WURaE^Kqu)C_~(WaUEdFwvHu>F z!Z(du?hg19Sh5t538v?iO;_$t&F(HzsC$zdL!-i3pzRshJ;8mw(Hw zPISK-y^1f!0HtlDU%K8eN;|_QK7D{bLRb%2jsFKE*w-24S(GRU8S^LuNX7qv!JfMh z4|o3u%F;FkldTz6f7><^zWY~bZ=5O{Azmby+iuF)O3GWwmc6Gq<-(Bg480Voh?L{W zuitKTgCaQ^&1~sFvhi*-zW%zQKVHdQ4nMi8q;R?1mCA~$s&@7M)o;J&y9UaB-sM79 zZue)bx!)P(;&;C5cJE*P`_(@_y!!4(TkR@Q6{^^M_`H*{e-LHvb_H~*Rki!j?0(BW z+*En?a0ox#hx)(ac=P**pTGODFpFlnh`r)$WLb!!(&rxb(8KpPZ?tyV+i?mvZ`YEiE-J;J%qmY#~Z1$ zJD=L5;r55)e@&GQw@|(q3`>s38=Hk1XVc))c2eXjEhed>bfPQ^S`2oowSg{1e1XQ_ z4zZ819r`d*;R6+Q1AkBLA-(=_3S8(}g42VhJuF9?5(b!HKAy_LF;1KYpmu2jZI2E8 z)ZVsT+xUj0Q2Nv=ib5!*X%##nRh5~iN5@ZpKOFfrf9elKV|&*})m3h@T%2>BZ>Nck z#<0hY>Zi6&BZZ#(ZNJ_a35`adN;Wz~8LVy~V>89lMz_ndS`;O%s{Q}Nm4h2odahUw@>F7XX1Y@{OJ50g)ANEA;% zh4#`zwwOhljfnfaj0A9PG-$4;`W}~H!U2=euB?vKU*yuDWv4J zJl-uyW{ofY;OR)wv}HCwJ9^SlygT~6pYhExvXQPto}>C>?a&7>Vd=8E{iqAgj?@CQ0KxnqdKw}@&ckH&szJKw+&iUl24{d%KS=J&X1_{mZau-N|P zxh^U=c1E?}G)=Gx++yBV0AX8I*DTx0l&|?z^vRIvc{sNF zKnSMT*6J`4dZja@v%kOpa8nvO`?ztr-7K|$T{jGtv5~8?u^tYAULWX@O3p{pp_`dP z-_k*Y&xV`ONrM;Metz|+#FlaMHOb)of5h46)DbEf#iytPoJFWl;Obhx?jCkLjTn2_ zc!9JoYlUNjJVnh_*-!8289>osZ*YV=fT=*j=zrn4+8`bkyg}*%6z$TXUR0>EAAb4e z-D`U7xCl{?M?^!V*D)MFYHRtcI|Ula%^jVUQK2$cD3umxw9uMCsvgp8&k#f_f0b;X zNBW>?$(3FSF5%Z{mJ-RzJbr|YR zM@R>FQPONyWh&TPX=zpQC^&RHJy~au77iz$V5r2Y;EvJ9y|2Tu;}1fdxVfI*_P!^` zbw$<_3Q-5qJ+xEHEkoDtTVj&%<-0oowUL^Ic*>^J(a#IWw|e?5_rX_CJf7!<;n0NoF0`Gty@B4m3cAxu-*2&(Opn`8Ia z@iVzoCX4FqcgTM;+UwbBo8&*)7cH8uCex8@_NMWx_O~G|(An(*f2|X_ont95p_(RL zBnpWpM9-1G39jk=#4!X883hejB0UuIW)|5*z6<(kQ;)nG#Tx93?6xHrf!%#h%TGZk zj0T#L7p$c1Cdl^Y20c=TQ);+-KD{_KdOORX6#!J8zA<}^n>}hlHgOoSYhd+ITz}e5Cb@6P- z8U2th)-(Cq9;cJ*ZOy);_LRZ4BYsN=2Lzy9GMz8x6{f-C*UG#7madV`-TFQ*R z=FC0t#J=A4f8QYwKBlO;z8_|Xrk9%vD6he^0WoPYYrR#x3Dp@Nh7<@SmOmv!$4@3B z6gf1&#=^QA3d)(Tahonh3<=a@Ji##yA?!KUNgV+ZhXWNZrU|rDKp(5wL$kl!Sj+RI zdv-Dl(Q04MTt4X?-^Rr0{brQ*?$jnPCn@Z>M7?uhf8DvTO0UWChI0d>R(bIZ=f*d# zfn@(V)?EoqHUQTUN)~66lBq;da0I^Q-gvMU+#8YmKPf{%#O^Q7 zDnu3ef5tCU1aLr!NiR?IBZ>vJ17g!Tw9}VT9)?MZUXT#In-U8vS?;)T#r(+!F%;8C>(B1}?GYmM= z5x<{v%5n?G8lqKe%b8_Rb33c5AXQ=ZNn69)f8^{%^F=uq$DMMh+&WGBY3tOs0)nua zi)j4hpKy+85!yK+omn@0SkAzvWQ8*?nDP_cP)h~a&vfcVE0R_Tqtv>kh#98qI8r)c zi*nQM=8b`f=v_SjhVx^DqdK=7U*?8^!On(^vPg__(gxLe$$k_j(#Z8Jp5Bi%dtK$Q zf9h)8E?zLCq*$B^ucJQsjwB;5AVLB%6%%md2D$fM3(q;M39BHig% z!UFw_&LWL0<9#MK=6N)shUxmnS-BYPt3rx0@xSDEfaSFP-N@-}>N>{q?4RPqe>;Cp zNSqhHz1hrOt|C^Sh^#wyl zsi)cN?_)(j!%-WA}{emJIvX~@)aTs2bb;ij+{O6qFMc(5n{@I2#Gj3sahTz_x$Uc(O#ARj!*~9nT>!R*%NR1p=44 zKAO@F>BNf%Q<(FV^3vj-AFI+rmHOp_={y(UEY=O)M;!`0ZPWcTf3}IY(h#t`e87^f zd@cMZ`QCWS*& zTeiNMj&-@vdAV*t3k%=saCjn}y&O|n2M6A)yNGEFnbH_?nZ`)h)eZkEV39go{lA4G ztXO3X%fH&xA?48gf1~T~{EF+Az)p4H9>uM1w3Hl;!fQ^x2}IzYV@L)fx)4Nn0a4FD z#bZciBP*Mfih)i{TGM_Za@9T%CXPf0vti3BVFny7OFb`Fts- zm+33MMbq0qVrk|}7)lJwP~uGK*8dEnfBnt3R1rc%IY5c=>gN4StP(L;{oS{N8goKp9PVd_MK_T(HuDOR}U!{Vr~?Q3f-f=6;Vi zn9*R9qJO$jf8P{|l!*ntekvy^f%VCBdAYdM!&|8M51k{CPfJO2c-*!mLDbT}sk#jA4e1 zwgRWcs$O(<&A7%&qncMw4cjP)^BuCd_N+Yhh) z2b9}}Ta$h$DFQPfmw;ITCx5kCNt4^g6~60NuyirTHAc|r#^#$W+lgIH?35-a%LfqX z89@O78USsLetq7Gg+tExlHvi4US9X>w|)=&{gv58@H4x@gn49kS)7DLQS7S2t6zVM zb~TLsxQjwt<&8d-b>PQ@1lFERrPN-GANhVw;D?#k&-! zMs9ak?|uzzc=MHsqA2*~=C`{aVTIYOzy%g)(%j+3#NaGY|!Vyify@fQ*!!)+Ly8|r#uDkgv&a=ReQ;DrK7=2YW z?`>*zft5{{C@$qpgAo!vY;G~zMAx{_AQTB{o&ZOW!(=vP@Nuc;v^{ftvMWl zdEZUtYNIr`KY1DNCQti~CA5&K-I*ZMBn_jCIjH@%JU4w_53$B~BQV1hK1b-bYbfo!Y6aW!Xtq`L60akfqE#bxIf4niQ!q37OwKbp1S= zbRHX^+^D-lqa8Z^4?G6+vsqtYF99_uT*2(MV7E!e}0fvRe3BwEBV!$ zv2XvlaX@uw`&;PGBT;JFs%_;Mqpb00uedLh$3tD=FSp=4Q|7M%iWL|#vN<-O0z}^h z!iY!Hh7M?VtQ#&}>xNK{4Un|imh`cGd|sX6xPX^ry9$gg0S*68$LHwxAN|xnw>7AJ zlon664qN{T4FA~!e^{G_xwU6&(OsAO0n?NMjJhcDtyL}ZTizb0M7+Y>p# zwY3+dfX0(#QJ6a?dy?O)K;*E>Inp|VhL3Vjis0buresk#+;Z|_3QbqmCHJzP(OH4Q zv9CE0;7ilhAlQLlSZ!eeDUL(7MqlbgU`{6jM}BSrZ@1UVsZ!=EKJV&k-X5rcJZenosC`=lHf1BDat1u?wu5y8TCT-ARKqFw}>t~K+V;jb3aBJFMfTu)PIezhiv1AbG z(zC^n&+V4yp*vsj1qi0;9$whX*$7nX?CwzBS&oi~d2abxm1H#}BI$}*Fi0^v%SjRo z0X%%hH9b4ISf!Iu7xUR zF+_gyn!>cQ5vgkC&<~;;|7AWxUCJ^vQj~QgCokE>L?I=_YhL3hOl^F|Yc8jQC&$Q< zUqCIz-Q2e$jBtC|`jb5rWljvK9XEU`~VUcZl$=*!o)_-5xlHHD2Np63+L z*9TxHe_g)*dmyd~Niw1F`b#*DdCe~^T|^#Cv#)1Pi$D^{ zyqLXgCSFzu0^{IJ$wi@vl010ZA7qJ_Imdo%06Fl>KiTV~0RR^`E-7J=u+~Gb#$D>H{nE)j%yY&(!^j-- zc{(y%%J%GsVDUilV|YT+bI;Tqb0!c7sz`jL4`ArAp|Ipe_*7SRo;0Uxq!1RO`1e{P=2txe!! z9NZ4oMqv0U2%MEWjlw9;6pNGit<(XmRx_YOtPT4Z@7R_3V=vsN&K+g3*a`_2x>pzy z20w7^PT1ouuiKN0!P6(()BZJca)}L-%x#y>EVOcZxaUb&_p{{9x#V3ICRRniq*x3I zDAnpUgz(q{`u$|k3Mk$z9qGXHwKEqqIQmjw0 zqk^|bezeWu*z~gxn7x_SrLHm;$KZYhwkZT6=l7h;jzLkf?b;u@f9WrJZAeKB3~p9S zfjJ5&r&OQBuuKu2pO$hCWha8e#E`eO~Y^e|o_oq$Y&0wOx4o+)gQ&eGzXLyqi#xc-s#zY*!Sp+H6-p=jsSc z#>sZU4?n-4ej>;ik_If^XwhbZyk0_#l_E|QFDfDfT#@4$fEFoNmZ=zVW!6%CRExH3 zr!iKA&S=G;pcsTAP3ds#tg8G3$;@2jF3i$mt{e1%5~wmVe*+8!DaVp(QfxzXOUC5e z%yZr$wtyUBx7}d`A+~<%yUS_ovN+8{Sh!t$EBI-|TjPUOWi5aR7`1`_%r9bztGK>b zW>Rrd3;szp%TCu>c0y)sNWw^0eeZ`xx5ybw<>DuDO*F7M9|#KynF+r2 z+>dn(PF#4Qe-NT9$zqnIJ?l?(tQ<6tC6xaq38}f{76bi;m*?bT&MzS;=p&SbHT?kB zdaCO3*9pRWf)-EXImq+C1Unygy$W{buXrPIyIoZRWmDG8u=&8KE*Xo#r%LN~s}GN0 zY$TxYf@LjC)1&%HPx&c;?3v|XWytH;-4)dLe{uWQ1SDXT9(ppApBixczP_4t zn;gWd*&*jT)@-#HgC>}X1Wo(oQ>=oNNroZoJ}pjRfnQ*>z8g#ZKLa5w1!(<|_rfF( z9C<6Gjze?sn{6d!y~a(JhE_8aQa4AXJ^Gj?uVcSg?CYdp>k6u94f|f+Y8l-^Lg>&! ze;ucwj;q5fGPsvr_L}-*-{M6)FpP1cb54xG<-xaa{(igNlx|W1Uv|!63eiZ@sZF&r zPtkeTTvt5kKU;cn5*^~EQaagN;on^}tU%`@KNPm53=vq&ao`7C%FnH`!|YWlayxU6 z10z>ju8A!%VXWy3BTRr_O(p-;(OI??7bOZgPMwL*H%sD2&K`xaC`fL-V-Cud!ijvh`%=f6)U2 zyJcOG?`}%K5JutF){x}`fhNj1LAt(F6_?8^tF4}m`;dDk;6v8TXxM-I!B_vi7WVTw z>KF9aj5UF9^Wh^g3FO83F2xGEsE5NDufDr`^*@y^fB}=zlYyZX1TZ)>HmL>o>OB0}-Gmr*gX72>B`HuoHv9~j|{1+x? z#(x8_a|1fL`~%F)$=((qFRmsmp{ReL1`rozQWFIj*_i_5r2biM=icAIbQCr2p|cdHhFWgkxa=m|B{+0E~g=mUeJV|Kd&B&deUb`5&{XtHXa? z{{V9S2Oog?9}Z~%ra-fQqFrrl6pU`g80%mJz{|L|$# zWcojbf4h~8EdSF%|Hbm(jskzM{6AgZ$i>Oh1E9;y_^%dW{@3$gN&o*viHO*Hcr&mv za{(CGIGF(~Y(LlmTx?vv{|l~(tCJJZ&gI{v|C7sq^?x@L5ag-H{lJjN^cGO zrZM zA61ei#;~Gu01{;++HQPQ^#+JMA>XF`a z0n_LrR8$eGO%*OVi@@z5Hcj&b?M@NoM9;!t$Isf^Ws(qnv3-C% z5i<>qn+F*%!`sDM2qq#e-2!Lb4`PV8yIPz%4pONk$3-pKvYO+DyoEUgg_D1C9$cuI zH9}A@UHUStp-O*UDk9STN{jS3uRI#9eo6rlx@BslZ6m6jTl;^9rx25#QxE z9q?(El))zSrVMF9Pn{v22pd>@aL0C@+<*1FP7A{dLiDfBUn-kgGh5|^jNY55oT&Ul ztt@_G_p0Nu-{j3}t6C0k6GMN~UBcolV1t$`%zQ_9fV4mz zEqUpeAEm?>`kBKt!e95I0BZb7kTN}hn;qnWb1o^EBtDm5RagSqB@O7)t$Wm;_nnj} zb8`i`NsYy=S%Qb=WB_xZ-Uy9VN2<-IGH#)-vgl%OT|_x({_TWM_(6(iKGH2)xQm9E zeq`rxguZ{8{-jrUX@8K=(~BxobcpK23cPhSvoEC@FZH9Tl^O6m;q*hg7jRcn6)&Sx zk~=4kNc&_koNr&${E_(RMTId!Y2d7ffu*p_Bo@h*5>chPBx{4RNWnpWE-Z6CsAA-I z(0W@o11VW1P=Dr#=gaR-c8o$i>@GP08=d7Ye)W>waHG;8x51T0lD)wuxEu>ss&IH+0&(qi_# z=8Auw1Zlw3yIe)3`0YC*?T;r)%bg_EAVtBg<0LAYNUC55iabOOm$l8W;T+i&FY45! z4hcKa;1!`81+*lb!oL6!Y8_GLV;+91TMCyNVBh(axXzsyWKd>YXE&l-qgq-?%gGu$~+tL2=t^T^4ua~_&VaV&pQA7>-2pG?8EGSp$um%o`O{O)z7@Z4}4@L~5peNJ57D33S4p9DsxVXkRS zQo+ML`gDb(Tokk^c3Hl9V_pb~b=qItWlfUQmP z@XP1uLvYvrn>ww%3`IZo<8CDmi~|1BE_qnWGHQkS=wOt~^$jW$LqM53xP-P;51G z@RK^i$zbiJCH1u;PAZtLzwcyIys^Iu0F>T*25KPoB^b(w&zg?C$tY8j9821A2(e4o zJrWs(IfrhY=juW0|5E-I!iPOztYu=l8<^SFPAxl(92=s#mXXvsrVmR*#QJ}vAxWZW%{VI4pHT0Iar!Y88#7bz8)z{?s z%Q~R&@JJibDw)+5@5Xfvdw73Z@aNr6mXD0djG<;xA4AXC9CqEcQc_N&+*u&~1^_G{ zf@|tOdqJ_Xor!D@tkhpyD6;s|M{7&hmsH%&l+jPAxu_Jho_oB=mb4p)&mDFv`(c?a zU;+vU0)&=`-qB8x1sU~N12-HdhGXws#;qm~tNTTYv3O5m%*y)1MnZpQ;_tnfKa;9( zl#Jbwkz@$*T(v5_ZAZ(fppvP=l*B-yu9Z7>D|A9P((i>4V2=*NN25RI$k}7V=a~f6 z<9FZm1L4PP>*3Bq*qG;LAx6UxeL8EZ^SJq48YA~Y?1Rbrb~`dszP25`D-Xnwgm4T`E5geAuo`O1=w3EP@e zbZMyoLqNR0C<;nKWT@m6U}&&O2gwryj*%&VY!@FdNKM86Tq~c@vVJ^2ai#_IO!Wh* zEy5PQMMXjTLR>d1iWoxBlVqok)A>v@b_TvxvIQ|ABir^k#Fgp2=gj1PV85)1>CyQu zek;!j37sI*5g8}{_J`>W%i>^KLY*XqDMehi3Wz*q#u{g8VSY{_+gB8OH2XWcJh?%T z2d_wtUmt3=g*{y=c`Ufm19IYxf`bfZ#8~&g`Tc&%ne09%CQ&M^-q~o)H`z+kE832ZZ9apE8DSY>>`SwJtIwe%@Toy{nq>5#iD(q?oVdJXQ6M7@U}v>a2eVmj)O?s3oI^A{(p18`O1r4<(w%>=iY zBxaUH^SiqCq)OO-7reW%5|O#U8@8@Cyj}+{sInO>QAF0z&O6Tv9|IRK!K~Ita`@|y8zL@hbCfqWNL26;5x z1-kTRbS9O5;0(m9dLzWu4kIa*Vyga3oZk|>RxHQpzRbnrA+^Aww{UdIr5^{Ycz$dN zTH};zy!#7Fi+_aS3k^NL`^$`yYGVU3$UThI&MA@nn^)$R60XpTgdJ=XZ-vmXJEC1U z^TmM^H~vUo2rhGP!!|&qt>sXHE=FQ{Ot`^`Fd2`3_Sf~Q*#6@@@T^y{2J2PBRQlnT z^?65gngd&hidQ@hCI!j6qLh>;(P21<#qgp`5r5oI;hz};ygA-fxx;HzIs!F1QFp=? z+dfH$iq20OJyno{AVfLSA0&8jM})_KHXGo@YDhv|kKEyQJo8=s1BSZeV)2%k)Q2G2 z52)3D-N!+;Iyq`s=f3_X>WF}luX;n+)7FeSRoh{dYLk^wL|02w%LN@}Y&N_i(P0YZ zeEB0NkpT6)nT3M^--n<$-F2a-@p)- zi}2B@+HwPWON~u(`EQPm@JcjMYJU92L}R^g911>C4Z?1xr|(vbEgF@|LO#PIwL~_w ztT{BO!KN3mSPl;xWJ~!hSB}+!7bieYUKwp_1F=P_)v*m%Ho~D@fOZ4KP#dlwcN9~9 zz(-j_2YtK3(EP=OO*=|gX45xj;TnMc-BgBtCpFf!0dq+xxL=_75Pf?N`sPb*ltLFr z`Vg!UR8K&ME#_7i@6ODAp(#Zydh}P)O!6F;b=j_QM8G|W@TZi}TMv9ZSh8;x7Q)a; zyi^m64kRVx07#479W4_Y;&>WS@Dz`KNH`0-%wc(`HPIgQzu3Dtv{9|&nkxz9jx6vIQ~42=V3`!1 zt4;Iho9o4Jii-n&yerKN<$0fixI>kSI)vnQPIx!R+`= z$IAC2sk)J$uTu~=al>8)+lUK)#Poe_=*qQHYQU+nt1%q4ijV4nF!UJyA`}>M!?V6g zS=1L=@Q>tFZLl0Q>0#4}fe4hc;l>=?rmP=!rZqn2(33+C1$yp%twd(cQS9(25Tt?Q zZ|LgC2o?Pl+g*zV$u8+6Or5bgPXLaQ82VChyd93gldf4_=M5vnxZ@9hG|uY&O91Xj z!^-pq^vO_4ugV??(g!rviu2%6Yw$(p2EJ@;(Wx&W=e|s0<7rTYhtC=O7KXcoyQ-gP z<>V+g9AY))wR5-0jZ8&0%29?g&SC&xiBmwFVHtja#d`FnW!N_`m^PqoVFacp#jv4W zzN1$an#X|qw)s!dVz)+rLUhx{iei5tD~(^^D|QfELQk^+)_4U?>}rDMqjF{AqJeD| z>?NyeS`9WbDn*hx)1XdLQAsHU8VpK!P6IrZvKTL~$;Sm`EI<4c7N-X`8^l&Y-`;At z#~R+5(QmOQ%2>H<+gV>4`)JkTy?TN^?TI6gW6v9=O2fGHKU1iG$~Xn`VPD>=YqVpZ z9(17#{1Y_M&lK({j$@A1kBmk-^b>Uz>q3|$)Y10D=VB{exl@*8%}8k%68vNF|CW9!f@zOk@m5kh6#Y}Kpb6ROm`m>BLjyjWXT!K-vA%4Abpsg zgKutdruudd86*FH);l40DglTP_qvkgbOM(5xW^+yRnb7HKLS*4;vD;Co!qVDc{At3 zC=bZCpK=`RW-O=64r{GkL6LH;d%Sw5-#gA3386g?ZgJ1lCHeaRI+kNB3eWI5Yiuo? z0doBs3`IuqP^rHx*a54Y_Oh|WD}eE@T3(XYBW3zi1W_!1sYgp9lkb;~tXL7GHAZB6 z$$?UvYwlxWEh{NfgEn2HeiSxkjHDYC;V~TnMMj`Of6H(us}vJ& zfWFCR$iN+DirddeIUofc$GMSI*3REnYdUiix3Av1=w^37-s<-=vJS8#x)_t;Lc*md z*=YqiM;rBjk2e_17tvXP5Z#4rm=8I-Ih@_8K9yXCy6emIwgt?BVaMa%x~D@=+0yTI(fhMHmlL0nV$(b!QVx`WK_AiG%~j=y`wsg0L8)B3UsVWiq3 zi?W}eP3_p*!yNZcox!k>;vCBZ$PyLRPhLCPrKItHkd8^~*aux5Md7O3l8||=i@*6C zS<$^%WNNNnx`P^iiXVe`g3eWnnocC2kGzlkka%gWBVC;`%3aYfd6%I858B!cwpM>Y zyU(H3B+dw+hg$f(3Sqj_9wDe1TLzD2hRxBRn+u}H=8jQoKxj@AzwAWllzG?P*%hsG z;LOH<7LlpO8|dga&fGN`R)9zmU_AowH=0A9*MD*qp$DJK7go)R`C(V7PfV~+%CS?N zz{JP#b9nu-m2=0=4o*3sxqJ<=2#8KGnRb~hEiNjHUm3ANpo#pLh2~(%6K)DZgjDQ)1Ebmr;*ew9*8m8lRF+UVh9 zAHnr`e(vs+u{jl6(HY4J7|$Lpu6RWlvxkNld++wR3TzoKx3H6EBaSN+xm#;3!Ui{g zUqtAw@1miC#g(BBf!;(!wCa80IMJ#X{-nvpSj*LvFyq*g|gn?UGG!%;|4*S>I}_V&YbAf2ZdBq zh2SJajvm3JfmT)`Gfy;0kc`wflZN7da@%+diyc*Psz179)f|y=Jrw!mIyw2xw&T8y zR{Zp76p~g=EoyiN{pNNa^&m(8C?h8H$cO||+C1a&`;zgHf1sNBm$b3RAob4yL>fNw z@k`;%kx3rWLlK@_u=gO6wRA|jYZJBWXXp*h0$pV%H9XF>sxTANQP%O_M)hrfcS_Ne zJ+jccQ6%(Z)C}r$eA^)#Apn?=l@~q{)zOUl;_>{bqq?lA+-^y@a_JA3) zp}s==+jK3ST{&t}nzB<@kVZ#;kMEB<#EG(rH|oERWuDiwo?z%CJ!M?YftO}oAZ@p& z207vye5&FS)WU>=G9zeeuV}%l3K>Ufa$fzF%-QU2V2a`Pn(@C&i}mqK^@=IRr2dK) zr1&|~;s^K@0S7!o!BsreUZABF9yNlm z)GvM-ljkBW4m`lpb^0UII*MMQ3mEL{{?#uH2W5+rDHuj=ke9Oa4G&>nER4V|Lg`}) zYyWh=tpz&BANGlVFv~M==S`zS%8fi}_}76L6XU?qg6o`|`kumGvmh8ae1*?@N4b z<@gcw=UOCo;83yRrMozGg?w5gxW)1q3sI3MXf~}pv~ab5WlSW~14*6p%`GC62=Q(o z_hm&bhI-+*9D7Xz^Vp$8nP3_sQ2jPQ#u9x(7d_Qsg#E6w8j|HF5!A#h+r!@KHE%T6 zidM+S$?f^q8g6exV)0kC(U@g?J`+{E&#nR^?DHe2II zt{YTsECx@1Z;a?jF)QWna`VKv2~y>xt@k>AF{GIf+Q1(hu&dtmrf>qd+vswsGQ5MW zf6A&Mpsm%Lr_^4|WFzvoQL`WW^Se}N1f`E(_UT%h(ZRM27&!=OunZG=0;_A&txxA* z67W=3^45o)AhryDCMBy{9L;(|h#hIqR>aKe(fZhbuA8y1v5juO!d>N21(-(E=ODTr zJX}XXK?v3_xJE>@T~F6*@42(sWIish!)pX88>ZbdEu3vUl>SsPvg9!EZBhwE7WU2@ zZT@qLJ8>=OTBuXx4G%pCl%+LuB#!SbcPGa1aFOY&(YHrAYFPQOr+PIpb*}}kHa#a+ zN%GWxqG1-rX_#3KWgVdOF{Ti~@~FzENbzXhyKoh!7EowA8Tx3}!T~hlX)m-(eeem* zTi&6Y8<-{1>J!Rz68BRpsHf?#jUA`Iz+!i`n*w_-aG9qt=%IYJZzhDS-s7!jr+59S zJvNZRX(SjJiz#yAz@ZT{HV|Iuy0vGQ<@Gdw{Mz6Prbs`XNTUYy^!e%5I-{UwY3S%|Ky5pjh*jZ(FHl?ss6?!o##Z}l%H}g{* z)-(Bf?O+Gao)Pv?CNQzS1iVL|j2{dO<;v1e)2)c3^soDl>A0ajlQqd|Om!J=cMko3 z*}S~V9-X)CRi7qz#hVyAE+}h#qX&E7O#<9SmqBSe1|@NGW#@NTaba1?#yTg+vCf^i z`3H>|bNT4We#CjFyItJIm?m#B6UFKgatt5A8r!Z`k^N5yE)JeXoLAy&7`HQNZ;4{vFWbqu46>i`;a) z6${pZD1DpB2-cJbhky5bFdh`jpUkkFmA)+hK+bNnAy$G*N1Qs2PEfPoU$pjnuGcFL z=aqALi%o>z?N{*dmn$qJ`y`})L65LtZARc1uQGNMJ*%Z8A=w>qGDs{ovDSf*El)v+ z5-e0I>xq(dema9Nl%VgAH++4=EBB`pl&Z= z{_|2WLx)6jb}q*~5Jk!9V@I7Gy3Rl9rT?x}_(HVn4impByHl0Irh1gWd}`W6=@yTc zwaSQ8Oyx7}9d)^m68+Z)7*>g7VwiFTVfPBK6{Kx3B1O`G~cN%hhBTHdQ-OJdj>CR`co&UAM=ubT~kN&|J}O%;?xvm zMNLZJQOs{Fh?e4nqrTm=&#DFhd8fV+f-Qc{i@=q~IPUv89)$)zSll6QW6kz`k>sl` z$@Xb2n=4C4^ggs&Pb>sndoIPfYU0v^&DLWm()LT~Y;!0h(@au-dQ8`^&@Zv?WbN25oM>cex)iRrts!Ncg zb9FyQGxc*R5)H_IS!DB7QP5XfU~zYQw~vA({%yBG2Es=;kQUWBHBl_f2-$*p1kw|m zG|p?}cbWG9({S>;+KSI;lN{+=OfA=zo=YkOI5+CfFB1nz!xw>_sc~pI`p`W3IqPr~ z0^E_=Z5-5U{q0!}8F4cH(Nvo%Aa5E?1glw#0n-~uEUkxswpjVHouMbxLYA>{)ger^ zrBs5H(8rvjnp=5p_{pITVfmybpBC~AHfQ)5+FMW>zF?F`*ct#imZqtzJf}UX;a+Hr z57BKF-gZF8#a(F1fLU9_xCU=mST2{9?XdZV84bNrjd)w8=ti53@nAkyJgDO^M5|cV zNU69n!wbKEyo$Ef<@EAyporK?p^wv~z4m5GsNu>jHeWR(6pLNAy&Kdw9smXF6(F0Q zXiyF5&H3WhOB%^6-MaUCK>ixV>lF=4_;U^Gr_L`4>xErKQqm|fjV9pWO zMMjKm0-b2-m&44HFm6xt&Gh;uG+EZrQ;;=LR=08Roj!SAK0BGuw=Tm_j`2{a0!OUC zwO9!r1Fmf`m{ysb!0qu|rLZwl^MWb)Z~Muc<1uRJC&b5GP_c%X2AC-3pKZUN&hAm+ zT86fNP?jOc>eodRLyQUGL336ob56-!=T6uNcZwqv7-O8Nt~MD1WS9T<9qDD~R~&*C z5aZmc{Y$`EoFL7iK>|+kT*HbwnhQY5Y@etsFI|!H)jS&2aEk4pQY&wnUSnNbxLK`P z@EL+QVk*R-|3 zo?XkWiMiv)Uh~RyiTtdD+f#oRmqdX*j zeIS$gSMJEZ#Vx4iL70MW0b)pV*?QXOSBs*zHv+|Z(*x>P! z#ad<;DsLFPF1vce+ce}9YIiQ6(b-u=jwj{AOvS8ww~h6M5yM=eDy1(5W*6ej8auu9 zjiBCbIgBXOruS<@p9=c6jI_Kpudr8tSf+_SFjARoa2K1B%md;Nn`0s|nK*E8sYAx! zBqmmX9f~+uaQWJhQe0%6>lMIo~cEny;PG33E28;bZ&IUE3bk!2m?evBWq()K7Y9(@NBk z=FG8H%;+KUT>s(s5hN+d?F_Dw!LUeJ1JT7=U!xm3?{LoKYyuWz&t)}N)Rp^&ulbMvW=jz~vRV)<; zU3w8(rFfGhHNYWFoULEs!7bji^q7;h_n>)Ld=;17pQ=O1yH%r!)XxZiAPM6<44r4N zNh+zl1ir^Cl=Q>UhcUnhgf}VIz^U=8vRCX{z6@^jSDlt#H;&g8XWj0eQ>qh`2p<~d z`3rxWnp;stt)C=OSin(Mq(35f@P`DiDh0_=j7XqzqrNwuU8Qti2HqLsU5NV%7&I94 zi*+8oB{#vU$__LJk97EdJ%jP4IX7i^IVZULdu~MNrJcBoPU7_f1NFpZNec4f(YyTn zTG5(kTtath_cL=9;~i7OVI4wc1AZ5nJYsWtPJ<19{Fa27;1wqEeLwf4V;J~iOh_*8 zhd!>Uv~3%HKPDb3?te|25kLgdAxYX3%97lJGk2@^DQUTJLh1{DL!f8!^h$GU2AxE3 z7kcNT5a@-r%q`(hR}57?=H^}o%^Jsp^!8G<=(`G>Kol_EuJ7tI{=W8hs>tLHcRN9| zgGR^J2*2VM?D~qjGQfw2ea@D6kDFszZTKRGYZWDR7nLOL+M0B=POkrQVnh8s9KvzN zfQ3!Lt|N8sx$1>~zy4=fV>2S8&ceX9ZuGrsCVsRvXwpbx?d2B%#fyo;tUSTG)FZO` zdwQY!j!pqWhT0|r#ktm}`k<~M3+k0AX5KgX_Vw!TT~33j|9t^0d78*U5%Zned_H>Q z1afDHH&H>`%!WvlrIl|$vjyMG*r_Hb^$N1`RPOQiG}{D!*hKDIKf*$)M`vTsv&hmVbEhJ>!!zzz7}_(PDFRug})p)l4^KD`XAcRN^ngu1@GJ5pAki{Re1 zPX?^y@O^JZdr1*W!<5f`UQu=`SI_$Iv)I$ro@#s$=O}`}W9; zUe!5RA@JH)9H-RF6+@HHX-Uw$pHtQ@2{p{HAU{7}90zti!ijko;xS^yB+EeF$WQ0%o(BwY64{wuH z1O5kp4D;flW+dHK+aRB7^Q~mrEm16f#es)s$-z#|2sfj7bPC6I-uB{Pi5q*;JAn*# z^1Q8Zgb(!8D<1KRlN7_xKw>+eR7gLSWe4%;Y*AQ=r~Zr3BWbpZIHY+w1o`p?2O zzKLOJPKpj+B6v&VU_d_c%<;>%?xE?k_DGr+!_w+cjlWJI*4?Xa^crR^otHZ=a%3?5d7msH!-eip=}B~_5p1>kjmCwyJaBx z9K5L^Mv3cqIbvS?YKiZ03JSPwcGN{)zd~BsrzW0a?~K--gFxMSwT5x==Pc3~WmD+V zgGpEsx@3f-hm^xx7cDSYznRZHFz1rCV3z^9K1R%D-for?hXJ)oYJ4Amx$R|{UDKeF zy_>O=0CnWFzt(_s&>%J_Vm)rf-2;d8)#ex!IAj}2sMYTa*rd?J-9_4T55PZ9SGZhE zoDc33RN?j>kwq1xRanz~Gw(-ZJ-1SlfbiY2uK+?xg-7O~!jUbe!;2Boa@2ShNU=HG zUWRE_c#*D=t*f2-VRgfQ=x{d@Prz~%{ZQMf2@NbaWzl!72R>Rf<8Pfs*^v29Y8niE zToj)JMv{c(Pcf`##Na?AP&@`i-NvcReU}z*+mZ z3?k1nL^`9pK`RrCRfxTf{@${jQ&+VsYEL2;{a{I$X;A}}HWeg)L3NTF!4%KyGqOoDmzGe99+KUx-lUH@=&g72H*qLW78>>f>Owx7xUVYrqF6Gl-_vw=gC|6?WHEbo>I zQ7^Ek@Ym@fAIuq1m~GnB-l7c^N1h6N{it9&Np8>&tUo_#8EoSQd&Y(iIW(xjY!b3- zze%&iU*Fk~Dw;W*C$hi_`*_u=wB2&!M9F(M$QWQvDOWT^4jWbYgco018UXpbInwR}k%4O7zZw z(`r3d`v=m0bcz;7N(*L@f?ZYRxuCMv4lKgFJomO_o3n&JT9;8@;^{X^QQ5~sf$C~}00qwbAfiS{_^MP>TSgc7Am7F=59}of%Jf5q-XgYQ%OjcHVdZ@WbNS4A$eR>bW z?E|vHM9GWA7_y41DCpaFaNhIYt6bWyfb(*Ld6DgZ385GKU@oIlGZBAllts6#6<<&o+dwR@AYP;r81x$rH6jZ{$rc z1y1aft#UYDWb+MsMn1#Ev-rniTYlrsrdOQ&@GX39HEffNIBAsI8mTcyS~fZr`iPSM z|NI!xN0?V5z3RZdvtx+FLtDgi3Jybm@CWM%#0;--IaSorjRt82PMi6=BGpRMXyC%I zY|LXJrv0O40iUkR-T=-}GGt~*X$r<*?AA<((B))fM>wb4htq=vJ+F3=j!dPTWl5B6 z5~fGsgmE&ml4!LnLb#iBOM=&xo9W>SI&YOdXDWxz5hBBtk*F+OrSZweYFn9qV&+vm zcsm2^ZZXx54B{SA-0VzyJj)H%p%ii2Aw9|>=YBViV-E&+6~~6fXt8TXCPVDl%JYqWEcy`^y%Z$VxK6^+5Zo zqgn&PSQom7uy@0>`v@bJgVw2>%6|cqhh1t3x}RnlSoGUCTkr_x8FA=>j?qEbc@ZUl z8?4EYLgK<0X5*{oggLf<${7TvTe>9F9-TG6D04fd3Dx9;XOdC5qlwF`ibM`2Fq)lh zsZW5g>1j?9&jRi8L-{4yw90{{`d7BR`-AVJw6m_w<80j)M`4zM!<Uw&AGeB6gPmToV>4Ev zzU#$vSV4z%rFYJKQ=xC_d0Q7+P(Z(Qy*D&C8CxSRgR^oa$OI^&IquTkLxRA!FR9O5 zEg9Nkt#$;wJ+qS435(Wdd;U-{(mF1+m?G;Es<_Ux=5d%DI!jeH@AmB-8KsN)+Qk&* zZuPNRrO7DaxTJD_lEg;M75cyzT=dXldo3p8HMwnNn4_pUg|q~}5@gRLo7`&pE3xfj zsXm_c5MInYCgGGI{U5rUMl&nB#6wg9H%PJ{b{v@puV(CE_+0wfM$=Z7?{auNA@1a@ zW!H7RL#nD`yu#HhKtX5P{Xnxuq(OY7Tf(1tN+K5bGayQTq%zRMiwzjkxaYxSm3H`` z&OaG&B<$7_y}PJOpnlbLHs(sPc@GOw&lwokG6rI+HRSZU@W(dgm&iY!Q`SaZm4v(A znBuz+esSq>9*ng0neZrm$XR@H`C}|?*?cyBCNK{xj_N(+ZF3+_^KI~~av*iXVh3tQ zDH2Ai>FpKxT21+MJ-&Z6W0rwchbm*Zg|%>bda%w_4#Y*sN8DNxk(58VZ399= z{R*4oL-%QVM=IGW{4!yW)3~Y1h|cLb1Dh+b+PcpY_HU%t;Ds{Ka7Bhe&Z$eZ+H@&D zbprHrCAthSpLRWx7-uYkL*}7qd$ua5E!hbz8l?4qghKXE9YQSLg>}Pm!(UjqCXlik zRSC#4Mtq(=l(JdPGwpZM@hgz+R8<%97YVJu*k^A(z6}bkY_x`}u+zQpJd~&1zd*_8 z!@`Zvej?p7J3UXsZe@c{r_uWHvIK|_hSw(`ys%iDs}pVa$fugl_?;9zFI!n2o)}Sog^z!pEmw#RiS#;Og{vk zcU{8NUJFLX>qGqmuaKqidC~--pf0L*1by#+9ol5BLA-y{PWexk!SvOEklJ_hh54KV zI_r74T?euo64RrYh#*6JE}z(~#nE0C5}>F7;p)qmMJSS-?rHEr*buO zOlH6Yk}Dr0ajFCTe(!JIw)32j3g%16ifSTg_U6Wz6g6f0E71s^yYGmm^HNHs&+&JE zlP=t15w`T6pQ^T`*0<)>P%JeQwhZ?QDOrM*1 zNLZDqc7zTW{ETT9jjJk#0j%ppJy2u4|rWoDjj1d|3OIuCNxD%BCo{p6S2E`z{-2;;c)W$etG zOqm>8jZe$V#T)Fipt6Vi0+$5y*C>8J_9HR?GTfRAPll4IK;h)v+oOJil_U8Gfw5s^ zdQ3#DiiX%kC(0&|EM38p*DRpoP2%m3fxAR;CQ|wIAuD?>W(qV zXETpEf0;sCR6;}U$JT2)B5rBi8OAZlaNXo|bzaop1Ou=u5Xih+(~sNj(?~Y0cJ(9| z4#piLM5&lQl;UIrokQSyOxb;I@QFyy(Y@rPUN@rnnz6-WljM@-Zd@&_JvCMmq!Yj z2#vK;?!m<)PTY9+gL`t#YeOF!*P}O>DpVG>c<=#uMbU;g^f^ZSGWar2lgubjzA)OS z|30E&UBdViPs<~JcDv*eDcgHIi1HW4j%;Z-5*s7b&vA}7aq)m*S0`4Y1(19lBk}!| zu+vXZFa(D#$o2IB3I}`EIF2{ELOgVei5FDfNT<8z8`o5!=-(PiR;?Nv)>#I|Mj` z3V%Nct8`#gQw{<}l)k?a0}0{{dguK{gSCfI>VH`c4O*Hi>3R&+M$_kzWNJYVi6FqvLb=S5GwVVsl zTYhtgSu9L0T838jFrDgrJh?7FAOQ8wSRU z&(Ez?1|*FM$FlDE2mfB1@mZi{XU^}>+)i6%(A?anD_okDrf>Io=DQsaX6u3EmxVNc zmGt0>#p(~ueZKnXhO`pvV-?Y5Hd6~#EC9+U);IariTSUXNuvfI{v#aYOJKZuT%_8l z;<(*_-iOz{L@P2xhROHBM2DzWTe8SHWxpI<>gTV|cz&<^#6`h6S`yE0X_#zlFfYlp zB9*Vg5U!2HYdgZprax-%ckoArT6_%q zAX;!VQrBRl#o35$F0ekEcGOTRm9R3YmkRlc_$bE*8?;sjTC=GEI}41ncNp&7T#bS_ zx&q?&y9MsMy+ifm5Tp>BMqJj~EKAC`aY5QeN%}G`?Ot?;S8xeI=FjG~X7h-DTxB8DkFm=2+S~TN4W=bP1ddV2g{9mak~b7y=`x48|s(jP_cd0iBd^>C`dY^rj2k}yaVgF0PqrlXmEV$t;*$gzlsM$~xxNdOc-4Mv7&OP3cg#r-v=;gYjw zC1l}Wt8THf7cJ{y#R_h$yoptAzL}A!wnikPz;bOCPZViSoJXW+!99oKN|H;H6i+9# z_P#Q?)$}&kL*$y5DMlxMSrT6ME|p1f0bBFWA>}Pt>bla!t>oFv*8{>n4WkfGRQ8HZ zxgYV9<}qEE|J^9@!a@Hor$x^|5^XS%*&h-eZ@&W2ddQ8^%6MA?R#qm`7{IFCGxKvPHM`e-^2NF^4x_pIXb{&AJfke7EdkkqUEC>hDAx~di4UN zj#p9axC3y}IjG!pxCOBzuVZB(1jQEWxGFZaE3Z-03iQfCQ@og{E1E)yl#5n*ndvT? zx4uj5-v@`q$CqRgA2((s>a$N{Ux+&?I;YZChp1~)PF@nCD?mY7 z;DSgCfjr57Tn+uZe7GyH`5q-@e^h#&bAyHPftM$m>R!RS^q3JJVf@2em=s3PMfOOOk6maq|CVFAjrxsy3m-WD96-(%46jspbp z57^=S;XpCUy>m1bEm!q6d4uhql6(0^EdCR#y_+3>ACNa6_43sht=rcujdTU`oEBQp zJ2&EPHC0jbn06}cjO&Ki6;1%Q2-nuPEB60%agMv907|l6wr$(CZQHhO+qP}nwvD}P z+nO`Ef9{!A=ya!2>H6y4aTQq9{a4e3dlx#NCi~M$>d>Tff@U850dYF}!0-AAtu2aL zPyW1r$s_j!QQtUtwXPPS@x_WiM4w)%ISkiVz1PPJm_CB^S7(bhK)!@W$fo06&t_5y zhLX2*uqXheO!=JS0m}XhCD8*K0t-yI9iY`f>3n7BbCi<8{@P1LBzmcl1EB&i%7Bte zDfS-C(Pd5R!+A4w<~KL&feG|g;~WMV%?kv7sb=R2F;y10$dKZVOWr6wt5hzP&fXp5iW?bs?wh(bZHcKv-#|H!^yUs05_aNX zEaxSBkL0|G^8gjSF=oe1?aSMyz+3`-cQ!}3N?TJ4*d7XlrXq;pIdk`$9EgD(N?>e% zzef&Ng&>n8|77;4R1vCr5w}V81xU21Z9sM=^Nx$ypJze##u8<0=6BRw+dBt?R#%`7 zoN#=a+`}ND96&)(r)%Wz;60{sm`L6-ZX&38pw_Rh7zo z4X4?0bw18Fg8tR$pt&IRtw&XVV(RlYDGoD9(ruYtaHpfC2FmmNmL$5%qv+J?FeryZ zn7%A|6AK!j8holN=~iRKG2iLwD3;18Y1cL|IQ%NdJ(aVd^j@565MBqb@`nLY$uEJq zj;AV*r7LRL=OiF$xz)%X#AG2rmTIMIlgXR95dc&JoB9UJR;gh<=|LNRK7-XN3=CHn zyi-HpW=OIgOJh%c2^>fytpx}G1ejT1JhAi^zIQ>AIla9(w*4c}K8xxx8k6})t8#59 zby-w5!!0ShlMw^K=I&FsomUmpuZ43yTSuzxV4@UgWnMP=d^Y_S6JwS0a57G!X;~eZ z(w9Gw5blVC)@HMmACcF8ULc7EfVDFI-Rga_T!acyGNNd=(bB)`(ga8=R3^u`^rkn4 zU?YVWVR_|gmq`fbq?JQ&ela~5yAX%;L`AQI^c7ZPGf$3UV7X%Bue~MI)It>V8I;!m zDL%ZOUiM`s&nq^$_HNuhVQZ0+^e@`@^ok8hgYW|0g3J|;1Vk-={9YemR?xWCR08KH zRQ-oGtEF8-<~Zo!>7PaC&HT*$o+Ob(|KnxGF#GwSWR;YYNR=wst`*$^GI`f8aw`Cy zr(2Rq&8k;=ytZUVN(w%EpNGL>QE`ug;ZaPC4|#^E@$YtR?~&4l1e>|d ztL$A~0|&-42KPJD5uY*$1ID=)w2OwsND~TM+eW9&A-zj)Du$l`JB(?Z zaC)X_$cy|zm%bZO@J-6niV6|yxC6pBxj9x3{jK*a<{#>RE1L_efatXT81Pjbj3ABG z>~C306{1)1P>6ih+cpFufd8t3(}tj1-nX+Y=FYfCsnjRy=MzS;aLEnUhTGdO+Yng> za$*{MW24V`_PIqx(&%cJJrGk18|yk|RF2xwGI_?Kv5nR?*dk;D))-%^SA2clRxc+o zRWT_Tk|dFT^#Gfj=`*rnS-yE|+g=o?teKgO?%dlXsxuE2w8lR$goWWotzyu7XAAuu z5iL0&d6<84%))s@0!GK`C0SF{+>Q4mGOa7YH(LzfBNh*IrqOM`iNLI>c52O|(3ezs8p21aL%5=o&Q_~AE63(PqYu-=Cf^F29(^n8G$!mw%G&Nl#ewd*F3QAmZ}wF zDc<6LGHk^7GBx^_2uF5nSJzjXi@#(CYb+y-$&56m{eqd%`J|i63_RUrhO`D6ro%9> zVFiA76GC(Oej&aRi^Y#0-&jl_&_51W|wTcp;-v7`|a%r zixVH~&3*lQ3_|~cJQ&_toc)Pz~;a7SE z;kaeG)5#^8Fua-)B3Ys}f%FCN#mzDU{aHiHY8*x9 zxJT&Ul^BNn18z43l>%Gr43GPv%q!M^w*5@T#}P%$Y5idT2>uWa**^f%3viJ2-tQ_( z=IITig|oRFacBn>V2}L!Y;rhq>hO+%pj z9(&&88;=}m`RK|_ZCfoV{8{Qn>@B6Ae=k|aQg`SvQ_^d+*bg3Xur%>f6W!JXDDGQvtLARK~H;7LOz>Sqg(OFW)xj;NJ2`W0M;+K}9rK zm-rn5Wb_7Lom&vdk71Avf^IdF0;OCcQ&P7jjt*kjkbrgYt%O-St|I);e=`%LD6j5) z=WF}|;>kem7y21=sU(6b#_{r?BSns?wlJr%h;pq$sz>bgTp$VtdRzD!S~G>nH&w`B zGp~N(wG~=fFYmYD@V?+?gRMLig306Ce@){Fm6xtfJ~4l#tbE#u zTus&v-yLcX+@OveAEZB? z801AZIO3+P-*z&l<>CQe{ziIThv(Btz{Q1Jm*jWi(j3-^(8k17e=*mrw=2642wf&^ zf})H#)p(qx?>i^aRsI{OGLiPYk8y%Yd}U71KW#p-s%f=8F00?(hc>~lOjtFwa*(b1 z9N8e5A!Vg2f1C?V0=cQGNZjFP(2KD2jS4Pad_~T$Dyysg zV+-ki4s0adTH)Idws&GR5naN8lN5{xKxJU~07qkPVpc{B9eQLxrSk&&23)O3g|8mFR+2t}(=^`G|0Bt@6 zsLSb5Nr5bvx081DyVcApD{RNbYllOTogEISm9TCLzblC)BU6L@C*fmlj?nXh zG31AIMu8G2Cx78-99sc$nXLDAV|S(lvUnsoon%Xwf7GW(wzwbp(ceH?0aM32ERO*#S6+;*~ftI%k$2m=V|4WGx+T0T_V&Q8J2^_ zB3m!3fBu?RPw8?^bB3A*0tHl?4$|{>k)Qm5q#9y^^s)U#$^4RL?dWMntYw@iNA6K2 z1=sp<+<(-<2Kv12nc7SkBpbfbGJ9+ajcAMxQedTDg1)c@pyuO~h&-w={<`x4O)%*e z4oE#rlUy2@01{qA&W%uir}y3rJNF1?>L>yXe{kO|?*?@Q9kqomZ1C_C-|#A$G!kL; ze9j?)zo|#lG`Rg+1EjWesU90G=7k9L*sxi0`0x5h&2|;mb`%s?qtR(V#G5Q$Qo;#s zC5Vu!N32VfxLIloTbJ?B_b|aq7N!)G-vZiL5x}thL~+l78%n>98JG{O-I}QRNc`V* zf5qdk_qh$l{33B|Yq_SNAFP$bR$|o-4SuUGx*fR#D&jl;#s z^6ikjt?VwDc?oXY(ln>R+Wp%7eW*t~ zbKvgnSR&WKxVpKpZ`pWpNWDVa$I(izv|S`+`X-~KR2?ktFWYiI1;yZ7j;Dnn(-6LF zZz>Wq*q#i~P+BU#j0&8msM3xMQlAYj(!TzW!L$gL;;A|>FuiIcdYM3f!W23Ff39sI zcnYI`1b6TC%@UTx5?sZ=ElPrjesVnEp&Kh@)6!(x>l#rJFbnR6g4o7j=FD&q>Kv2Q zK0Fu(4iw*wur3j9%tnUR7sf1-NSfod6Sle*0L-^>IeI22juh0*=fLJ{5N1>Vawx5Z zlU?|)@Bf*hs|#qlKU&bj%XTp6e=Id9(t$Vnv(l5`#On5L&^gu$f4Qy-KpX0;a+rq# zfpy^=EnwN#;7d$&epUF9r$1ND6gJ^2iFE^D z-VS%_=A`xh7@Zy{$#e=&p=&Y~!T zm}6ul;n8Vy3@d0$aH?kFQ%9SFX%)ZJ05ov$s|VA2a)!vmWRr#?xv3PB8d}L65Oyj? znTN&sv^Flgw49T98!&s7`T2;lIxgv9!zQWab9O{iI1gz+g^4bCEoBX75{K2DqNb60 zpN)sltO7|N{Sha3f1AoDe>A=fs*|ri*c*3Z(T$L$NQdVk@0RwJf=m8WEe@>AY}^@` zin4ug5y!3q4-*ooPP?R?!I7bW5u_)9e}1tnhHr!EBTQxW?J{A3 zFY%O^l1=n6ffwkzR?w20nq>l1If~Q;Llk@=Xe#xJ=4Aq@EkS7GV(EYpJJ5Le+P7TA zvD2Q4E*UUAk`@Zz5e=p)!oVo~g-Y%_ETG_$f?@e&c4Z zuP+^pnu$6*)D=0E#<*jR5cIi5z3{gG*}*Mdl)J~^lGo^s5u0q;!RU=ZSwS$z!_m=q zgOdD0e+Utgkx3-D{ccaW$?x~N!ifv^84^Ssq7u0mZBa>BXaV>yv{KQa%xA1l$3Idd z8`$ee;2gGT%9#B17(zqRK?)id5eRv>=O}s=RIsuu2s<4L@R&Oc>r0i?!n$a5i15O@ zZzw_ob}EVDuWc)Bxoj~D%jv3HrJPY8@a?y~iMp*#6fz0IH} z#;|)M;R(qi2Td6KKpqda-g&=aigp}9wjn7cR_)=&3Yy%K-AcU|Qs`g_iKnZ))#H38 zf8KMol=L!OotnRv0!Z$7FW?&`eP5S~(0*5>-{=lKhk^QP6H+lcI$HUd(ugsWBZV~& zORzE??PX846z`=`T*xNV({I?WZ5-WZuSMIxSLb8@tPkhV;gk$q&XUlA5S z6N)6YcQto4f~w0j?FA(tK)1PApswnJeUwY?qQ;>2KVgJ5*`lqEs&N-aABlx z?%!E5H^Sum9D-qg-$o=*?O27JCylj)z*A$#2H!;Cxa^Hn0JcMtN7suDtm@R1e#!=7SXYRJIP7E-cjL*~#&nD)m>~7gc z14_8c6S5gTt}48a37eCWdGKttg%5+7;l763^*=UVBrNzWWDl=*fkH+L(|8Kbz`AlR znp5X$+frmHraHv$Lfd9_?x8+xf15#)nwMM-bhipqGu^Hg2iOiucHsbo zP2e3s(uD# zSu1}_lz!mm`S+)Zao$~jS=9p4BdOqoB%#@I)prVL--7Uy1%FmPh)p6;FvUiskZwPr z3QdBBS-Xu*0~^I0c7=5be@EgmXou8gV8t}&Z(@?Y9~vDRIi8L(kV!hy$HzW^!9vP} zO)(jy*FWoIm25DDA}(?QwM0MrvwX5*c1~pDH`&lMLfxkYSd8TMy5ZRQ&EF4p7iRsB zz~jQs6xA6Tot>TEXXMaURT^Te^ilA5?2F|qZ;JyF@!$72Cq`(De-AUI^ z@b?XUWuXamjHpP~$O;q#!(Lg1ovIW~u>Wqi0b9_eW%^?^@qJa8Ev2=BmiK@6Fue77 zO8W&h1!VKysF8(@e-aPd9pph-EeHJP1n||^-b^-&Olv6G&^m7lE8je!U1RE96p-b) zToIP`U;GZNGrtr;L^ecSiYDB$`OH|*%e-wMR`W`$EV)&|vNOnLPOU(y8JE`6-|i(% z@v$vz9DS|7H>QE+AA6iTE=pE6!0pV)pPkxrYE^g(G^KGvf9`jHFpX_@F+5zc?lOXx z#pbkr3SrdYrEYpcpzmoC?xCXNHZBt=50yg3r^;@hA(Ve#aRg~eT5q;`8&CXF97Fmk zfdY{Pi(#RWJz)78r5$eLY!RqQJ2liCnGFeKP56h!L}}3&tLGETr;gq*mE54P%&qDw z{o#68?8SpIf0NTfw$ss*5Sz;;p}3s%PRx~Z_Tw{xSVA#6dKD^?D8met=7WWhpsNeG zD!vS^A#RLMxYw4~P~}Wk%@YB|k+ww(MN>kV&eksRVMtu>$y8(|^4~2Mwg%%@qvyEC z0>J&=ttvVXgN@m?KsXHEOuzHtdzbf3nx+Uz?c+)8f9)nni{fZ#a^Lu6JalUJ*-Q$! z70vy7!+npMyn(fi=Mb=UU*ctVx04t4RibpH@XKbRMfuJGsA#BMykQxYYUie*q~gJJ z$@T~};Q_EbHSmby3J zIz5J2e-(*{1_t2DYj>qnlDY;LyYczQLBrN~baau@zXYuc0N9YkArt)DierMdpA~o- zTY+g-LTq<|e;s84VlpK1G4=aW`c<7v`*G6y$ysF*2GPHnpScp_+cjmk*g&zmg9|=) zw(an*Jc6(R|0w+Ju{wx`dVcTzeR2$qP{U{Lf5Quj(q}h7>9Gd@nt-liNSXr~r+mvl%nqiev^2DMk(%ywH<=#FfX{ED?AEj+SzD&{lgZLer8+U$AAf7?c}LqpY+qMf0z@?wtUi62QWx+kAZRPhlmoY-d=M z%j0bGJ1$Prg-{fqM6}{@ zZ3Sa}HW-kM2cYl+dA{8e+8<_ zCEy}hdiIQb&{Oy#hjktjbBm5~q1HTPp9Wg7pPi3It97A+hcUFazXYUU(Qw0ZCweKc z`a^qcoPPPP?P3N?-OLvYrT`M<0oK~9`yd~tXbPr}mTNqggwA)aTcUn}oakuvRbsZG zpL&0#;neB7(#LgrJo6<6R))j_8T3qjj-JH2^zZ=t_S= zTwJGu#o>IOZMuWn)biP&XW#NA0GCFNPvU-P@uunnrM$f@o+&mPBe?gx8Z(RjGVa_a z)N&dR$#T1`%__Vn_{AuUQB{-n{R!-ZhgWxlUc1L;cQyBu3?mG7bi7Qse_%SvW>brL zOnF8bD;5RX2Wr`^UsVRwj1O*sD!GS&nV6*&H9R{w3-LnFpUro(pFd^%$u%^T#O5Rg zy|_30r*cLJX_Vy5PJ^%M$@q9IHXMj;p9LEh@(C<^^x7zyL6dabvBo_*ZqU_W;g1sj zDH)J)0bCZ$xoXjwvXz9_f6wGj9 zjQq4s2~ZB$kLy$XmJEz^A#W3-!z+O6L8z(d(yUl`#Qcr2_H8qlk7ucNp=!z=utcWV zi;IR-Qpe3M{D}G#W{E1p6DYeI_f7wondAdO&pt{8i(_%17-kjDEq&tV7 z`{)^k;E_AZHo%V1j~20LgOX`gCGw`_%{$N?Y`Ewst`jqnewM^mfKAO+RjURz{hHU( zQQzOu)pk6$SSF2B zR|sLYygo)2@E&?}E+}Y!C`2yTuho4DDgWi#o~e3Hmu&_LtjVjjguFm8hE~QyKnS`Z zqvDJ_Mg^yZD+J=PQ3j`YKkgsKPj9C_wYC#1Cn$`X?R9%_e+YWfvPIsP3=*opcD@qu zp5WBowV!6j=A7Hko^h~(-S-2%T~6Q$Ni%qu8cm0t2#S)VUUW~02f>fp>=A3OszNid zSb>SM`9($J8ZFs36Ec?Y5>K56f(H*~C&)E9$h6hLLy|~J%~@0Y(OB1eVDlHxr zK;?3myl4@sI;NcMYef}@btcI?#$4?gZ~Fpa?X89_H8xY+S*sU`3=h=V>EvG`rnJXteKTW zjUScz$><{7K^+i{fiq|LGDFC5iHa`WgQ^hcKRQZ@sFuQ&!6D~0g2no%!K6{s>^eTz zTbi9Ve;$BeRYszgLrMSrp=K>NH(qux55As!Pk8fy<{qPy*crZ4M&`lcp0&Hhm*Q`G z2xoe^AD(#r9iG-zP(M{E)TZy`@1-#=jYV#&(_fr{nlt=NrV^y+M6(pss6NM-Y}re2 zmUh~K>Rk5}kElMdF8kxTJ0oza{=4y#)>b+-e>poMLyx9f3w!tQY7$8MyohVlZVV+6 z(#%x5xV=N;>=)(A0{>4Ujuz`dt_cCQH$vCOkDPG<;Mat&6K zMsso9`NVHb^n3+Mz24`X5C7>3YNUjEg6!_0P>8YvoOyrBikYVyQtAOB>@U@SCq*`N zf9Yv!`oy@#J*B7ZMmKk5izp{);-LF3^4vvd>3pI~Rk%*E62rDFW-T`JA3V&I(QEm@yFl+CtIQsmuSe02G34V#0|BBJMsK^H8d35*Pe;j$q z@9j%A8i5=MWUrcGQi4hBJ*uCOe;GT8&J*i&%Vxx*2|$Rz9^kmE!P!E0EK7fc3ZEW5 z7A_(q?i0fBQ}qzfP&5D`AGXCb5tzHso*{F{cO{m(kV-=^wb^U@0MJAqzh#S!1s>S*{*l#6vGc zw5j9HifVOE!q;hujc34ff7dzH4r!h=6&>|SrhtcdttJCc^Wk0f!KBu#2=j~+cswyX zZmmPOBUg1fM}At5=56d=!%j$U`H}FKFRb1Sh`P?E3)=d$!xKovbUUxW^}Po1Qo}B- zCzo%)7Di|WN>bArr+fIJKp} z|Iv#q=N;IS%Ou(qF^#@u$(a;ZObl4%ve-P3$uUf>Y4H-aWe5`XsQUZ#7e3>)nd6ro zD0IzkfPvJ#&j!&$8+L+6AXp5J18^@fa7yp-4|@7i8silK^2W5faTcG7nap??>T37E zEWy;O{T``5;x)?%e~lKvJWn(`ah4L8dR0ORoYoz;u|fR89{9|g`YkYeYC2U3>2iMc z!Ys5&r?dJLWx-yDE)#@j{jp<;^hW`I&~amS*!rs)FVTc=2}qB4TBe#a2n*@G3x&|E zBrFvKz_|F}e0NweEe|J#s&Pr)XT1AXvySP{{ zRyszcc7gW4;NjfuuokwB1XNDjmtskRsyv4azu2NDUT(`J?&*>46#_>;@!mY|eFx0l zT%A0!;Y(BRh)vwu12W7_thp^Z8lA4@gQCH^{sd%avvm``bZS`fP8%n|lmT5DF0AIY zSX?+sgC~B5e;Z=3snc@dD)MG$tPS!2DZ@)hLOts)Ffa)Zg^eK!FgHlz4@6X-xQ%un zkE0`#FiUBRSTzSW0j2{tT(5xE;gH^nYa@)OU|A~B*)@jS&F^co(owU z>f;}6OHGQRl5Cwz=25oYm_s}NW{#9mjD;kkIZa?#fJyGox{&D%RF+EAKN2e6|I(CT z+}cdQe~fv@7OkJSmmn4k6EVy5`x^778_Ga1)31jwje`-bVNDgsZ*~J7CWJla-0>}m z7@S7uYn3opZ<}TB5knBr^C3>}Ze)iH9p#dF--EX56S>@R_68iZwj=8}jb|~7F?V$y zq9>f>4w9H-7$(*#xCYIHK3<%ab$y!9?`SNef6uIIF?{MBLZ(YY+un0k0IT2AO2;CgW>*!a z_q|c0X*B|C53NNG?dvQ9wRg2v>_AbSzIwdhHSNRDnVA_^LF!3bL6dY%5y_U2@dUMb zR2NGbd}z!1Z1zI!xWOqekqv>|^rEM``jp4fU5flf3kLMeCr3!RTBsDkpUcrUf5RLG zKD`kG1-}Z$Pdn`K%#k(Jh5>sZrG$dxTECVCXH<0xD>`oub+Z$8CqflRWMrLRUN;e~GbV3i};}??zd6SJ3d&6&Jkaes{Dp>E)g<*0(Jp z0^zuhY&DwGnGWUv8=)`Ys-Qzv^ln;;WHlYHy+&M&;1^DxDYrmq6yw&+#^Ams4B6eF z!!qZC)%}$BK5@7$eknL1TS*r1=1gf9P{UKX3iUl58typ=_U|{#MQX89e_@Q-#d+3~ z!lT!X;C<_Xq?KaDok{tJ#|K8uou9Yf&4evc3$md(bW*rKD*@V!H!n#IWr+4-YyZ3Q zsF935NO#f}Z{;v4nZlZJTPXx)d61q`Chfb9XoV}?|GNnauUpSZif;qG-I3zkprg|s zI~~5r06KLMN9UvaafY{le;JJ%Q{e@7pTMMz$Y?BkY`axAbu=Lo_r7UZ$xnc3vtEpa zEE^;0%PEtH9YyA~r5wqd{_}`AUJBBg07_?2Qsnj^Ce-eGv1)6fgZUE(EW8W^Igm>e zQsAi+=Ddi=_m31x7d#11Qp+tPO3+Zuxaho9ug2>{_EFUn9J#kef8S4IuET6EBTO0W zipc7!x!9IU{`U{pL*hinK_R!W5tyD_H*q|SR3!9Uhy!WSOJ2tp^lPMJc2c89b71KH znLQKrU3H`Xp^|ywQQo2)U3{q1t6?HQ&N^QY2}6L8!MD4itA&da#e_!&hNu`?oQ5?} zc20>-%7_}R!WFbRf1o{dbuMc4@q?j*Lf*X_)Ze9lCI}TKWpJ-8ZGPnurS{n-=85rx z!_3`jH&B?*t7bzH>frXHx5=_yNo}I-)1pnuEsz<+UMWR67(xE&F3A?CXl@o;v2Bpw zA(3CV7jABc1bpmNi@0$M9ls9!Akp*Mr=4jUC}%GXjbzkUe`rO@Z5|{5cJb=v@m)H% zJ(8o=oeWBg;2wcQ*U}2I3?Ukfc?M^d3VWIVbF>9PO>!uw^m2Ut0XnjBKuQJckN}-L zlG-%(Opb^AGtpg9&~tqYa6n7ShtjcUQU!H23lRiLqsL~-2a}KM!X<@tiB9Xl4Lko4xv0PB)}H36Xn`J!oYxQ-snlqra8=Y6Hh8yrs7L zTg^(Nt?3BlWzI14$6Or0e+SZ;Mw5=P21-j&*2qIK2CLn9gz=O)Ux3@ECz_SugWcTk z0|aR&PVVJ}_^aq+=?!b8_YyS+n%mfr?;PmOZb-=-fA7rE5s$4cS|S|*qUZvfVv!!Y z=yb}#q>MaQp_XqE(=BZe(3?uH4u$4B5Q}?DE_<;`5UAo{X_f^sp84U$XoEA0_5JUG zG-}X(-kmx3p4HsSPZY8}4_)is+7TKH2~$jO7#ri;?}is*RMgnKh*%mc0FmHuB+sSs zmaSW9e^E78jY{`{p$iZD8>#81$jX~M)#C?E$Sro`pNO1XN-ct+ab0t6S@9nGU>mn= zP4I>(JJBV>ha4(?8@aQUo2lb^d8F5HBkV?!K^RMm6YRSEE%$wm!1FYeMB=<`FZY+= zUl%D{sHrl2flOztV+1wGc&QXwz*u3Rxt6gme+pyX{B4eDhRH>KnwvFqn_j!*saLxr z2+$*fARKzZHgv#mrlRArVl&)w+BM#=pba1U=%tpJC&=gqn#fum5)p!Tv)d=G@)Wy?KstZ{0c*GJJjJbE0Ytmwyhf^q! zPXV77T#XR-c^R`A++m6%v5BM#wg@oo|Z_mUWS@;W|7edF>%> z(H#AAd&pO|eL=d=;zIk-C7;vtZ}IvPe^Ix0$ujk3pL0gy)c|HFJD&C>nz4a<-6u=) z=k|`~vX0&pm4zc$^%n_)wS+Z=K?X5Kq(*{<3xIQYPWnKb6A`v;h9J}EkpU`G2R}$Y|SUGbe)uriFC2}L*p&pKCXN8a7ZYJE=feini`9-(M}B|f45>iTl43S<`&R$GS^sd zt=sO1Zf4FAbJRD22r4j@x{?kA+-gb8_RQGEV$C|2?p=^L!f$O#Bs+AQSM@H)lPPY4 z$&}g4Qg>mS+C}B#kX8M1f3T&q|0=9iZ^zNt*44p;p#d=+&{M8};UrAHbzs>ypVl+^b{4cdpliKl zb3yVt3B$){9vz+7Dh}DWVWplY)A7t%WCMfABW=k^8z}qjuKtUC&mBl0H|=SyJ~b*_pYl#jkce8QbxcIz*xT ziBf6`L*-135GdbrWaMR-5GZG$|Zm6n~9 zkhE>XWMg4oF>Y%$*^8%i?kzg8N7IHtAF6jS3@g4t_LSB=55z%>xTclVaXfddEo8~T zk9Hu62Y8Qwe{b(X4N?0G7%l4Jv|ac*lIx<*NHO;5BDO};z6ri~dbGGuV$l^IaakAR zIl_nt7D~{8_-Gck;+|R0jl;2$W3~+P$XKDVv!pq3<@E8**aAJqUW#x}2>3~J!3c*> z59Ru~<_?C1UApNFzek^)$NX&YJ1>78mk4TZ#Tja=f9+WJeuj?J#o;bH^qj2W;mZYioSgQEr z>dELbn=}vG`%`?f1m~#c!^a9Z)-w^BNU09aT+0N%^OsbmX#Vj{vukVzw6>X48IG;4 z_i0ME{HQNJ;93_zoD_hxawI@IO#{v0OL!%!e{`aQXJ-p^fY!PP2oTWP5OkGW9Oe0u z00*Bh2QSGIo}=Qo2=QYLFl|K`>&(jHxNEjx!e=Ak>Iig3UXewh+?)G$D)vc}eUZ*n zTM*ZqYHXk+U7Rgep7(RoZlg#1@B%X4y3k2x`4wfP+L3`g*4SO)uj0cHYsT9vlhdk= ze?JDb)0;!LT|i0amz)6lg+FZ`+bn`hm{ELg%5F{GEB(k`A9tW%neC3AN5{T)o-UnS zy~R4|WRRe}EQGx>rl>0o!%79jW@+L^s)rI-lhI5-XaM{tOJ;w0aW+i;W<`Rm{?PM1 zFJ3iIVohSw_EFGtB0V7mKeSbIlR2W;e{Ky0#*V4D0ra|J9be7G>UvDohJkK+nC%uW z6cp7P-P-TmyG51v-Ck@=a!^U3ElA)od^R|P^sH|e7MKs5a9mdrw#1&9{7Kb}m06hO z`egN7!FR72j7}F_8M(zkZKgXZL6ZNkn$az4*Su?GNQ8frYMbKOXroa;7*%<3f6HaX zgj=K8O#zsZV^W!)4FYh1??`v>Gu(k2wf8`DrdUfldSPISA*dqQ#+;lY=6QTFdInYJ zPyuja<`{5!#_d2M*~O~|aD@vM>%E#(8+ZJ>{BvBwl{{mH_k*egfd3+Hy0vt$7*8?0 zyCL1lLiD)~SDaXEsO`Zy+DY|tf3=VQ5ywtmT*#QcEKzOwGDP#VmtT%klw*u3d~H8> z8@VL*BWS~rWoi>fE&9NK`=bT#n(wz4mnja&-i*=7r%X?BPAX^ndWaQICxH7~>A+?= z5uLE%AAEsF(T*?!fLrWqNhN%`G2j0HxQ^wR3T19&b98cLVQmU!Ze(v_w>caED?I`@ zHmO%~v)5XCuDRCSdyjL@IAlbMDs)1o4#sBU4)(5eO!SQ005xR|MI&2VBU38} zSvqA0J0rkfGaC#UnTWHQk*k%1y{M6^88<+~%oHGMW&&Vl1~74Pe{sQ(0Yn@ey_~Hq zEL{PVe=(?NXlVb-@=plB*y}$%e`mT_S=a-}|K7Np**ZAdnc2Jkh4{aosA6UYaJ4i8 zm|NMJ0YnrOwWQ=F0F)B)Y5)l{doyPvTY#dQv8|N}K-S8{%-+R}3SjQw46yx=0l>t; z-qh-!(p>2OVhOnbe~bVwj%FrSf2WywnwUBMc5{b+2{}4D{Ee{t>-!6)=-}e&V&ZJ&=nD9oRZ&#@KX|%Y8oB#OF{-|q%GSt?TY<_-WR#{aOJx;g%*&)v-V-v&|svu3FNk}xuL zu($OBn3|cxe=x{9xc*HEp!~m6ng0Ks$o~%{{(mCy{}Xxt|B3tGHTqvR@&Dib{NJI) z-E3{;jqJ?+odo#LGX@|F_~($Z|KFmG?5u3P{!j7$JyOH$KS=%`VWeD*{_bK+5YX*zjifyQ!{5lzk2@LN&p=bBjbPbsajf@ z*x3Kmc((s=nc18EckX{B`j?Dud$qwtFx6SK<97Sj7OwYwGO=j84){NRfZpRq4dpD++Q7Di)W6X z2h!AsqkR~*6uoI?R|R-}Bvk!{$eZN9IA{)oe;M@4;4{xPVtlR_WVgYz*%{RjcPEvU z^-Dh>@TY#UI73}OQw5T^7Y3q{J~<-zo1{0!qjw=S1EJIxot={>pFBTN42_Kp|L(m7 z??1q$`56yQ#$$x(pL#}=;_7AS{Lp0b1^(vFmhfVn$k3%x(UIwW728N+vF&RPx)TmF ze}TQFqEass*TtgDpDl0SPeCw~PdWFuXOj#~J*mRTa|N*2g|qfDE;VzY1*k!#*Y#)H z&>ozUEH7fJ-ZyiaiIS*A8i{^WJ4bW(4PuUO3v0h!ERuV`Og!TyRfJ}R8>aNg;S;D8 zFZsDPv*;tIRJD;jV!8|U8=#y>*9o(xf5ufBr=dZ5aNEF@1}w%j>ww&{)M;muh%3nq z687L3JcvqDztOF?RkMD)8@<+aZ6Zh?3l#)O`T!y!h%0w3av?-F`fP)xI^n(^9j_g; z4rXdel#ZP>kYlCs_0^Q`Y}Kxnf7s94FcbhjeJwle3Q9jwM4Ne1MeSia4E5wsq$H<` zd`drPI(C+)NVaoN1AkHq|J|Zz3`xPQ)IXr-9kTZNJe`8tH*b9KuN|0Hn5qILzbX3< zP7pJ}+cDZA_7kSlcHj&1AX0S>4%`o6GsC;P@vKs>vF0gy8t_e^V#hLUD&? zGB{;Q>#gudjn}TM&wUO81{uv{cL&sL-J}(1q4%vOR?UZZDAp@2^Ts&xvtgTRN!j;y zx}vzvBQ?5t*Adv^>By)Yb$6zZPt3lo@y4$=jncPuiSys%zqyEVEFwqX1tlV6?cN4l z7`wp@q{Zxg6Uj+c`a|>Df8J&UM|DB%P9Q43KY3TeLHgZlwLkf~^$P580@7IkYTEOBW2b33J zz6S?5*y`JqhlA%^1@Fa)8F#cy%+wK3EDANd@BBu+)N(TO>uOlRe*?0QOIO@l5W;|E zo7Jm=(9|=kzM`8ty4~6b%F<(*!kJXezRo@1c-w;GofLv;x-V*nkXN(~l>lRJVh9rp zBY5da62Pbn*2^=jATb@HxW(#N2gIVnK4QfF2t)KA|MHY=cexJ;`X-B@24yvk)UWeR zRLUH?X!-M|iPDXte+FLt#`hzRZ`_j3);;gZU@!>Ha}{aqIkZ7R+GZm>Xb;^gfBdvg zbTzW8cCz|%2pW=gWa}MXpGBV5KeMC%SUUI9A?q`KO~NJ?-S1B-zM!Ao80 zWaHS5W!P-V#J3r7Cz{|zuV(C^YZ|c-H70)g3_nPA%38U|CD+& zG-;gQpZ0nn3}hT5-g=lIv;20Zcvw+i{%a^F+aXVY92p5!6eKKkc_t^Hc~=aiy7^}_ zRH=9#uB_%mS=0E=T+RmCJ_V(I27XPmWU&B(EnZ^am*0jc;jsec>_|boniM@V04wk5JJXGrH6C0kdx(A4zn}f zvkz?hbLa%(n#{QVI}aynMB*-FkYTbk1AuX}GXxa||K zwu5KntB2BcYQTC6#d4ZN(>oi3}Tx{eYzaArQa!+y}-osgtABr7C+H6TE2{uO)=NVwQ*a6iu-u}{h+JY&ZNbWP1pxNg9+X!oRg+dCf_b)2B z#G7;He=l$m>2glKVq7kCH7Mj?isFE;B*Gx?gXrheb{kaR@>%&sPQ=NUQNOefw6^s? zBUuoU`=)_JfH_oIA~gE%UwX}3coh&Lmih3JJF<}NprE^ryByjHXlNE?D3IDtVHoGY z;Nyw)rpeW{?GHSKm`D4gx2Yaa2S6`JE%1Use^TULu2Bujfi)agDR`-x$Vk}wmwZ-n z0yF{TBJnp>#`9-16;~eWl~G8Wx{S#U$Y^LP&G)dQt9zKkA8d2~?Hfox42fk~N_*W=SM_wvQDa{{FmP@pC@Ktq0Uzaiq z57!gmhxm<~=}OvkGlCt|B4cW7QlAe7U&cwslg9d@K8qbk-YaA1@Ku$GvL0opf`FZ? znv(y-=$DVU%ZjxblA!OgpceOc*MsKdf8~Q(Pg}0ok-#}@8TqD$X6cAm^~^eS#5pu% zF|zFin7>3lHKSO0l;G1*a$ZJZzA*e;VPIAPvu>`_KRFV>8XVMlh6QZ8nbUoW# zv3<=4PAjE>Bnc4Mx?Rf}O7cz4tT4Y{4dc(G!!XQtvCh3S>4u{tzC2k;jgdYhe<3^! z!y&qCf?&rHfNu0as_9<}Y3;O6O}r7Hf?J@3(4J{^qtr6gJnuO)?4wK5c7G_xvk_Ec z1f8F0bjwZV>rT_n2^JrOd40CH%8;%(R=WJb=r_|4n>DpQ zjA*0~Y@}vLaEEY8&h#}?!frWms3FoBZ#L^VxPyB#qSkG<#lGh1e3p87e^kd0lBG@| zKrbumd&s>GFHq|GA)$v_ygOU^65eE*Dxv(~%u&V)(b>gp*2|ukPYZ3n`t2~tIb9bM zE3Yxh+gJ?~DXjx9h%2x6-Z`pnJXDeW$lG)a#g{ zDUU2ltpGThuBVrBYquzRf5~cKIQJNxBaoe)JmQB`@3uZ(hP(Imo?}_hvur;yzIbgs zhz&oxGehb4eUg4E#SMN(D(kxx&w1He;Fo!a>uk;*23Ka^e8z+1JT(*w-Sdfdp#b|- zZ`!CH>=?S%Qb-gfr$vWNBydb_g}BA)(5qs~IWE{c?SOTI!mt&_f6-hJ8Z-FNn~=E# z-?C9a9S^&5y()N!q%n$w-9e{WYxLFB%$;OEA`qYalwre=@J!jheODo!y|#L~f>fWm z;B9#-*1IlvgnMO*)Is6|mLBFl>7PO8-`8+#Lz{K&e6E~t{F-LC4CTSzJ;d1+Deuz2 zq5FX<78%e#1h8Gge-K^F0kb348Zy{(?+tyj;GHX~gUQzW2jcHsJhn)bpo9htz##yC)C<2a?~JXVGg49ylHkh_-gW% zWC;QkHwTvye}akq6U|!KnH_(@x?(@lq+|<$Y#$A{q+NPrC%_k`dog-VRJqIVP0al9 zV!!f6#WP^x3=$q?|FzJEqE?m#jDIh9cDn>$LPdDUd-T!=?PuPWL?SrLm+G<&oHqjt zmO8WTdXm6(#&e1|Z$4S!2Fl$xoV9a%S9~u*&w8Rhe{|vW=Hoq1*XHEbv-@4;>$k@-TqlyX0m|<+;ims(0j>&U}g7Q+5KYZuUM0+Fswzx){Z?Rr!lQ2 zagss^N%<8032xCNnF;-zf^`y2EtB@cBIu@*YIT?QdTW+rncc61>g6LYU>LSRxzE|} zixrsbe}2VvOAcw@q(PrlMn?A)9y9qh*1uL2)46~U#yn8xK=wj!;>C?DU>SRkqx?;8 zr)5@+AWKnasU!O~o?@f+d|`MKzq9;h%Mji>%t$}yR8AT!as1Xx7VF~B*#&roDx12} z8~nqeAusZEqUgZ?2F=}?=?Ht$vuRHGE>t-2e+cV4$?r%S=qM(-p>NlLw@#O56#!X4 zroR+=pm==7^nhP6JN=GrR=QVQ$Npn}9n$3G_p~|D0DGM;PWo~B=O7MneAe}&s}EO8 zK`HQdpSgtSY$vZWvj6zR`|P)}7;9VS3_iy}ajF(U#RGjD|KEp<%ywytn4HGb<~#Yk znfLW%BY!-1=((#9Cavl=h-Y~3o=cRy?_3CDbSS5SqFVALas*RI#Wauc%43` zM=>*xF}q6$nu%396+F1ks4G?mFf(Y!MCzLdx;3nKnW(=WF1~%-_%w9Ib<0q@2foZ? zjrRlCez%5tOzhX4vTV}i%Qs9DNl=-lUflf<+~%lsTTjH2sy`!|8Gb!%m~sqL#AIG^ zKYyf^eZSXB%>p#pbFy z*`R$xQA337oXzb)32U6}m`tO%$RKzmxcE1UJ%2js zEm!Y1=NS8uyc)TV30hxVCKG+H^#rnhd%>r1<)m=SaJNI$kapg!i zovY5AtPC8N6WHbt#WEFnxT6Fe>zxPbAi%OgXi?u$?r9Cj1$6iq8M=eB?&HB=`39_WlXQ8pzvDi z?!;k+C@z{v2ElHpmZLp#R2UWc)YfDW0HYsdBO*3P9dC!RnDoQy|s~-+z+gN@xxZ2AEx$acZm?aesOPELvn> zNCPyi5_nq)(dS>Or;qjAp_zTogL_7P-M8QzM;|;JOoERDSVBJW)hBTwNax!K<^YQ- zuqo5mROfvmH*}M;hiraI^OscAad)B>9bQUQEv0^Ciha{V@M7NE{02`JG0uw;n7Xn* z5rUKnPl5$)Db=@#w|dVdqN>K*N2nQ2<#mFb#{P%X&YB*&5wCFjz*)5$2Q%=l8l zQV7Rz-L2h^ahziv;{^lwTE1kYtLUF5ZKN!WMQ(oaU9NbiKyjO{1{E@FdABTNk7g5L zht6bitu7kO+<8%t+aJU>J;tscn6o+@zgw3Ss^}Jj^d?4Xegrv*&wnRzO&6q2sq#R= zcdyD=0~0whsmf)8H=A&UfoYuqA&lBNzj$G~VE4*_)05eu<4idTZ#sr+>v)ggs=Vdw zK8G#Sonx1@rqk1owoiIZrQ}?;>R@#g^p@CXJf|-gYbZ^0kngkUxwChRSM?eoy2lO3 zNn~EgT^yW6d=^=}aDS=jrD_)s7RMH|W6WczX0}ocAQ*r_6&tsiWG|qRTj%NeJe;Gt zH(_*=uIWDq9>JLWk_ECyLk0PzU_<`2BfNF3)~klY4c{~HZt?2}`6ZCiw8V_wgFkZE z^n44qT{ELHaxfD0QKd(emr<-a z&rN+9xFVG=fQ@HWe^Rmt`DgfdwC@C~R|c@SK&Rj5tiqZFj6wgNi9;H9_YCT=#s5kb z0s*?MKEQv9ORegXU8!Nx7;ZsyZm$)r{L!6BM0Ls22Y>6xN;N8Yi!9Xx5|>VtqY}+# z;-rh_6MeJ=?6v94JwD(Lg5P&8)jSy@?dEg&2kJ_#k>XhxnG zG^BPMnC&=`g5O4eehg;gu^?c{Qk=vV&4ElVDu!BP48x0m35)-~+;q5pT^6~)OxmpPurM+UDqo->WXD~7>;D3cafQM6wf+vl7sh2vgF z3~h3Yr4pOZs7Svvz#j=qWMA*|em|0WndJuY5)YiAaMOO3>W;+$JLLtLb2qM*eU>yW zvO{mOPs32-ioO9n)*(Bt%3A`r9TSx!^M9}oyHPEzJYrb|!LfTro|36*MvH$cgSX|> zeSMt{wd|V_7!t#0I(_RLPoneBl}B-Rll?;r43s12lSFz7LlQ+2T;&2EuH*$tgx~E_ zoT!9lwCur@Hu30IIccVP$T>6fcrHz7dQf>NR!zJW(c*!GM+rMMbyU$fA^A*6V}BH; zLAw4$!3L2H9h3nXA#U3^qUo3Rm>!cEo3Y#GBuP1T6;>E^hd;ZvTOkiQvhG{FegZqe z^!=Sqc$=QtpW*U$LmihUk~*zS?k2uSsSY13l!Knqo18KmOYm=n{F6)_G*O6nJR>2_ zmq^!AR)~AG_VJ3MZQR`>am`bf$$#H8Jtj%-vwWE(9ktlH#X!od zw5`sBiSZqDfGV=``qR9>r_aU?@|LN{_*eY;OQ0&_(Cxk90#UXgcPYX9*nc*pJbV_H zhaoDtyB%7c0tv5cv;W|kDzN~m&161Vm*;EBpll1sYcvjZNMUwBJI;D>cGTFEw|y09 z9T~x8M?--0JV|{D-m`VGFB^TEHSQxT;-I3r{sO;GwSEr!;92TyY-^v^|u(_@=n6ayo{SV!b-#}S+!z&v7RBa9mdiumDmmDaaGf4P({iMo>SVKv2_ zJ`-z*xOCneeH)tGC?qs_po67~sKmd?&NLvW09zV4L<&=W0y=-}q z3aHx-Rp1babv;(tns-Ow^$JfoIbT@Q)=%#qq8qfNNKi@rU^e=->3%1K zVg1(R+7=un?cxS2Qt?={N(CHl52FvM5fd{I_TY77KleN;>3<3e11Qh=toJv@l5vg- z&nQ^`D0n92vVn#iiR1s~GJ> z#5{}{+}Bgxu!HTbN+7es!OAAr`JeX^0?M(5Yw?m7nDmaZb-h9kr>>o-BV&T{TAI$y zj+#pl*pJS~Uw?m&J}Dv!zUL+=hBrG!HL^PeVFHe>(3R>Q8320&(seLqEoXF^}#S`qPI9}*S9DE|C(-sJ4;y}l+M z=zYt*QcvI~p_~#aFr^8N+4(6J-VP=74z7+RBu7GEhks*7pV%isu;SbE1H1%u&W<#4 zm?XQ%*jyHk_QQqs&^H7b%(t=)3JO)kL%)9w)AK#4yofgNeV(FCl z&Srb>fM{|OLVmFy&9^b4<*4};8s9FeD|tBB9L!0i*)KeZZW~Jd0owy#MN>`wUO!rn z_#`u&Eq`nJRlt&~=X=3sVzDr!u>XMVd<`a$Nwg%`3?hXr@w@NO?#Rs0z-v=d;~mui z_pKw5e!}~-f>x2_9;I$QV#cN)P$PbSDkI{{WgfXJ@U`0{s?DZe6PlUb@f$k)-aDObfl~tQ0Su?3>{Yr0@m#xf`pllCY zrw_77C)(r%;n1XomGVxeCNMrla=vE96cKiff|ssPqJ%KQ>AXU$7Ap~;8i&A6Jm9&< z+6sM%*4TDb{HJ)2pGAQU%jKQaBQ@_ii#g)lh_QL$Hu5YV+M+hLqNK#QD+AUz<`0LdI!IanB!{v@wjVjtn}B$;@=DNp<9 zA@*m)FMRU!siQl6k`Rp0TTr@*Zud;|EQ0dgZ?LtX=X}@RtYgJHgC?S!rvTd|w|{8k z+2{v~;=Xs{?iCzI1>s=Jz>}G)g>th0K4$G2%sX>MSI^|zYUljxLV%Yu8pIzPzKxSy zt#t43tC9_8IF)P3c$+RQ{s7Rfu0> zFn{oZJx}JfBk*q+2EONcj@fQ);ET{737nIEM$23^_o+~&$ z0Cg+{&h)`H>R6pvIguuIjMt6euK&FTGD1%4922>ReMcMfYURYpc7Ok+49-Lp-+KMN zoYV|LHk~He+s99&2d6&26$*hOL5#F|ddUmbnG^0$4)Z(O5yS`H^oeC#$EFTPS9MIC zp0IHNY0wl0|94i9ZL+{4Q}WeLvY2d0Di$t6X2fRR-Q9D6slJWPJGErum}9=I@U%0= z;d)FDiX2dLUC6aYs(<7OnUQUu`-Za@4=C)?8@i2J_=Jh+DPrWn&ES%tvgkeMOaiJi z7?Zxv{^Kb|BcZ!d07z*iEmNafwt#ev_Ry9E;mh#p&+BF`z&w07Vom{HiML028iY(B z9i;5RNv3zA%h0J|T8fd;`EG5EVK3>f;*6>Wb@HJ5!*wQpPJiN<)&{x^yUH2dJrS*n z1!#z3e?{=yGaX5ep%IueIjqlYea_f6&^%Kvr$q?S?1rVQKltY8@Clqf%mYP(>J_pW+3Z-F{rsx-yr-2M4?Qb=3bqJn(z zN&S_gO0*p8-MtN|^J;BuM1}*!hB-vY*xP#v)r;#{!cY2a?b^@)j)tPchkbN0k{m^dZlUV+Es#`E{))2Mu=ZO{s z3^_H%FMk&D^(!{;t@WCFEEqGS?ML->6&;g35-l9MMN%kLn3bHA6QK7f;glC=Xyp`$ zG|rSV$d&c3naj?vjr-YV`7-z?(dw8OY|fOiNyL&IM7iFLsGzNMg~@)6{dSL2YvSaC zepVzw0#{4PwI*J5OYfixPWl+<*FUg1p);YE15{&2~QR6XPa*^6<{M zZN=H@Fk~C$SrF^b4{vF5A|Mi&Kf)4`mp{2s!k-iZJD1@|I`cEaIl|S^BxuLBO5vJS zkDb8gtNvcrIF%NNxr)EwaYZAC>O#oL1U;^L0h3T8AHUef8})OIBD^TWI=v< zuYVxKJGf4{K(1x)18*<=<)|=9yRa1CAi(IWk+0?2Mj=K>uK$3HGy$^1(6eZGPP)}rxsEJKx ze~2?{Op6SKTeoUp^;EWtV0z1E$6>k`6Mto2%fE>vN{?toNlP&v^(lsF5FNANtcFla z#d{Qhya2UHO>5|a&fxpi$gpu!LPa)eFv`RDQs8D?DpCemT}OkGHts>34o#COP+l3$ zd=L6XcFw}p^7D?h4T+?MT`a!1P!K2=B6$39{h_T$j>?*x9Pr*blOcgRbh}c^+<#CP zW=?840;H?`tP*>ItHZ9rg{l$bl{vrYOxFhn=J7lh9Mn%yCl^ujz58&?UB3!8oCT~aC>v*JuP@=Y0(3p7oECbs_-RBw{E^J4h0cqka! zk6*So74RIJV4gXVQ*}YNQ355mlYizr`3eyxB_G2ME4ki{-7D@$87EEf6AN;G*?XLC z2{u;NgTE;=3SpWfN)V*fpZDE-^XJs4qALDwp2<8C-#BZdXG6ek{@{4Th!V}(IPPv= z{V(FL!*P~yVc&dFIq?CDKV8vYKo7OvqR)EA=)3Eoq@EbtYrt`Avg4KB@_$m506xXl zxj0dR_g6spMCY809H0a*;pSjV)~ z?XkQRb-qCDaeMkLq&dAS8%@?vNV&XiCTv4=i&nNwe-yPf^=EaFrvbv`Q80q=P{~1|T5v(v9eS(EWQQE&cCUNR7_;frEQI`T zz${{T*Hq!iPH7aMF!Yn2_J2fiUV6QO-TN_>UP7=PrIh0^q-s1s{H`I|Ixb9b>FdD0 z;b+HcUCT)u=iyPKlz*#Z62$f6@x1BWl`dV93>ZxAQV@p`=kXAW4un_IQ3|K}1Qh7jp_!1gt}Wr9)v-MM2%2$A39@s0t=ZSrx?i@K`i| z8<(qtrfYrBY?vE9;efWIvsnw#K?jbO{eHVQivbv5_hslVJiVjsjp6O{C(08zUr7Y_ z1AhpvOX#=-xd&&HEo|P@l3A1!WIV!g&k@*t%8UeyNY4Vt0KAjwed?vNfH;49mhX#x zf3ZZ@$|i1GF@MX*aWF?=B^cia#vBlh&#)x~6@P~JB7YY!o6ZX_qyivpmT~VMA>#70|%rHjRc@Tkie(V=2ok zFs8ydb3fWr3aYQ8xE@&ZoDP8r^YE3LEO&wA%<^FdTOj}@OW4V#yW~5!PcC~*xD2@) z26kvZoqzgH57C=+04raA8tIg{PTJi<${v^!#cMaCGDbmq8xu~q*W9e?u6yNHHD{YSwZh>aGqFOvsOzVJi= zk)S}?t_D`Ohc7RWpdMH8_j_I&BZ1i)7L`c+Fp+DbawEKLNu@rlv^S6Zta^`v{7qyjnYTtE{fPCb^fa$^kuM?>&>4( ztABr1XS@p{LUeq&WxgkR^iH2(e72e7uWnpLO7ZW5@{_Pv2ftl;^{t=$cIxgyDvGKd#k?lps5}pqz z(0R@K_@bBqJo>6BS;xlE6j+BZ(!X5mPk$S^@O8^uoU0;y=hHUGA(QF0=Thi@ANJs8 zPirfc>l@E91`@LF+V+jQ*Uvbgb+(;~d@6SVh9kQ- zJ7ku;(w`8S-i*08UC`_vuEy$52*UBWIt(4E-oFZAuBSDG_jKpP5l3G-X&sM6XMg_3 zZ&O{$swt``kF&*ef|Kuk$#wIGUM~62Fc4fwrZMp)~31@q9Ie!3mPns43*%>Vz zPZmit`W1QYL_64mS3b8eo4QBd-hZK*YxI%TkebWp$^{%0D~=G?sVvZ6EPlWzi$KB- zCJhv>ibR%Z1yh9$$F}G3%9T41JQP;YY9cFsC_?P%lqqu1hUK$k>3k6NhQO)85JF36 zkt{HKdFoisI_Xqu!6)I&VyndK>4i!NN&^?^yb8!we>kCHqzr+(bi${jjej9Ofrs^z z_HC601_mv%EK+I|3RJ|`f=*$}ARQlOU%nsoX5M><@hjfT%|UKu+hCL}T42vG;M2EK zR*09DFp1IntjSYnEV72NY(z14ef6$mkkBi~mr%nOIo7Mveh+~O;?arG;C1}kp=rl< z1N!8Ns5`$86{^8)sNH1q)qmtbjYIHeMBecY#~np5PxKyRQsolCQ~iOJK+@_J$`TPZf(yEGmWbF%#)*g=L?ey^eIKwp7^e4QwcF2}G2^U<;eHgq2Sj z{Y?kz-i#M${ZrjmP83JXDATKMlGnN(!s-Em@^z42(c~Fv)wTKfihnzbaXs^9q>Syw zjVMz=``uJogD{I_N4hyNqkVZpE(K%A7cM_33Kt;CI6E#*F?K)YrQE7of;)JLeMmap z5D27k@JHCrUjD-6+G0FbR@L1WNgIy$O#<!uMQN$z>v>Dy=Hgoqu{c=cILX@z(=+Cp+#5 zPrGmlcO5FJ!E!3Q3mbLegvpiVwurCIV<9}^Rjx!Zivp1%1z0qGfx+=?r zGOkW$qyzx8){5cVhd$ADU++u4nJc!MyeLFU#kFy;7<5kjysYVQ`&Aw;&4?FNxHTNTEeie(&DIHtxB{S!rBOEAeZxj|f%$O^*q zjcR$*gL6y65PzinO5f6z;OiyLOTb}_u77}_7}su|>79a_g#YK;qPqM0X#PY-LA|Ss zAa3T%r?iF|b2(Y1aL4g(3WqSebD>S?KBJGv&Y#{~(%Hi2ARmyS6*NtE#9|!Gi zw~SEqZW`|D;RU_k$sk5gGYZ@j)z;04`{?engO&T(i0$$=sdoBm5}nH{_86L+F@KhQ zP(den3mx%ECUcM%tfswb0bMuBGdQmY}c^U9SEAnthCDaPyFUhi&r^^vj$5N_0Y9bclls&B}C8v=b} zXQ{3%XeIbzDopi;iIn_d;D+bCy?<0n-L)8=?kFVfdn{XB!T%)^9>@Pkk-}r+{5y`7 zlWa{$g#0MaH+{q?W)?;c`(o+Vd9L*Qvz{TcnTm*3vnwRwyK$-w@jZ+()eoy?G1Q&8 z$i-I$uo4D-Z>1%jUY&cABm<-UrT7ap-US2Gt@!5Ns{Aa8)JE63+JC}AapP*{ z(hgH%XGIu2UO-VuYDH1qM!2|s!nD4zib0}s6ak)sf|8f&fpr)2gZjOPcRe9om6U!E zD`;l7S`OnAq(4W+idbSsT-MpZ|6V{KpBYxv!N1&C7F3oMJ6aL{^_c+x-HhL+I0IUI zX|+`0y3|P|5vKk|*(W=;a(^T*potGv(Mg;MDIY3utqbNC*Cz{Of2>C#oA?G5b$L`o%Ho)A1Tv zZC(@B&T=PBLc0M+WbTtf@iRtoBNv%fOl~7WzyekZb=kz~RC+tLD905`KLga;(rNOSQ z^xA6$hWs}M+T>7`ae7U@Y-5VhFh(tn>Oln}E)*-Dfn~e8EV6WsFChnQdec2NaltZRpUKcl z{+L5S)tT1heqY-hOFO+hNYQ^QqZ}%T67(6pD3_X}Q_HTQnE!1?!Lsq*Q25*Mp7Qz50u-egi2Rq#T00qJMfh)P73N%<2p0u!}6Q+z;-s zc8zgO0r~0-iHXA~5Pl$k1hiZt6YPe}RvQ+j=U$9uZ1{A8srUAwLbjg9V(faqFd0r% z#v`fNJaiL_g00C?xK`@v#cjK>@_-P$xe3YSw~8_4#|h$sj8r>#*7VU@*YK`+dQ6f{ zqaK&u&3|de&u&>uIT0Kte1{^8azH6#_35@uDVwU!SF>D@Y*LuqBlzsmlnG~*!4%Zq zTh-y+9YsC`S&^e*z}d2}%sX*w5IHp(Ycff#u(=hwiz0nif~%Ki`VZkj7|lirZkFz` zALY2=9px}8adB+$u6vIQVqD;uWXta+S|lbufDUMCWsIL5_ml#cuT&N z^_v^YZ$a4JWqp}2#ct(PGixo*POV7I_(C~5IPC~J?dd5_Hu!w_hLXKV3{_}^UbAO|A z3C^zk6Y6Tc?ry~_P)g1t8&@Abz0UsY_@TjFVz;_waEU&vRKLC4*;MBD;taHe%r}b+ z=vU7bLo({=-)1?z?{$CQ^k#iV&(m6i8pMKzPc7Ff8zUX2+r+$d<|v3+*J|bbnWDjAC|(PI}k{a?R%4hf1bxnJB2nE!LZsKeO-t zg91UyCb7EV(U}zgyZ|f`P$^axu6O!=#B=@iTi##_Zpj9Pq6c~|3Y~nIsanw-L|~eS zV&6phWg`QBsO~A0NCZ~CwT+ll93%3h8V>wr3_DkweXO-#<-w8wO$ll`Fn^udDn*Hu z{N)N{g?Qf?^P-H%K=gKpi(R;?_QoVgPT}>_G1jm@V2+X`A{CH+Nb{4M50BL~^+3;N=eSGn!s2(Rm6qE(>J;@S$(7GDT~$B9yJ0G#!^R+I+u8%5 zGURSG6$abD^pm;FMI%?yJ%5^|A^pSc!j| zR1!z$!OX&1%WIXR-9*V$K`xS(-&H0qBSG1Nzroq4IQT7E5U!F<&9B8B7oE(~(*>WC z&+*U{26S_m@uP`_H@3?k+{lL`W-(_}{Bkl2pkA0h-JG zR4+h|Tw+2{o}-qoM7o(D0UV~k%o-$#BeC!!r(GQ?kB#8< zlcjt+PpoU+=OR$ScYm*ZPr`U-KAdU^nhfJngn>dTakyYqD>72sqpJ0vGx|UVbnq<3 zGwNr9o=6^%)Hm@<8!v{2N#iS(xD}%xn2w?gU2&~rhdj3caEte7foizHLj$x74qW-h z#OavkmC)XV%gVV$Q!8JSYg^>f#lSmlZBzm_mzCisMS1nsO@A(aDn~h6sO(^HD#MQ! z-Pv<+f0X@!%K{BrF$m-r7b}+iZ3`#`c`q%cYz|NgN+Ll(73Oa zPWIRX5YDJy!`5$JYBO?wd}PS@ybyUhYI4^uOXMdE;*?e3qBmT*tC8zihp+NUE}ytj z>cS#B-Mx9NWPeizMD-UEq2-t@L6f`O zp%HFr2N%on>*x`5yJ$uX39a^hB6ggFXB6-gzo-D8;T_3%-ioxv8n-JWWe(F=A zoNcpB0Gr3>wU@EUdwv&tESOONHL|PkyGY8;_Nh*cUVoUdje$nAU5U1Ioli_w&lFWl zK3Xk-m)I>oF#7c?L=S_rX)rY;t^UYjVWltc!n@S%vFBST`AkTtw+Nq!E<_N#G;+`{ zI1F(yj2oORM-FdosJ$<=x=PO;yEh()c-qI<62=@$L$usYcNW2-ObH8*`KV)KdJq5g zz(v2o6@PtL&ar4}S)&u}m`%?+1x9u9-Mv5174F4EZ@O*jGIHHH^^?skN8 z-xK5d~pz_kR8v?}CHNl*4t^sNV<3L|S6buNiqiK;k+4{T5n%!StI-4wPf z{(sf`c(D6~SsLIH;9_qT{-Ph~aFT6{rGb*Wm4|G@9p*W(;BQO?L~jL(OS5?(D8J~6lecd;cmlMb1I>%^xG!{=V@%cx}0G?U*nfbu*q)tCNE}CQ{5l}x8A_Y{C)}U{tTwCZ?=bewCLm`U>EVaZ=ScfPVEXxjG{VadXZhcqw&xLq>*&~p z(D0U~x<_&9uN*MUu3J=&05TtYXjBkGHMR;bQB8=?tw~5^Yw(sO|Fv9u`o#eU4S$#Y zJ8KRC7|0q#c=0E-J79J_zJx8uUr`n(=@q+1p4*EGG*hZrO6N@$Iv7iZ@;Z=9C=X3V zz@(NQs%Iq70%^ZL*b}J`nm>{3+f*2~0*x{C8R-le9PtPU>q94F;52z1t?{K8)RG^U z>qG>*RTwKrx1N~tWwL}ypELy5)YPAHE|1@tZoI)5>wui@k$;{!9W|4IJt^Li#lrzAJfIWj}M~9wdP; zW_q`vMUrAMN0N(lJPBgp#nkN^KJL;C3OoGr%gSWssN$)#;ntT;n^f-G3Qibz#bR7XDbN z(1QFZFal5<*jWb?3gTHK=j(U3e5DrTs{_LaJXdI$;t2Jm1=pg^`>ux6*Lzx;lRPT- z&O3--gx~5}>jV3qKsDV2%}j!~t;Nzba7CE3?{{v*rbkQ%Zv}urATWB3^2x&e94bzz zq^PrrO)`y`90Zm!vw!xV6J&l6vmgE97XhKLMjo1yD;L|PdjY?{pp$K4QHMK(XaNnQ zs@e2>|FC@L$uqr}P8s!Z&W_WliGgQ-MlxsRN%P4Z0IhK!t^~~NtRAU3h#R0rAk1r7 zLOM2Q1!1~&HoI(ij?EsbC`vB7xiJdLo?eMrF!1b&AD`K&s(+*WNkL=?D*5$NPnpJm zduRnxN^Om0ffsP#2(r`69mrE7tzW1?BHgI@NY~OWI*PoM_6o5~*eIA6D(<)K0fQ_& z=GeqjJs1Jmf(l0u9j*Z2bWeg^zT81YEZCPhNUN@NbrR>NsEE${rMq;oCQSVrP++l=BvJLn1^Io-k=xq7v~JpI427>xn}09)K1l_RP?!pIPu^eklEBo} zo9>b68%YZmi!4r)pt)>h-Bzvl(>V8uK~zz1k2a!XIO=Z<1FddUAY^!!eW0=9$G7=X zP}RQi7xYF7)-zk4v)0y7@7!8aO~>dcgLd-U3e&)cc74LO;*yBFcr?#Z?$A;>;s?1$ zbmkuLF@L(-n1nTLgiMucBtdGHVYO8ZBKhU4HqDq87o z=OF-5i*WfOBxQYZaovNX|1Rt5+(RIX#W?}x^l>KMk=|@jkS0VY;;XJ(qx#qiVG2|#smim5T>`V-#Rw_nRe$EbqZ6 zJ>g61kGR)i-03Ij!TMpporn92vI<->de6m>(DZ}wCC$NGV;Uod%|41nE=L!XbAK&T znj4n5oYMo|wSuOgjs~b()w>u1&g`xZdC(44ESFVV@^b@vO?@~&{+tIOsx4m z?8weO#Xg+Cym|%5&rkwAiVc7Y__rrLz}@jxF85wibCe`;xRhMJJNiDcu?9b&FQrU$ zvK_H@aP@>kGNt7^3(E*CaWKCG4u7+FGDwedNIY#t-W)$P*^BmXr8-5ll2Y1dsTXpQ zm}Q84PWY;Ne3=oUFVe-7%(2U})Pd;GA=y_mfe=v&hjNqi|8Chp=(EfiKn}fv{cK4+`XirAa#k<4#F4m^O7$gkhb!PL!`-u(b=H-8UCB%2an zN$gfN8v(gi??TPVFVXkolEvDLh6x$31BA&!q5>^uxlo?(?zmYE(Nc*@{_*1^eJyd> zQ8a5Z@r)Agc#=QJ+|hu#j%K|E{M<)pBzzDvKhrwGa7&Hq<)vxOP=Bu$>4Yd~8IfHn_ZY1i2k;o%w8XFnq{1D^VK_=Wbm|XP6 zg0M9;MES%lfT_+4>d|QE7AKLgr(G#&*7+m0J78X$aS1$)|%MH*QsPGnp{;j zzPk{TPKaO8!>;jFFr6|Pdhwpct`-E+Mu`L2IC?bG^;5-~)8@0Q4D1fahVx6${kj(m ze>wOK2y;!mjKjJ?uz$>d6fhB*$R+T1Us4C%=CtV2m9Pc~+-}`gWZR_#QMa3d)|#Q# zkd^0N_@s5s0%Li`Y1c`m@m2%_MYE5a)8?qvlw#Le01aVzKXbxs|7;d#(0Yhg`ot%_ zc$CEx-CdV5h8VwO-b-{Rq=rH~{vDw@py%Hl@a!khPd!C>EPu&pxNM2ug2g6K$#~hH;T9(VeB(&@-ZcCx z;cVZ)iDorekU}{8!BH&&vf+E7I$b!(xasMBY=j^bVeg#{+MUW*RP>p6D{BT(rbQd8 zozVOw>-o}u%YUzvR`Z_2kRL|CYqkTe;(l7Bz%8t1AzE9WJdLf(aaNfuc6n&TchDWk zCIyL)uuV3z>ZoZ_mP2E*{URplj!icNmIkv#XIeA|i^Riq>@`+uq1%IMG<)%$pU^ouYq$Nt#Dc2#g zXGH?|uq^Zyzq#oo5vsL{lP7g;~Ep(a%w^&w_ znd1L!T#Z4rKXYq;fus-@$W$@d;uNXvSNcrbXw#DMiKT~c2RG~5W}cLjQ)+nhrW47$ zQ#+Ee7Cz-9k8dF37Nt~nPI469x$br@v~O^Gt$)-p(``)1>RuX@0sO1!2B#--aYpw( zV2}H6{DRl9ukzZZcWzhNJ5dO;8GE1fZxAE*ZlRVaqz5X3pRniXGbQLC%>#m9za>B_ z?XGJ zxT+znLa{nKII5hH3mLowr!AAT5IV_Ky2)bk!BJ{8W2Ol^v#ElF{Sk%Xscl{vb@Ow!){YUyOMKreK_?yf9e*TCh#2lq@bHd5D36hO~z zg$V?&gl%fddlTmVcLFUNcc;b>fz_^8pC}rv{E|15kN9LOLHfQI$KczyOuZ%0b$lFiO2A zleHW*iw?>F3cmH1%^K8t@44@y8*)YMzo^XL&P*~&JC@9vIIJrwzh5)tz_c?x9Q*0A z956@5sb?8jpa) znRraQxg#&ksocts@#45iT}b=^<+Di)vD3gT;p{hP;DnO98jvck)_zH-F1o0utl6#4 zgw@gA#`>dG0EpXw1@t()b$_5O0Hg?}@sH^wrFY)M3KGIfjl*B$ffW6jTgJ!jix1@0XL~-#+8>dMIKq{!w#;Z_gM! zT-@*m=AB~^>y@mKfPX{;RyHV}dT_9myraPjc0j+>)#7aT z3SW2%0AJ^`!0|B*KBJitE}vKU29J>_RkHytBhw|^__|v)8?t_rBR!wXqvFa+>5KqH zRQlP#q zbDs7-`6DAvPGOctu}USoKofC11PDo3pLkwTHKb;s;vGWGDE0WKKT}d2qyC)By9scTx~!}7ERjKZor%YG7-)03SW&7 zIKU;|Z$SMbU_$K5PiueE_vg0mH1XMzC;lGldoE9)bE=2#PEy__`I0z9zb~aQLA69ENvk{bIMGO~<&f4G7VJAzLwuFC(2GYiUs!(k(2OYS% z>wM`N!@s4zYGYzKWA@oB7s@o(xwP2dO|k>QWZztGKN$pluHT@A7PNozI4y0N)1OP`G1bOJ znhIUnY{{}svzvb~;2Yc5{w_zA*Ur*>gB)a0AMS+Ye5V%FhU521GWrx&mOXZ9BeS(h zyAps?yoPM(Hg%Ww#)OC=#lzhhSaxIkqOGiLP5^q0=_y%pky}fcv*LAPVG@?w;9GC$ z3fOwa1`xcxotwZ^Vux!f-^nRb^wZMO0J~M{MDyfmW9EN#k{2hp^>o7{^aW?K9o5M8 z`FS^dl+h}Dk6O;>RQvgRJ0JrEqf`odky}D6CEjuA4#k<1Ky4sR7{tVklEksPKqcw- zhJ>%!?^$I*f}>BR!aD!wQ?3=^n@@kuPGji$A$;1KT2 zi7R|(TFHO%0&|y%fG0j{VKL<^n91vrNrn9SPFOovq-MgN_*DgR7I=WzGdsSocxoOX z%ymP80Dm>b&?f4UzR#;}08+@LpikBnx}W{v_T5RN$7edTjbP^%d0@jloM^4mn-&)sbM=W9kCS3;Z(X06O)s+DsgXD|Zjs`Oo)(3q4SFmD=r~*1zB)#Pn)>=m zNB)1ajQnbcISb?lp*kc&_utJ+!B5!eE#905s=BGToE!(~>sRhY=L@(YHiu57F!7cI zn=}Wk_G-_z!o0D)lLK7`7AVNB+FBr(o^-g672k4f-MEj|?L~H>!cDXJ``lp@I76dl z3T%(@wL=;g2jPR!CsLV7N;2W`+{3LFEPj8mW2&L&FvwRmA6aD+slIu{1m$(gA5l^$ z4G%CkO7+_(6~(OP)`tKqTa9)e)bDf9wq=Cn3*CmFMjhi=1A0q_wu7t-%^1ypTXsxl z;`8>+r(xoPV%wnp{37BL9qO3U;4WRUJ%p%IG!3yqAnLq!?Mk7`AM(o}MCesSo2v_EdPwl#Dfeshps5yGb=ZVj*zqhMzb;NMo zKcz_@KHrtrq|4 zxBRUE<|76$H8e3bIG5~xH^UO&m1^zsfn#m|aVbY^9W=dHm9aBa#C7E(=q7>6~0Rkc%EYmSA zcoqpuA|v$Fnni!k;X1^lTg;3ROgm;`&$MS&%1I&S>n z3=;(O#+F4Ma$=ZZanV7P0~k^ztY9tzL>S{BGJ>(-&srQ~c*%iNQlYe;SP~85BgbL` zrIBHA3^F1M(Ey7}P7qE5x6*aES1aNdM-OjUsDfM#6-J7QayTLYsEY-E80um;5R|#t zgJ*(5_#l4)ZjYE3@Eb080c#K>UQr!?+N+6&3k@K6^s@*UDD*axlV{HuKWF?!evvbN z!k(1rw94|uf!t%?eK&b>S>|k(&e?H(cc0CZSzhdI9ir+X&&#SV$^>$|AIudDe*kLqsn53(YhY}B3-0K zGR=O|Rxe-?JEpT)c9U;sq8a+O$luS?yQE|nziA_<3n(og)T+NZ3;G|ipud8JE5xc` z?-)PLs%skj?Ae50e7;W^f1BK-6Mmd8s&rA6EK<~Q!r!H3zAUC`NjW97yh>+Ta+H5! zR|0n6MGiSvn8-op^<+(5xIE$K%lB2NpJj`W6MmEzv$P0; z<%Y16Dq8|O6`dQANM z%deP~2Tn+2Ax|>cVmY5*Z|f@Su0kFt%;SF@x*~BM2qeZGx<-*W&^z^1&O_)x|0$do zj6X#_M~bUGjdY1L*PKgAb@e$Kkq+q`!#U=|^gIQ@h=h|<#xK%O)zD{y5CKzz5HXJm zk(Gf)?d*%St~D1{#|Or2<)Ux@%I0-0B<|LxC2U3B*AnA4h_PQuOuRcW@g^}U+6aHA zFUQDMj_9T;{s}L3BVg=T28`W3V657C^4hW3@&_6VyB)elkvx!kmna;ch3g*aMda7A z9dEF0zLIUbJKJ`5w(SVpSZZKx^(YP>rsqlufxE|56wzQTu>}^^f)>_Twb8Oth*0R9 z3iYF7OxG}NsZQ5vER6{TD?PeK?X-U$Z)H$lx@Kun-yB8w^)(Tou0q}F24kCwa?POn zXT*95y}My89BX~(ZG+bXz`-~I(`t-CUE8Mx+qOk*8})7ax5m;Ig6ds65nxuOC1k94 ztRDy+_AzTE$m^B3A%Cn8uF>{JZtH}xVzHGX=XXwQO6&N30JM%rLFgEyQEY#a{{R1f z1CYJX^H0y~`FJ zyX-nYVYjSxFIn`Jb@2Z|vakY0xi2OQLbGk6d%7n4NV166N=(lLU=cR)8-;MWk%SW5 zBruL177XOKrOp1sBsxr1q5pp>sZrnv1L@eGP>{HqQM&tSS&tAsSJTK=s&es~Bm2K_ zUDS+{x9HhXi^xTF@P+mk8PXbQXgxs3)}y{K9I>3XKp zxpO+Sn}`6=b_}F=gAFbw1A#=i8mx?5c<^RBxBq8nrfO!Uinq+nZ*d#{Z<(26Gp{YN zsc+Hb_I{!H(=X)i*6qU*I5f5Edxd5%5KuI_W^Pk2I(K@t`fF!EaA13p8iGj}+$M$A ztVe}*2FmqzV2-TX}5HemeV4;ukxbaJ-tru=!x6;uiu}XJUxDO{)>MUxG+y{N*2{Uj>2wm zUwO9gksqa$v{W(lG_9P{o)FYwYnj}CpJq3=6|+ub50}>0_N9lImsK*)riY80d5RV^ zoLA}HkMPxm|J;mvm=cyxI7^dkNFZ8D!Hvn)T`KR+HfLt<;W zuaJPSnW8(8UfF*Uxp>_U*|Wp0TOnE-T-39{>%I;CF*f{i`oo*&Z=ar@UR+S9ZSeta z^!u8ephF6EEAaFRs1IKD!7HVv%~8(hseR~_N^hY z>ls4kt_&HO+|L)&e3mV4AUpf;AuZAcJ(Rjq{6ofc#D8DrRXTe=N6O&$^dxGYeyHlR zf;8}?tkQoXD?cJd@@al|m+;%q_qXYS-=jI70RjIjEpnbOQeOR;^Xj%pQ~n`e7SQlV zisb-?&GQ9PG@qwsiM0^FDbfT|nKk^7AMs;;!k_a~{({~;U`@-<_$y3u{)WHB+Kj*B z=lp_S@*kO({C$y3Kc*F-M0mH=02OOGp78g4%4dHZ2>1=Zb% z;3cp4lK+9o7W@QCa8J;B5WtCzPt9ja<#yo3IBgq$4HlNX{=6Ta<1YfqNiZ5pw z=qf`3QdFwuUt^IgB+q3roSTqDi8My<7s9OQE zLtx_Zz#hoP17LOtO!aXYwZdh-0j{kpjsbrvF+}C#ZFEK70M-LZe*nzw4ovO5G{9#WH;&6V96V744|EMfwMQq0vWPkJQ~rv3;a!_p;#@6mr3R;zlnM_*Khxxvq}yQ~^0YkOS}0flz6N8eWk zX}vFk^m+>*#Oo~pq1sM^Z+oO1X@>-9h9Fx2!>$`hho9?6zo8<0P^03JcBs~Jq#bhf z2Be{;;gAkmov?iEIA6>6>LE95lY}gbzJ6rWahxC(=Qoo&TXrAAv`KFjbAccx-%Y!l z^i@7f`DK}|^5dKPba5E8(`SH%G&e;vF-0{*LOvioF-9;oF*G$ZG(j>$Mm91rLozctI5kByH$^isMKwf1K3xhg zOl59obZ8(lGczC{mw;ITCx0c;NiqXa6ouh)q9;TfqHluen-J0WeJ`u91dA~+P?aiM zVQyez4OsyGYx31!@6{c=cO~g3AthvgJc;UtD=;LW2QHxssv!dxPy@9v0OwE#^)Lcw z&;X4v4yVurNtl2WXoeP;gkwlSE6l(Vv_U&`KqvHCO2s?6APqaP3x9jC4F@m_gV1Ls zvoY2W`!EVaR;C;m!>|Q87_)N!AC`qVn6e6AaW)O}umKCO35&1<%aFH +La trasnpilacion de COOL a IL se hizo basada en las definiciones de context y scope, que por lo +explicado anteriormente facilitaron grandemente el proceso, sobre todo a la hora de hacer llamados +a funciones propias de un tipo, como por ejemplo \verb|(Bool).type_name|, para mayor comodidad se +adiciono a nuestro context un diccionario que gurdaria los tipos de retorno de las expresiones el cual +seria calculado en la etapa de analisis semantico. + +La generacion del c\'odigo de maquina, es un tanto complicada ya que los recursos son limitados y +una misma instrucci\'on en dos condiciones distintas pueden generar resultados incorrectos, sobre la +base de las buenas pr\'acticas de programaci\'on em MIPS, usando los registros para sus prop\'ositos +recomendados y teniendo mucho cuidado en cuanto al paso de los argumentos, de las llamadas a los +m\'etodos y de los retornos, as\'i como el uso de direcciones de memoria v\'alidas, se logr\'o una +soluci\'on te\'oricamente correcta, aunque est\'a en proceso de correcci\'on de errores. \begin{thebibliography}{99} \bibitem{1} The Cool Reference Manual, Alex Aiken From 9837498ebb0d2ede07337e039d288cda47f94daa Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Fri, 4 Dec 2020 17:29:01 -0500 Subject: [PATCH 106/140] working in static methods --- src/code_generation/statics/IO.s | 56 ++++++++++------ src/code_generation/statics/String.s | 98 ++++++++++++++++++---------- tests/codegen/arith.mips | 29 +++----- tests/codegen/atoi.mips | 29 +++----- tests/codegen/book_list.mips | 29 +++----- tests/codegen/cells.mips | 29 +++----- tests/codegen/complex.mips | 29 +++----- tests/codegen/fib.mips | 29 +++----- tests/codegen/graph.mips | 29 +++----- tests/codegen/hairyscary.mips | 29 +++----- tests/codegen/io.mips | 29 +++----- tests/codegen/life.mips | 29 +++----- tests/codegen/list.mips | 29 +++----- tests/codegen/new_complex.mips | 29 +++----- tests/codegen/palindrome.mips | 29 +++----- tests/codegen/primes.mips | 29 +++----- tests/codegen/print-cool.mips | 29 +++----- tests/codegen/sort-list.mips | 29 +++----- 18 files changed, 225 insertions(+), 393 deletions(-) diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s index 5abfd78e..0151aa52 100644 --- a/src/code_generation/statics/IO.s +++ b/src/code_generation/statics/IO.s @@ -8,46 +8,60 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra \ No newline at end of file diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s index 241f3ac4..baafc92d 100644 --- a/src/code_generation/statics/String.s +++ b/src/code_generation/statics/String.s @@ -49,27 +49,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -81,22 +85,44 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra \ No newline at end of file +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra \ No newline at end of file diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index a089dbd3..e041e4db 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -193,36 +193,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index 035ebf96..5cfd4d29 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -103,36 +103,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index d44038a8..93783d4c 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -113,36 +113,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 3fdc4368..edcd1b4c 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -84,36 +84,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 670476c9..6259cd5a 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -78,36 +78,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index aa581254..aa9d9b34 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -67,36 +67,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index 7b29cc67..e7641e7e 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -170,36 +170,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 3cb2611f..478ec42d 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -82,36 +82,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index 4780f043..2d6ec0c6 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -93,36 +93,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 15289d36..c867c051 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -180,36 +180,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 6bb55f81..77550af7 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -85,36 +85,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 78c503e4..b973589c 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -83,36 +83,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index f2041a45..f6f7d31a 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -68,36 +68,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index c4bc6d67..812ee858 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -68,36 +68,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index d82a92a6..4b2262d7 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -65,36 +65,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 52c468aa..3ae49017 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -106,36 +106,23 @@ jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra IO.in_int: From 097dd4633dde31cad401f220ad0b6fd84fac33b5 Mon Sep 17 00:00:00 2001 From: hros18 Date: Sat, 5 Dec 2020 14:52:22 -0500 Subject: [PATCH 107/140] different aproach for bug fixxing, attempting bottom-up strategy --- src/visitors/to_mips.py | 35 ++++---- src/visitors/transpilator.py | 2 +- tests/codegen/arith.mips | 127 +++++++++++++++++++-------- tests/codegen/atoi.mips | 127 +++++++++++++++++++-------- tests/codegen/book_list.mips | 127 +++++++++++++++++++-------- tests/codegen/cells.mips | 127 +++++++++++++++++++-------- tests/codegen/complex.mips | 127 +++++++++++++++++++-------- tests/codegen/fib.mips | 127 +++++++++++++++++++-------- tests/codegen/graph.mips | 127 +++++++++++++++++++-------- tests/codegen/hairyscary.mips | 127 +++++++++++++++++++-------- tests/codegen/hello_world.mips | 154 +++++++++++++++++++++------------ tests/codegen/io.mips | 127 +++++++++++++++++++-------- tests/codegen/life.mips | 127 +++++++++++++++++++-------- tests/codegen/list.mips | 127 +++++++++++++++++++-------- tests/codegen/new_complex.mips | 127 +++++++++++++++++++-------- tests/codegen/palindrome.mips | 127 +++++++++++++++++++-------- tests/codegen/primes.mips | 127 +++++++++++++++++++-------- tests/codegen/print-cool.mips | 127 +++++++++++++++++++-------- tests/codegen/sort-list.mips | 127 +++++++++++++++++++-------- 19 files changed, 1556 insertions(+), 667 deletions(-) diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index e12666be..be5dda7f 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -71,34 +71,35 @@ def visit(self, node): @visitor.when(BinaryOperationIL) def visit(self, node): - self.code.append("lw $t0, {}($sp)\n".format(4 * node.leftOp)) - self.code.append("lw $t1, {}($sp)\n".format(4 * node.rightOp)) + self.code.append("sw $a0, 0($sp)\n")) + self.code.append("addiu $sp, $sp, -4\n") + self.code.append("lw $t1, 4($sp)\n") if node.symbol == '+': - self.code.append("add $t0, $t0, $t1\n") + self.code.append("add $a0, $a0, $t1\n") elif node.symbol == '-': - self.code.append("sub $t0, $t0, $t1\n") + self.code.append("sub $a0, $a0, $t1\n") elif node.symbol == '*': - self.code.append("mult $t0, $t1\n") - self.code.append("mflo $t0\n") + self.code.append("mult $a0, $t1\n") + self.code.append("mflo $a0\n") elif node.symbol == '/': - self.code.append("div $t0, $t1\n") - self.code.append("mflo $t0\n") + self.code.append("div $a0, $t1\n") + self.code.append("mflo $a0\n") elif node.symbol == '=': - self.code.append("seq $t0, $t0, $t1\n") + self.code.append("seq $a0, $a0, $t1\n") elif node.symbol == '>': self.code.append("li $t0, 1\n") - self.code.append("add $t1, $t1, $t3\n") - self.code.append("sge $t0, $t0, $t1\n") + self.code.append("add $t1, $t1, $t0\n") + self.code.append("sge $a0, $a0, $t1\n") elif node.symbol == '>=': - self.code.append("sge $t0, $t0, $t1\n") + self.code.append("sge $a0, $a0, $t1\n") elif node.symbol == '<=': - self.code.append("add $t0, $t1, $t0\n") + self.code.append("sge $a0, $t1, $a0\n") elif node.symbol == '<': - self.code.append("li $t3, 1\n") - self.code.append("add $t0, $t0, $t3\n") - self.code.append("sge $t0, $t1, $t0\n") - self.code.append("sw $t0, {}($sp)\n".format(4*node.var)) + self.code.append("li $t0, 1\n") + self.code.append("add $a0, $a0, $t0\n") + self.code.append("sge $a0, $t1, $a0\n") + self.code.append("sw $a0, 4($sp)\n") @visitor.when(UnaryOperationIL) def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index e561df26..644a0678 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -467,7 +467,7 @@ def visit(self, node, variables): result = variables.add_temp() self.code.append(PushIL()) - print('----------node {}---------'.format(node.id)) + # print('----------node {}---------'.format(node.id)) index = self.virtual_table.get_method_id(node.obj, node.id) if str(node.id) == 'type_name': index = self.virtual_table.get_method_id(self.context.exprs_dict[node.obj].name, node.id) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index e041e4db..56e88ff5 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -186,8 +186,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -210,11 +212,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -291,27 +318,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -323,25 +354,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index 5cfd4d29..345366fa 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -96,8 +96,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -120,11 +122,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -201,27 +228,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -233,25 +264,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index 93783d4c..57b3e855 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -106,8 +106,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -130,11 +132,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -211,27 +238,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -243,25 +274,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index edcd1b4c..d5f67883 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -77,8 +77,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -101,11 +103,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -182,27 +209,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -214,25 +245,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 6259cd5a..c08da339 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -71,8 +71,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -95,11 +97,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -176,27 +203,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -208,25 +239,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index aa9d9b34..44496adc 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -60,8 +60,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -84,11 +86,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -165,27 +192,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -197,25 +228,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index e7641e7e..99d70e24 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -163,8 +163,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -187,11 +189,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -268,27 +295,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -300,25 +331,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 478ec42d..cf6021e2 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -75,8 +75,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -99,11 +101,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -180,27 +207,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -212,25 +243,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index e063eb04..d4fe245d 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -58,48 +58,62 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra IO.in_string: -move $a3, $ra +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 la $a0, buffer -li $a1, 65536 +li $a1, 1024 li $v0, 8 syscall -sw $a1, 0($sp) +sw $fp, 0($sp) addiu $sp, $sp, -4 sw $a0, 0($sp) +addiu $sp, $sp, -4 jal String.length -addiu $sp, $sp, 4 -move $a2, $sp -addiu $a2, $a2, -1 -move $a0, $v0 +addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 +move $t0, $v0 la $a0, buffer -li $a2, 0 -_in_string.loop: -beqz $a2, _in_string.end -lb $a1, 4($sp) -sb $a1, 4($sp) +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _in_string.loop -_in_string.end: -sb $zero, 0($sp) -move $ra, $a3 -jr $ra +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -176,27 +190,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -208,25 +226,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index 2d6ec0c6..23b7be79 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -86,8 +86,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -110,11 +112,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -191,27 +218,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -223,25 +254,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index c867c051..30692ba3 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -173,8 +173,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -197,11 +199,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -278,27 +305,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -310,25 +341,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 77550af7..02e7b5eb 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -78,8 +78,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -102,11 +104,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -183,27 +210,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -215,25 +246,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index b973589c..12d22c89 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -76,8 +76,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -100,11 +102,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -181,27 +208,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -213,25 +244,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index f6f7d31a..3a98b153 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -61,8 +61,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -85,11 +87,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -166,27 +193,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -198,25 +229,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 812ee858..131da837 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -61,8 +61,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -85,11 +87,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -166,27 +193,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -198,25 +229,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 4b2262d7..294cfc6a 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -58,8 +58,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -82,11 +84,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -163,27 +190,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -195,25 +226,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 3ae49017..d0474d0b 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -99,8 +99,10 @@ jr $ra IO.out_int: +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 1 -lw $a0, -4($sp) +lw $a0, 8($sp) syscall jr $ra @@ -123,11 +125,36 @@ li $v0, 9 syscall move $t0, $v0 la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) li $v0, 5 syscall +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.copy: lw $a1, -4($sp) @@ -204,27 +231,31 @@ move $ra, $a2 jr $ra String.substr: -lw $a0, -12($sp) +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $v1, $v0 -lw $a0, -4($sp) -lw $a1, -8($sp) -add $a0, $a0, $a1 -lw $a2, -12($sp) -_stringsubstr.loop: -beqz $a2, _stringsubstr.end -lb $a1, 0($a0) -beqz $a1, _substrexception -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -addiu $a2, $a2, -1 -j _stringsubstr.loop -_stringsubstr.end: -sb $zero, 0($v1) -jr $ra +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 0($fp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra _substrexception: @@ -236,25 +267,47 @@ syscall _stringcmp: -li $v0, 1 -_stringcmp.loop: -lb $a2, 0($a0) -lb $a3, 0($a1) -beqz $a2, _stringcmp.end -beq $a2, $zero, _stringcmp.end -beq $a3, $zero, _stringcmp.end -bne $a2, $a3, _stringcmp.differents +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 addiu $a0, $a0, 1 -addiu $a1, $a1, 1 -j _stringcmp.loop -_stringcmp.end: -beq $a2, $a3, _stringcmp.equals -_stringcmp.differents: -li $v0, 0 -jr $ra -_stringcmp.equals: -li $v0, 1 -jr $ra +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 0($fp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra inherit: beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false From f74fc912d87a98a6a49ee2265d5248982d6bfbef Mon Sep 17 00:00:00 2001 From: hros18 Date: Sat, 5 Dec 2020 15:46:33 -0500 Subject: [PATCH 108/140] some corrections in returns, functions beginings, and some statics method defs --- .../nodesIL/methods_node_il.py | 2 + src/code_generation/statics/IO.s | 18 +- src/code_generation/statics/Object.s | 13 + src/code_generation/statics/String.s | 6 + src/code_generation/statics/inherit.s | 5 + src/visitors/to_mips.py | 42 +- src/visitors/transpilator.py | 4 +- tests/codegen/arith.mips | 2566 ++++---- tests/codegen/atoi.mips | 2264 ------- tests/codegen/book_list.mips | 1510 ----- tests/codegen/cells.mips | 1474 ----- tests/codegen/complex.mips | 963 --- tests/codegen/fib.mips | 649 -- tests/codegen/graph.mips | 3898 ----------- tests/codegen/hairyscary.mips | 1454 ----- tests/codegen/hello_world.mips | 448 -- tests/codegen/io.mips | 868 --- tests/codegen/life.mips | 5719 ----------------- tests/codegen/list.mips | 1061 --- tests/codegen/new_complex.mips | 1215 ---- tests/codegen/palindrome.mips | 812 --- tests/codegen/primes.mips | 887 --- tests/codegen/print-cool.mips | 566 -- tests/codegen/sort-list.mips | 1769 ----- 24 files changed, 1310 insertions(+), 26903 deletions(-) delete mode 100644 tests/codegen/atoi.mips delete mode 100644 tests/codegen/book_list.mips delete mode 100644 tests/codegen/cells.mips delete mode 100644 tests/codegen/complex.mips delete mode 100644 tests/codegen/fib.mips delete mode 100644 tests/codegen/graph.mips delete mode 100644 tests/codegen/hairyscary.mips delete mode 100644 tests/codegen/hello_world.mips delete mode 100644 tests/codegen/io.mips delete mode 100644 tests/codegen/life.mips delete mode 100644 tests/codegen/list.mips delete mode 100644 tests/codegen/new_complex.mips delete mode 100644 tests/codegen/palindrome.mips delete mode 100644 tests/codegen/primes.mips delete mode 100644 tests/codegen/print-cool.mips delete mode 100644 tests/codegen/sort-list.mips diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py index fd475233..df5e6548 100644 --- a/src/code_generation/nodesIL/methods_node_il.py +++ b/src/code_generation/nodesIL/methods_node_il.py @@ -65,6 +65,8 @@ def __str__(self): class ReturnIL(NodeIL): + def __init__(self, sizeof = 0): + self.sizeof = sizeof def __str__(self): return 'return\n' diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s index 0151aa52..3d72419c 100644 --- a/src/code_generation/statics/IO.s +++ b/src/code_generation/statics/IO.s @@ -1,18 +1,26 @@ IO.out_string: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $v0, 4 lw $a0, 8($sp) syscall +lw $ra, 4($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra IO.out_int: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $v0, 1 lw $a0, 8($sp) syscall +lw $ra, 4($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra @@ -47,8 +55,8 @@ bne $t1 , $t2 not_slash sb $zero, ($t0) not_slash: move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 +lw $ra, 4($fp) +addiu $sp, $sp, 8 lw $fp, 0($sp) jr $ra @@ -61,7 +69,7 @@ lw $a0, 4($fp) li $v0, 5 syscall move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 +lw $ra, 4($fp) +addiu $sp, $sp, 8 lw $fp, 0($sp) -jr $ra \ No newline at end of file +jr $ra \ No newline at end of file diff --git a/src/code_generation/statics/Object.s b/src/code_generation/statics/Object.s index 0e1bf28a..51c5584a 100644 --- a/src/code_generation/statics/Object.s +++ b/src/code_generation/statics/Object.s @@ -1,4 +1,7 @@ Object.copy: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 lw $a1, -4($sp) lw $a0, -8($sp) li $v0, 9 @@ -15,9 +18,19 @@ addiu $a3, $a3, 4 beq $a0, $zero, _copy.end j _copy.loop _copy.end: +lw $ra, 4($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.abort: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 10 syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s index baafc92d..cf4e78db 100644 --- a/src/code_generation/statics/String.s +++ b/src/code_generation/statics/String.s @@ -1,5 +1,8 @@ String.length: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 lw $a0, 4($sp) _stringlength.loop: lb $a1, 0($sp) @@ -14,6 +17,9 @@ jr $ra String.concat: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 move $a2, $ra jal String.length move $v1, $v0 diff --git a/src/code_generation/statics/inherit.s b/src/code_generation/statics/inherit.s index b322fb0a..d02c3959 100644 --- a/src/code_generation/statics/inherit.s +++ b/src/code_generation/statics/inherit.s @@ -1,4 +1,7 @@ inherit: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false lw $a0, ($a0) @@ -8,4 +11,6 @@ li $v0, 1 jr $ra inherit_false: li $v0, 0 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index be5dda7f..a4cd2e41 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -71,7 +71,7 @@ def visit(self, node): @visitor.when(BinaryOperationIL) def visit(self, node): - self.code.append("sw $a0, 0($sp)\n")) + self.code.append("sw $a0, 0($sp)\n") self.code.append("addiu $sp, $sp, -4\n") self.code.append("lw $t1, 4($sp)\n") @@ -103,14 +103,14 @@ def visit(self, node): @visitor.when(UnaryOperationIL) def visit(self, node): - self.code.append("lw $t0, {}($sp)\n".format(4*node.op)) + self.code.append("lw $a0, 0($sp)\n") if node.symbol == '~': - self.code.append("not $t0, $t0\n") + self.code.append("not $a0, $a0\n") else: self.code.append("li $t1, 1\n") - self.code.append("sub $t0, $t1, $t0\n") - self.code.append("sw $t0, {}($sp)\n".format(4 * node.var)) + self.code.append("sub $a0, $t1, $a0\n") + self.code.append("sw $a0, 4($sp)\n") #allocate @visitor.when(AllocateIL) @@ -125,32 +125,33 @@ def visit(self, node): #assignment @visitor.when(VarToVarIL) def visit(self, node): - self.code.append("lw $t0, {}($sp)\n".format(4 * node.right)) - self.code.append("sw $t0, {}($sp)\n".format(4 * node.left)) + self.code.append("lw $a0, {}($fp)\n".format(4 * node.right)) + self.code.append("sw $a0, {}($fp)\n".format(4 * node.left)) @visitor.when(VarToMemoIL) def visit(self, node): - self.code.append("lw $t0, {}($sp)\n".format(4*node.right)) - self.code.append("lw $t1, {}($sp)\n".format(4*node.left)) - self.code.append("sw $t1, {}($sp)\n".format(4*node.offset)) + self.code.append("lw $a0, {}($fp)\n".format(4*node.right)) + self.code.append("lw $t1, {}($fp)\n".format(4*node.left)) + self.code.append("sw $t1, {}($fp)\n".format(4*node.offset)) @visitor.when(MemoToVarIL) def visit(self, node): - self.code.append("lw $t0, {}($sp)\n".format(4 * node.right)) - self.code.append("lw $t1, {}($t0)\n".format(4*node.offset)) - self.code.append("sw $t1, {}($sp)\n".format(4*node.left)) + self.code.append("lw $a0, {}($fp)\n".format(4 * node.right)) + self.code.append("lw $t1, {}($a0)\n".format(4 * node.offset)) + self.code.append("sw $t1, {}($fp)\n".format(4 * node.left)) @visitor.when(ConstToMemoIL) def visit(self, node): - self.code.append("lw $t0, {}($sp)\n".format(4 * node.left)) + self.code.append("lw $a0, {}($fp)\n".format(4 * node.left)) self.code.append("li $t1, {}\n".format(node.right)) - self.code.append("sw $t1, {}($t0)\n".format(4*node.offset)) + self.code.append("sw $t1, {}($a0)\n".format(4*node.offset)) #methods @visitor.when(LabelIL) def visit(self, node): self.code.append(node.label + ':\n') if node.func: + self.code.append("move $fp, $sp\n") self.code.append("sw $ra, 0($sp)\n") self.code.append("addiu $sp, $sp, -4\n") @@ -195,14 +196,9 @@ def visit(self, node): @visitor.when(ReturnIL) def visit(self, node): - self.code.append("lw $v0, 4($sp)\n") - self.code.append("li $a0, 0\n") - self.code.append("sw $a0, ($sp)\n") - self.code.append("addi $sp, $sp, -4\n") - # self.code.append("lw $ra, 4($sp)\n") - self.code.append("li $a0, 0\n") - self.code.append("sw $a0, ($sp)\n") - self.code.append("addi $sp, $sp, -4\n") + self.code.append("lw $ra, 4($sp)\n") + self.code.append("addiu $sp, $sp, {}\n".format(4*node.sizeof + 8)) + self.code.append("lw $fp, 0($sp)\n") self.code.append("jr $ra\n") @visitor.when(DispatchIL) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 644a0678..46b5d18d 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -98,7 +98,7 @@ def setBuiltInTypes(self): for t in built_in: self.code.append(LabelIL(t, 'Constructor', True)) self.code.append(PushIL()) - self.code.append(ReturnIL()) + self.code.append(ReturnIL(1)) self.setClassTypeName(t) def setClassConstructor(self, attributes): @@ -200,7 +200,7 @@ def visit(self, node): if self.current_class == 'Main' and node.id == 'main': self.code.append("j Object.abort\n") else: - self.code.append(ReturnIL()) + self.code.append(ReturnIL(len(node.params))) @visitor.when(VarDeclarationNode) def visit(self, node, variables): diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 56e88ff5..a5c24cfd 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -408,96 +408,81 @@ li $v0, 0 jr $ra Object.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra Object.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, Object_name jr $ra Int.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra Int.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, Int_name jr $ra IO.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra IO.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, IO_name jr $ra Bool.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra Bool.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, Bool_name jr $ra String.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra String.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, String_name @@ -533,49 +518,43 @@ addi $sp, $sp, -4 j Object.abort #--------------End Initial Code--------------- A.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 12($sp) -sw $t1, 4($sp) +lw $a0, 4($fp) +lw $t1, 12($fp) +sw $t1, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra A.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, A_name jr $ra A.value: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $a0, 12($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra A.set_var: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block @@ -586,44 +565,36 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) +lw $a0, 16($fp) +sw $a0, 4($fp) +lw $a0, 4($fp) +lw $t1, 20($fp) +sw $t1, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) +lw $a0, 28($fp) +sw $a0, 4($fp) +lw $a0, 4($fp) +sw $a0, 16($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra A.method1: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $a0, 16($fp) +sw $a0, 4($fp) +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra A.method2: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -642,21 +613,22 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) +lw $a0, 32($fp) +sw $a0, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) +lw $a0, 32($fp) +sw $a0, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 48($sp) -sw $t1, -4($sp) +lw $a0, 4($fp) +lw $t1, 48($fp) +sw $t1, -4($fp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -677,8 +649,8 @@ syscall sw $v0, 4($sp) la $a1, B_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result B.Constructor la $v0, 1 @@ -690,30 +662,26 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 68($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) +lw $a0, 4($fp) +sw $a0, 48($fp) addiu $sp, $sp, 8 -lw $t0, 64($sp) -sw $t0, 5555($sp) +lw $a0, 64($fp) +sw $a0, 5555($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 16 jr $ra A.method3: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -732,14 +700,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, -4($sp) +lw $a0, 28($fp) +sw $a0, 4($fp) +lw $a0, 0($sp) +not $a0, $a0 +sw $a0, 4($sp) +lw $a0, 4($fp) +lw $t1, 36($fp) +sw $t1, -4($fp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -760,8 +728,8 @@ syscall sw $v0, 4($sp) la $a1, C_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result C.Constructor la $v0, 1 @@ -773,30 +741,26 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 56($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 40($sp) +lw $a0, 4($fp) +sw $a0, 40($fp) addiu $sp, $sp, 8 -lw $t0, 52($sp) -sw $t0, 4444($sp) +lw $a0, 52($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra A.method4: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition @@ -810,19 +774,20 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) +lw $a0, 20($fp) +sw $a0, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) +lw $a0, 28($fp) +sw $a0, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $t1, $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_1 @@ -842,21 +807,22 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) +lw $a0, 52($fp) +sw $a0, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) +lw $a0, 60($fp) +sw $a0, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 72($sp) -sw $t1, -4($sp) +lw $a0, 4($fp) +lw $t1, 72($fp) +sw $t1, -4($fp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -877,8 +843,8 @@ syscall sw $v0, 4($sp) la $a1, D_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result D.Constructor la $v0, 1 @@ -890,23 +856,23 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 92($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) +lw $a0, 4($fp) +sw $a0, 48($fp) addiu $sp, $sp, 8 -lw $t0, 88($sp) -sw $t0, 11111111($sp) +lw $a0, 88($fp) +sw $a0, 11111111($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) +lw $a0, 4($fp) +sw $a0, 32($fp) j _fi_1 _if_1: #Let @@ -925,21 +891,22 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) +lw $a0, 68($fp) +sw $a0, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) +lw $a0, 68($fp) +sw $a0, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 84($sp) -sw $t1, -4($sp) +lw $a0, 4($fp) +lw $t1, 84($fp) +sw $t1, -4($fp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -960,8 +927,8 @@ syscall sw $v0, 4($sp) la $a1, D_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result D.Constructor la $v0, 1 @@ -973,34 +940,30 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 104($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 104($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) +lw $a0, 4($fp) +sw $a0, 48($fp) addiu $sp, $sp, 8 -lw $t0, 100($sp) -sw $t0, 14141414($sp) +lw $a0, 100($fp) +sw $a0, 14141414($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) +lw $a0, 4($fp) +sw $a0, 44($fp) _fi_1: addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 16 jr $ra A.method5: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -1027,18 +990,19 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 44($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) +lw $a0, 44($fp) +sw $a0, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -add $t0, $t1, $t0 -sw $t0, 12($sp) +sge $a0, $t1, $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _body_2 @@ -1056,24 +1020,25 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 68($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) +lw $a0, 72($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) +mult $a0, $t1 +mflo $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 80($sp) -sw $t1, -4($sp) +lw $a0, 4($fp) +lw $t1, 80($fp) +sw $t1, -4($fp) #Assignment #Binary li $a0, 0 @@ -1082,29 +1047,30 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 88($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 100($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 44($sp) +lw $a0, 4($fp) +lw $t1, 100($fp) +sw $t1, -4($fp) +lw $a0, 4($fp) +sw $a0, 44($fp) addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_2 _pool_2: -lw $t0, 92($sp) -sw $t0, 7777($sp) +lw $a0, 92($fp) +sw $a0, 7777($fp) addiu $sp, $sp, 8 #Point-Dispatch li $a0, 0 @@ -1126,8 +1092,8 @@ syscall sw $v0, 4($sp) la $a1, E_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result E.Constructor la $v0, 1 @@ -1139,49 +1105,42 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 52($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 36($sp) +lw $a0, 4($fp) +sw $a0, 36($fp) addiu $sp, $sp, 8 -lw $t0, 48($sp) -sw $t0, 4444($sp) +lw $a0, 48($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra B.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra B.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, B_name jr $ra B.method5: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -1200,22 +1159,23 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) +lw $a0, 28($fp) +sw $a0, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) +lw $a0, 32($fp) +sw $a0, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) +mult $a0, $t1 +mflo $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 44($sp) -sw $t1, -4($sp) +lw $a0, 4($fp) +lw $t1, 44($fp) +sw $t1, -4($fp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -1236,8 +1196,8 @@ syscall sw $v0, 4($sp) la $a1, E_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result E.Constructor la $v0, 1 @@ -1249,49 +1209,42 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 64($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) +lw $a0, 4($fp) +sw $a0, 48($fp) addiu $sp, $sp, 8 -lw $t0, 60($sp) -sw $t0, 4444($sp) +lw $a0, 60($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra C.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra C.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, C_name jr $ra C.method6: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -1310,14 +1263,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, -4($sp) +lw $a0, 28($fp) +sw $a0, 4($fp) +lw $a0, 0($sp) +not $a0, $a0 +sw $a0, 4($sp) +lw $a0, 4($fp) +lw $t1, 36($fp) +sw $t1, -4($fp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -1338,8 +1291,8 @@ syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 @@ -1351,30 +1304,26 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 56($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 40($sp) +lw $a0, 4($fp) +sw $a0, 40($fp) addiu $sp, $sp, 8 -lw $t0, 52($sp) -sw $t0, 4444($sp) +lw $a0, 52($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra C.method5: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -1397,33 +1346,35 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) +lw $a0, 32($fp) +sw $a0, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) +lw $a0, 36($fp) +sw $a0, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) +mult $a0, $t1 +mflo $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) +lw $a0, 48($fp) +sw $a0, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 28($sp) +mult $a0, $t1 +mflo $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 56($sp) -sw $t1, -4($sp) +lw $a0, 4($fp) +lw $t1, 56($fp) +sw $t1, -4($fp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -1444,8 +1395,8 @@ syscall sw $v0, 4($sp) la $a1, E_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result E.Constructor la $v0, 1 @@ -1457,49 +1408,42 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 76($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 60($sp) +lw $a0, 4($fp) +sw $a0, 60($fp) addiu $sp, $sp, 8 -lw $t0, 72($sp) -sw $t0, 4444($sp) +lw $a0, 72($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra D.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra D.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, D_name jr $ra D.method7: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -1517,19 +1461,20 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 32($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $t1, $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_3 @@ -1548,13 +1493,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) +lw $a0, 60($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_4 @@ -1573,13 +1519,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) +lw $a0, 84($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_5 @@ -1598,13 +1545,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) +lw $a0, 108($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_6 @@ -1616,8 +1564,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 124($sp) -sw $t0, 4($sp) +lw $a0, 124($fp) +sw $a0, 4($fp) #Args: 0 #Binary li $a0, 0 @@ -1626,17 +1574,18 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 132($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 132($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Integer li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 #Dispatch in place #obj 7 offset 36 result D.method7 @@ -1644,41 +1593,41 @@ jal D.method7 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 52($sp) +lw $a0, 4($fp) +sw $a0, 52($fp) j _fi_6 _if_6: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 56($sp) +lw $a0, 4($fp) +sw $a0, 56($fp) _fi_6: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 84($sp) +lw $a0, 4($fp) +sw $a0, 84($fp) j _fi_5 _if_5: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 88($sp) +lw $a0, 4($fp) +sw $a0, 88($fp) _fi_5: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 116($sp) +lw $a0, 4($fp) +sw $a0, 116($fp) j _fi_4 _if_4: li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 120($sp) +lw $a0, 4($fp) +sw $a0, 120($fp) _fi_4: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 148($sp) +lw $a0, 4($fp) +sw $a0, 148($fp) j _fi_3 _if_3: #Self-Dispatch @@ -1689,8 +1638,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 176($sp) -sw $t0, 4($sp) +lw $a0, 176($fp) +sw $a0, 4($fp) #Args: 0 #Unary li $a0, 0 @@ -1699,53 +1648,46 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 184($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) +lw $a0, 184($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +lw $a0, 0($sp) +not $a0, $a0 +sw $a0, 4($sp) #Dispatch in place #obj 5 offset 47 result D.method7 jal D.method7 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 168($sp) +lw $a0, 4($fp) +sw $a0, 168($fp) _fi_3: addiu $sp, $sp, 8 -lw $t0, 184($sp) -sw $t0, 4444($sp) +lw $a0, 184($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra E.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra E.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, E_name jr $ra E.method6: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -1764,21 +1706,22 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) +lw $a0, 28($fp) +sw $a0, 4($fp) #Integer li $a0, 8 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 12($sp) +div $a0, $t1 +mflo $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 44($sp) -sw $t1, -4($sp) +lw $a0, 4($fp) +lw $t1, 44($fp) +sw $t1, -4($fp) #Point-Dispatch li $a0, 0 sw $a0, ($sp) @@ -1799,8 +1742,8 @@ syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 @@ -1812,49 +1755,42 @@ addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 64($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) +lw $a0, 4($fp) +sw $a0, 48($fp) addiu $sp, $sp, 8 -lw $t0, 60($sp) -sw $t0, 4444($sp) +lw $a0, 60($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra A2I.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra A2I.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, A2I_name jr $ra A2I.c2i: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition @@ -1868,8 +1804,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) +lw $a0, 20($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -1877,10 +1813,11 @@ addiu $sp, $sp, -4 la $a0, string_7 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_8 @@ -1895,8 +1832,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) +lw $a0, 44($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -1904,10 +1841,11 @@ addiu $sp, $sp, -4 la $a0, string_9 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_10 @@ -1922,8 +1860,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) +lw $a0, 68($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -1931,10 +1869,11 @@ addiu $sp, $sp, -4 la $a0, string_11 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_12 @@ -1949,8 +1888,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) +lw $a0, 92($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -1958,10 +1897,11 @@ addiu $sp, $sp, -4 la $a0, string_13 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_14 @@ -1976,8 +1916,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) +lw $a0, 116($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -1985,10 +1925,11 @@ addiu $sp, $sp, -4 la $a0, string_15 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_16 @@ -2003,8 +1944,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) +lw $a0, 140($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -2012,10 +1953,11 @@ addiu $sp, $sp, -4 la $a0, string_17 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_18 @@ -2030,8 +1972,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 164($sp) -sw $t0, 4($sp) +lw $a0, 164($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -2039,10 +1981,11 @@ addiu $sp, $sp, -4 la $a0, string_19 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_20 @@ -2057,8 +2000,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) +lw $a0, 188($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -2066,10 +2009,11 @@ addiu $sp, $sp, -4 la $a0, string_21 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_22 @@ -2084,8 +2028,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 212($sp) -sw $t0, 4($sp) +lw $a0, 212($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -2093,10 +2037,11 @@ addiu $sp, $sp, -4 la $a0, string_23 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_24 @@ -2111,8 +2056,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 236($sp) -sw $t0, 4($sp) +lw $a0, 236($fp) +sw $a0, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -2120,10 +2065,11 @@ addiu $sp, $sp, -4 la $a0, string_25 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_26 @@ -2139,8 +2085,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 264($sp) -sw $t0, 4($sp) +lw $a0, 264($fp) +sw $a0, 4($fp) #Dispatch in place #obj 2 offset 66 result Object.abort jal Object.abort @@ -2151,138 +2097,134 @@ addiu $sp, $sp, 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) +lw $a0, 4($fp) +sw $a0, 16($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) +lw $a0, 4($fp) +sw $a0, 44($fp) j _fi_26 _if_26: #Integer li $a0, 9 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 48($sp) +lw $a0, 4($fp) +sw $a0, 48($fp) _fi_26: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 76($sp) +lw $a0, 4($fp) +sw $a0, 76($fp) j _fi_24 _if_24: #Integer li $a0, 8 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 80($sp) +lw $a0, 4($fp) +sw $a0, 80($fp) _fi_24: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 108($sp) +lw $a0, 4($fp) +sw $a0, 108($fp) j _fi_22 _if_22: #Integer li $a0, 7 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 112($sp) +lw $a0, 4($fp) +sw $a0, 112($fp) _fi_22: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 140($sp) +lw $a0, 4($fp) +sw $a0, 140($fp) j _fi_20 _if_20: #Integer li $a0, 6 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 144($sp) +lw $a0, 4($fp) +sw $a0, 144($fp) _fi_20: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 172($sp) +lw $a0, 4($fp) +sw $a0, 172($fp) j _fi_18 _if_18: #Integer li $a0, 5 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 176($sp) +lw $a0, 4($fp) +sw $a0, 176($fp) _fi_18: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 204($sp) +lw $a0, 4($fp) +sw $a0, 204($fp) j _fi_16 _if_16: #Integer li $a0, 4 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 208($sp) +lw $a0, 4($fp) +sw $a0, 208($fp) _fi_16: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 236($sp) +lw $a0, 4($fp) +sw $a0, 236($fp) j _fi_14 _if_14: #Integer li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 240($sp) +lw $a0, 4($fp) +sw $a0, 240($fp) _fi_14: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 268($sp) +lw $a0, 4($fp) +sw $a0, 268($fp) j _fi_12 _if_12: #Integer li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 272($sp) +lw $a0, 4($fp) +sw $a0, 272($fp) _fi_12: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 300($sp) +lw $a0, 4($fp) +sw $a0, 300($fp) j _fi_10 _if_10: #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 304($sp) +lw $a0, 4($fp) +sw $a0, 304($fp) _fi_10: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 332($sp) +lw $a0, 4($fp) +sw $a0, 332($fp) j _fi_8 _if_8: #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 336($sp) +lw $a0, 4($fp) +sw $a0, 336($fp) _fi_8: addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra A2I.i2c: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition @@ -2296,16 +2238,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) +lw $a0, 20($fp) +sw $a0, 4($fp) #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_27 @@ -2320,16 +2263,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) +lw $a0, 44($fp) +sw $a0, 4($fp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_28 @@ -2344,16 +2288,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) +lw $a0, 68($fp) +sw $a0, 4($fp) #Integer li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_29 @@ -2368,16 +2313,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) +lw $a0, 92($fp) +sw $a0, 4($fp) #Integer li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_30 @@ -2392,16 +2338,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) +lw $a0, 116($fp) +sw $a0, 4($fp) #Integer li $a0, 4 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_31 @@ -2416,16 +2363,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) +lw $a0, 140($fp) +sw $a0, 4($fp) #Integer li $a0, 5 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_32 @@ -2440,16 +2388,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 164($sp) -sw $t0, 4($sp) +lw $a0, 164($fp) +sw $a0, 4($fp) #Integer li $a0, 6 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_33 @@ -2464,16 +2413,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) +lw $a0, 188($fp) +sw $a0, 4($fp) #Integer li $a0, 7 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_34 @@ -2488,16 +2438,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 212($sp) -sw $t0, 4($sp) +lw $a0, 212($fp) +sw $a0, 4($fp) #Integer li $a0, 8 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_35 @@ -2512,16 +2463,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 236($sp) -sw $t0, 4($sp) +lw $a0, 236($fp) +sw $a0, 4($fp) #Integer li $a0, 9 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_36 @@ -2537,8 +2489,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 264($sp) -sw $t0, 4($sp) +lw $a0, 264($fp) +sw $a0, 4($fp) #Dispatch in place #obj 2 offset 66 result Object.abort jal Object.abort @@ -2552,11 +2504,11 @@ addiu $sp, $sp, -4 la $a0, string_37 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) +lw $a0, 4($fp) +sw $a0, 16($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) +lw $a0, 4($fp) +sw $a0, 44($fp) j _fi_36 _if_36: #loading label @@ -2566,12 +2518,12 @@ addiu $sp, $sp, -4 la $a0, string_38 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 48($sp) +lw $a0, 4($fp) +sw $a0, 48($fp) _fi_36: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 76($sp) +lw $a0, 4($fp) +sw $a0, 76($fp) j _fi_35 _if_35: #loading label @@ -2581,12 +2533,12 @@ addiu $sp, $sp, -4 la $a0, string_39 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 80($sp) +lw $a0, 4($fp) +sw $a0, 80($fp) _fi_35: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 108($sp) +lw $a0, 4($fp) +sw $a0, 108($fp) j _fi_34 _if_34: #loading label @@ -2596,12 +2548,12 @@ addiu $sp, $sp, -4 la $a0, string_40 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 112($sp) +lw $a0, 4($fp) +sw $a0, 112($fp) _fi_34: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 140($sp) +lw $a0, 4($fp) +sw $a0, 140($fp) j _fi_33 _if_33: #loading label @@ -2611,12 +2563,12 @@ addiu $sp, $sp, -4 la $a0, string_41 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 144($sp) +lw $a0, 4($fp) +sw $a0, 144($fp) _fi_33: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 172($sp) +lw $a0, 4($fp) +sw $a0, 172($fp) j _fi_32 _if_32: #loading label @@ -2626,12 +2578,12 @@ addiu $sp, $sp, -4 la $a0, string_42 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 176($sp) +lw $a0, 4($fp) +sw $a0, 176($fp) _fi_32: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 204($sp) +lw $a0, 4($fp) +sw $a0, 204($fp) j _fi_31 _if_31: #loading label @@ -2641,12 +2593,12 @@ addiu $sp, $sp, -4 la $a0, string_43 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 208($sp) +lw $a0, 4($fp) +sw $a0, 208($fp) _fi_31: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 236($sp) +lw $a0, 4($fp) +sw $a0, 236($fp) j _fi_30 _if_30: #loading label @@ -2656,12 +2608,12 @@ addiu $sp, $sp, -4 la $a0, string_44 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 240($sp) +lw $a0, 4($fp) +sw $a0, 240($fp) _fi_30: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 268($sp) +lw $a0, 4($fp) +sw $a0, 268($fp) j _fi_29 _if_29: #loading label @@ -2671,12 +2623,12 @@ addiu $sp, $sp, -4 la $a0, string_45 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 272($sp) +lw $a0, 4($fp) +sw $a0, 272($fp) _fi_29: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 300($sp) +lw $a0, 4($fp) +sw $a0, 300($fp) j _fi_28 _if_28: #loading label @@ -2686,12 +2638,12 @@ addiu $sp, $sp, -4 la $a0, string_46 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 304($sp) +lw $a0, 4($fp) +sw $a0, 304($fp) _fi_28: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 332($sp) +lw $a0, 4($fp) +sw $a0, 332($fp) j _fi_27 _if_27: #loading label @@ -2701,19 +2653,15 @@ addiu $sp, $sp, -4 la $a0, string_47 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 336($sp) +lw $a0, 4($fp) +sw $a0, 336($fp) _fi_27: addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra A2I.a2i: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition @@ -2732,8 +2680,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) +lw $a0, 24($fp) +sw $a0, 4($fp) #Dispatch in place #obj 2 offset 1 result String.length jal String.length @@ -2744,10 +2692,11 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_48 @@ -2767,8 +2716,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) +lw $a0, 52($fp) +sw $a0, 4($fp) #Args: 0 #Integer li $a0, 0 @@ -2792,10 +2741,11 @@ addiu $sp, $sp, -4 la $a0, string_49 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_50 @@ -2815,8 +2765,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 88($sp) -sw $t0, 4($sp) +lw $a0, 88($fp) +sw $a0, 4($fp) #Args: 0 #Integer li $a0, 0 @@ -2840,10 +2790,11 @@ addiu $sp, $sp, -4 la $a0, string_51 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 8($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_52 @@ -2855,22 +2806,22 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 120($sp) -sw $t0, 4($sp) +lw $a0, 120($fp) +sw $a0, 4($fp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 120($sp) -sw $t0, 4($sp) +lw $a0, 120($fp) +sw $a0, 4($fp) #Dispatch in place #obj 3 offset 31 result A2I.a2i_aux jal A2I.a2i_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 48($sp) +lw $a0, 4($fp) +sw $a0, 48($fp) j _fi_52 _if_52: #Self-Dispatch @@ -2881,8 +2832,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 136($sp) -sw $t0, 4($sp) +lw $a0, 136($fp) +sw $a0, 4($fp) #Args: 0 #Point-Dispatch li $a0, 0 @@ -2892,8 +2843,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) +lw $a0, 140($fp) +sw $a0, 4($fp) #Args: 0 #Integer li $a0, 1 @@ -2912,8 +2863,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 156($sp) -sw $t0, 4($sp) +lw $a0, 156($fp) +sw $a0, 4($fp) #Dispatch in place #obj 2 offset 1 result String.length jal String.length @@ -2924,10 +2875,11 @@ addiu $sp, $sp, 4 li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 #Dispatch in place #obj 9 offset 1 result String.substr @@ -2941,12 +2893,12 @@ jal A2I.a2i_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 100($sp) +lw $a0, 4($fp) +sw $a0, 100($fp) _fi_52: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 136($sp) +lw $a0, 4($fp) +sw $a0, 136($fp) j _fi_50 _if_50: #Unary @@ -2961,8 +2913,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) +lw $a0, 188($fp) +sw $a0, 4($fp) #Args: 0 #Point-Dispatch li $a0, 0 @@ -2972,8 +2924,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 192($sp) -sw $t0, 4($sp) +lw $a0, 192($fp) +sw $a0, 4($fp) #Args: 0 #Integer li $a0, 1 @@ -2992,8 +2944,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 208($sp) -sw $t0, 4($sp) +lw $a0, 208($fp) +sw $a0, 4($fp) #Dispatch in place #obj 2 offset 1 result String.length jal String.length @@ -3004,10 +2956,11 @@ addiu $sp, $sp, 4 li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 8($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 #Dispatch in place #obj 9 offset 1 result String.substr @@ -3021,34 +2974,30 @@ jal A2I.a2i_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 52($sp) -lw $t0, 4($sp) -sw $t0, 188($sp) +lw $a0, 0($sp) +not $a0, $a0 +sw $a0, 4($sp) +lw $a0, 4($fp) +sw $a0, 188($fp) _fi_50: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 216($sp) +lw $a0, 4($fp) +sw $a0, 216($fp) j _fi_48 _if_48: #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 220($sp) +lw $a0, 4($fp) +sw $a0, 220($fp) _fi_48: addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra A2I.a2i_aux: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -3079,21 +3028,22 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 52($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) +lw $a0, 56($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $t1, $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _body_53 @@ -3115,18 +3065,19 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 80($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 80($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Integer li $a0, 10 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) +mult $a0, $t1 +mflo $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 #Self-Dispatch li $a0, 0 @@ -3136,8 +3087,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 100($sp) -sw $t0, 4($sp) +lw $a0, 100($fp) +sw $a0, 4($fp) #Args: 0 #Point-Dispatch li $a0, 0 @@ -3147,15 +3098,15 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 104($sp) -sw $t0, 4($sp) +lw $a0, 104($fp) +sw $a0, 4($fp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 112($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 112($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Args: 1 #Integer li $a0, 1 @@ -3173,14 +3124,15 @@ jal A2I.c2i sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 32($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 52($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 120($sp) -sw $t1, -4($sp) +lw $a0, 4($fp) +lw $t1, 120($fp) +sw $t1, -4($fp) #Assignment #Binary li $a0, 0 @@ -3189,54 +3141,51 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 128($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 128($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 140($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 76($sp) +lw $a0, 4($fp) +lw $t1, 140($fp) +sw $t1, -4($fp) +lw $a0, 4($fp) +sw $a0, 76($fp) addiu $sp, $sp, 8 addiu $sp, $sp, 8 j _loop_53 _pool_53: -lw $t0, 132($sp) -sw $t0, 9999($sp) +lw $a0, 132($fp) +sw $a0, 9999($fp) addiu $sp, $sp, 8 -lw $t0, 40($sp) -sw $t0, 7777($sp) +lw $a0, 40($fp) +sw $a0, 7777($fp) addiu $sp, $sp, 8 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) +lw $a0, 36($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +lw $a0, 4($fp) +sw $a0, 16($fp) addiu $sp, $sp, 8 -lw $t0, 36($sp) -sw $t0, 4444($sp) +lw $a0, 36($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra A2I.i2a: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition @@ -3250,16 +3199,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) +lw $a0, 20($fp) +sw $a0, 4($fp) #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_54 @@ -3278,14 +3228,15 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) +lw $a0, 48($fp) +sw $a0, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $t1, $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_55 @@ -3310,8 +3261,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 4($sp) +lw $a0, 76($fp) +sw $a0, 4($fp) #Args: 0 #Binary li $a0, 0 @@ -3320,8 +3271,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) +lw $a0, 80($fp) +sw $a0, 4($fp) #Unary li $a0, 0 sw $a0, ($sp) @@ -3330,14 +3281,15 @@ addiu $sp, $sp, -4 li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 20($sp) +lw $a0, 0($sp) +not $a0, $a0 +sw $a0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +mult $a0, $t1 +mflo $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 #Dispatch in place #obj 8 offset 25 result A2I.i2a_aux @@ -3351,8 +3303,8 @@ jal String.concat sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 68($sp) +lw $a0, 4($fp) +sw $a0, 68($fp) j _fi_55 _if_55: #Self-Dispatch @@ -3363,26 +3315,26 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 112($sp) -sw $t0, 4($sp) +lw $a0, 112($fp) +sw $a0, 4($fp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 112($sp) -sw $t0, 4($sp) +lw $a0, 112($fp) +sw $a0, 4($fp) #Dispatch in place #obj 3 offset 29 result A2I.i2a_aux jal A2I.i2a_aux sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 80($sp) +lw $a0, 4($fp) +sw $a0, 80($fp) _fi_55: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 108($sp) +lw $a0, 4($fp) +sw $a0, 108($fp) j _fi_54 _if_54: #loading label @@ -3392,19 +3344,15 @@ addiu $sp, $sp, -4 la $a0, string_57 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 112($sp) +lw $a0, 4($fp) +sw $a0, 112($fp) _fi_54: addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra A2I.i2a_aux: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition @@ -3418,16 +3366,17 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) +lw $a0, 20($fp) +sw $a0, 4($fp) #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_58 @@ -3448,15 +3397,15 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) +lw $a0, 56($fp) +sw $a0, 4($fp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 60($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 3 offset 15 result A2I.i2a_aux jal A2I.i2a_aux @@ -3472,8 +3421,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) +lw $a0, 68($fp) +sw $a0, 4($fp) #Args: 0 #Binary li $a0, 0 @@ -3482,8 +3431,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 72($sp) -sw $t0, 4($sp) +lw $a0, 72($fp) +sw $a0, 4($fp) #Binary li $a0, 0 sw $a0, ($sp) @@ -3491,23 +3440,25 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 84($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Integer li $a0, 10 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) +mult $a0, $t1 +mflo $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -sub $t0, $t0, $t1 -sw $t0, 28($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 #Dispatch in place #obj 10 offset 25 result A2I.i2c @@ -3521,11 +3472,11 @@ jal String.concat sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 60($sp) -sw $t0, 10101010($sp) +lw $a0, 60($fp) +sw $a0, 10101010($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) +lw $a0, 4($fp) +sw $a0, 32($fp) j _fi_58 _if_58: #loading label @@ -3535,44 +3486,37 @@ addiu $sp, $sp, -4 la $a0, string_59 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 40($sp) +lw $a0, 4($fp) +sw $a0, 40($fp) _fi_58: addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra Main.Constructor: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 12($sp) -sw $t1, 16($sp) +lw $a0, 4($fp) +lw $t1, 12($fp) +sw $t1, 16($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra Main.type_name: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 la $a1, Main_name jr $ra Main.menu: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block @@ -3605,9 +3549,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 28($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 7 result Main.print jal Main.print @@ -3658,9 +3602,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 52($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 13 result Main.print jal Main.print @@ -3711,9 +3655,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 76($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 19 result Main.print jal Main.print @@ -3764,9 +3708,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 100($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 100($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 25 result Main.print jal Main.print @@ -3817,9 +3761,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 124($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 124($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 31 result Main.print jal Main.print @@ -3870,9 +3814,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 148($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 148($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 37 result Main.print jal Main.print @@ -3923,9 +3867,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 172($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 172($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 43 result Main.print jal Main.print @@ -3976,9 +3920,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 196($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 196($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 49 result Main.print jal Main.print @@ -4049,18 +3993,14 @@ jal IO.in_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 216($sp) +lw $a0, 4($fp) +sw $a0, 216($fp) addiu $sp, $sp, 108 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra Main.prompt: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block @@ -4113,18 +4053,14 @@ jal IO.in_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 24($sp) +lw $a0, 4($fp) +sw $a0, 24($fp) addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra Main.get_int: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block @@ -4147,40 +4083,36 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 36($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 40($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 3 offset 1 result -1 jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 36($sp) -sw $t0, 6666($sp) +lw $a0, 36($fp) +sw $a0, 6666($fp) addiu $sp, $sp, 8 -lw $t0, 28($sp) -sw $t0, 4444($sp) +lw $a0, 28($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 jr $ra Main.is_even: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -4198,19 +4130,20 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 32($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $t1, $a0 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_80 @@ -4229,13 +4162,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) +lw $a0, 60($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_81 @@ -4254,13 +4188,14 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) +lw $a0, 84($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_82 @@ -4276,17 +4211,18 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 104($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 104($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Integer li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 #Dispatch in place #obj 6 offset 29 result Main.is_even @@ -4294,30 +4230,30 @@ jal Main.is_even sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) +lw $a0, 4($fp) +sw $a0, 48($fp) j _fi_82 _if_82: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 52($sp) +lw $a0, 4($fp) +sw $a0, 52($fp) _fi_82: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 80($sp) +lw $a0, 4($fp) +sw $a0, 80($fp) j _fi_81 _if_81: li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 84($sp) +lw $a0, 4($fp) +sw $a0, 84($fp) _fi_81: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 112($sp) +lw $a0, 4($fp) +sw $a0, 112($fp) j _fi_80 _if_80: #Self-Dispatch @@ -4332,34 +4268,30 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 144($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) +lw $a0, 144($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +lw $a0, 0($sp) +not $a0, $a0 +sw $a0, 4($sp) #Dispatch in place #obj 4 offset 37 result Main.is_even jal Main.is_even sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 128($sp) +lw $a0, 4($fp) +sw $a0, 128($fp) _fi_80: addiu $sp, $sp, 8 -lw $t0, 144($sp) -sw $t0, 4444($sp) +lw $a0, 144($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra Main.class_type: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $a0, 0 @@ -4368,8 +4300,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) +lw $a0, 16($fp) +sw $a0, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 @@ -4441,8 +4373,8 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) +lw $a0, 32($fp) +sw $a0, 4($fp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4461,16 +4393,16 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) addiu $sp, $sp, 12 branch_84: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 20($sp) +lw $a0, 48($fp) +sw $a0, 20($fp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4489,16 +4421,16 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 28($sp) +lw $a0, 4($fp) +sw $a0, 28($fp) addiu $sp, $sp, 12 branch_85: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 36($sp) +lw $a0, 64($fp) +sw $a0, 36($fp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4517,16 +4449,16 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) +lw $a0, 4($fp) +sw $a0, 44($fp) addiu $sp, $sp, 12 branch_86: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 52($sp) +lw $a0, 80($fp) +sw $a0, 52($fp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4545,16 +4477,16 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 60($sp) +lw $a0, 4($fp) +sw $a0, 60($fp) addiu $sp, $sp, 12 branch_87: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 96($sp) -sw $t0, 68($sp) +lw $a0, 96($fp) +sw $a0, 68($fp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4573,16 +4505,16 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 76($sp) +lw $a0, 4($fp) +sw $a0, 76($fp) addiu $sp, $sp, 12 branch_88: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 112($sp) -sw $t0, 84($sp) +lw $a0, 112($fp) +sw $a0, 84($fp) #Self-Dispatch li $a0, 0 sw $a0, ($sp) @@ -4601,18 +4533,14 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 92($sp) +lw $a0, 4($fp) +sw $a0, 92($fp) +addiu $sp, $sp, 12 +lw $ra, 4($sp) addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 jr $ra Main.print: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let @@ -4636,9 +4564,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 36($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Args: 0 #Point-Dispatch li $a0, 0 @@ -4648,8 +4576,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) +lw $a0, 40($fp) +sw $a0, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -4686,21 +4614,17 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 40($sp) +lw $a0, 4($fp) +sw $a0, 40($fp) addiu $sp, $sp, 8 -lw $t0, 60($sp) -sw $t0, 4444($sp) +lw $a0, 60($fp) +sw $a0, 4444($fp) addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra Main.main: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block @@ -4723,8 +4647,8 @@ syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 @@ -4732,9 +4656,9 @@ jal A.Constructor sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, 8($sp) +lw $a0, 4($fp) +lw $t1, 24($fp) +sw $t1, 8($fp) #loop li $a0, 0 sw $a0, ($sp) @@ -4743,9 +4667,9 @@ _loop_97: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) +lw $a0, 36($fp) +lw $t1, 16($a0) +sw $t1, 4($fp) lw $t0, 4($sp) bnez $t0, _body_97 j _pool_97 @@ -4780,9 +4704,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 60($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 15 result Main.print jal Main.print @@ -4806,9 +4730,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 76($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -4841,8 +4765,8 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 28($sp) +lw $a0, 4($fp) +sw $a0, 28($fp) j _fi_99 _if_99: #Self-Dispatch @@ -4863,8 +4787,8 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 40($sp) +lw $a0, 4($fp) +sw $a0, 40($fp) _fi_99: addiu $sp, $sp, 8 #Self-Dispatch @@ -4875,9 +4799,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 112($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 112($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 28 result Main.class_type jal Main.class_type @@ -4895,9 +4819,9 @@ jal Main.menu sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 4 -lw $t0, 4($sp) -lw $t1, 116($sp) -sw $t1, 4($sp) +lw $a0, 4($fp) +lw $t1, 116($fp) +sw $t1, 4($fp) #Condition li $a0, 0 sw $a0, ($sp) @@ -4909,9 +4833,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 132($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 132($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -4919,10 +4843,11 @@ addiu $sp, $sp, -4 la $a0, string_102 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_103 @@ -4937,9 +4862,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 156($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 156($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -4947,10 +4872,11 @@ addiu $sp, $sp, -4 la $a0, string_104 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_105 @@ -4965,9 +4891,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 180($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 180($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -4975,10 +4901,11 @@ addiu $sp, $sp, -4 la $a0, string_106 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_107 @@ -4993,9 +4920,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 204($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 204($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -5003,10 +4930,11 @@ addiu $sp, $sp, -4 la $a0, string_108 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_109 @@ -5021,9 +4949,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 228($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 228($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -5031,10 +4959,11 @@ addiu $sp, $sp, -4 la $a0, string_110 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_111 @@ -5049,9 +4978,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 252($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 252($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -5059,10 +4988,11 @@ addiu $sp, $sp, -4 la $a0, string_112 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_113 @@ -5077,9 +5007,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 276($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 276($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -5087,10 +5017,11 @@ addiu $sp, $sp, -4 la $a0, string_114 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_115 @@ -5105,9 +5036,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 300($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 300($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -5115,10 +5046,11 @@ addiu $sp, $sp, -4 la $a0, string_116 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_117 @@ -5133,9 +5065,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 324($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 324($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -5143,10 +5075,11 @@ addiu $sp, $sp, -4 la $a0, string_118 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_119 @@ -5161,9 +5094,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 348($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) +lw $a0, 348($fp) +lw $t1, 4($a0) +sw $t1, 4($fp) #loading label li $a0, 0 sw $a0, ($sp) @@ -5171,10 +5104,11 @@ addiu $sp, $sp, -4 la $a0, string_120 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $t0, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) addiu $sp, $sp, 8 lw $t0, 4($sp) bnez $t0, _if_121 @@ -5199,8 +5133,8 @@ syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 @@ -5217,9 +5151,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 384($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 384($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -5232,26 +5166,26 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 392($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 56($sp) +lw $a0, 4($fp) +lw $t1, 392($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 56($fp) j _fi_121 _if_121: #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 396($sp) -sw $t1, 16($sp) -lw $t0, 4($sp) -sw $t0, 64($sp) +lw $a0, 4($fp) +lw $t1, 396($fp) +sw $t1, 16($fp) +lw $a0, 4($fp) +sw $a0, 64($fp) _fi_121: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 88($sp) +lw $a0, 4($fp) +sw $a0, 88($fp) j _fi_119 _if_119: #Assignment @@ -5270,8 +5204,8 @@ syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 @@ -5279,15 +5213,15 @@ jal A.Constructor sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 412($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 104($sp) +lw $a0, 4($fp) +lw $t1, 412($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 104($fp) _fi_119: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 128($sp) +lw $a0, 4($fp) +sw $a0, 128($fp) j _fi_117 _if_117: #Let @@ -5319,8 +5253,8 @@ syscall sw $v0, 4($sp) la $a1, E_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result E.Constructor la $v0, 1 @@ -5337,9 +5271,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 452($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 452($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -5352,9 +5286,9 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 460($sp) -sw $t1, -4($sp) +lw $a0, 4($fp) +lw $t1, 460($fp) +sw $t1, -4($fp) #Let li $a0, 0 sw $a0, ($sp) @@ -5389,9 +5323,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 488($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 488($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 122 result Main.print jal Main.print @@ -5424,9 +5358,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 504($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 504($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 126 result Main.print jal Main.print @@ -5472,16 +5406,16 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 536($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 536($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Args: 0 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 540($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) +lw $a0, 540($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) #Dispatch in place #obj 3 offset 1 result -1 jal IO.out_string @@ -5512,40 +5446,40 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) +lw $a0, 4($fp) +sw $a0, 32($fp) addiu $sp, $sp, 8 -lw $t0, 552($sp) -sw $t0, 129129129129($sp) +lw $a0, 552($fp) +sw $a0, 129129129129($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 52($sp) +lw $a0, 4($fp) +sw $a0, 52($fp) addiu $sp, $sp, 24 -lw $t0, 520($sp) -sw $t0, 116116116116($sp) +lw $a0, 520($fp) +sw $a0, 116116116116($fp) addiu $sp, $sp, 8 #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 472($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 472($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 52($sp) +lw $a0, 472($fp) +lw $t1, -4($a0) +sw $t1, 4($fp) +lw $a0, 4($fp) +lw $t1, 472($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 52($fp) addiu $sp, $sp, 12 -lw $t0, 472($sp) -sw $t0, 105105105105($sp) +lw $a0, 472($fp) +sw $a0, 105105105105($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 136($sp) +lw $a0, 4($fp) +sw $a0, 136($fp) _fi_117: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 164($sp) +lw $a0, 4($fp) +sw $a0, 164($fp) j _fi_115 _if_115: #Condition @@ -5572,8 +5506,8 @@ syscall sw $v0, 4($sp) la $a1, D_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result D.Constructor la $v0, 1 @@ -5590,9 +5524,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 456($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 456($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -5637,9 +5571,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 484($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 484($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 121 result Main.print jal Main.print @@ -5664,11 +5598,11 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 28($sp) +lw $a0, 4($fp) +sw $a0, 28($fp) addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 68($sp) +lw $a0, 4($fp) +sw $a0, 68($fp) j _fi_126 _if_126: #Block @@ -5701,9 +5635,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 516($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 516($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 129 result Main.print jal Main.print @@ -5728,19 +5662,19 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 28($sp) +lw $a0, 4($fp) +sw $a0, 28($fp) addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 100($sp) +lw $a0, 4($fp) +sw $a0, 100($fp) _fi_126: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 264($sp) +lw $a0, 4($fp) +sw $a0, 264($fp) _fi_115: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 288($sp) +lw $a0, 4($fp) +sw $a0, 288($fp) j _fi_113 _if_113: #Assignment @@ -5763,8 +5697,8 @@ syscall sw $v0, 4($sp) la $a1, C_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result C.Constructor la $v0, 1 @@ -5781,9 +5715,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 552($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 552($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -5797,15 +5731,15 @@ jal C.method5 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 560($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 320($sp) +lw $a0, 4($fp) +lw $t1, 560($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 320($fp) _fi_113: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 344($sp) +lw $a0, 4($fp) +sw $a0, 344($fp) j _fi_111 _if_111: #Assignment @@ -5828,8 +5762,8 @@ syscall sw $v0, 4($sp) la $a1, C_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result C.Constructor la $v0, 1 @@ -5846,9 +5780,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 584($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 584($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -5862,15 +5796,15 @@ jal C.method5 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 592($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 376($sp) +lw $a0, 4($fp) +lw $t1, 592($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 376($fp) _fi_111: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 400($sp) +lw $a0, 4($fp) +sw $a0, 400($fp) j _fi_109 _if_109: #Assignment @@ -5893,8 +5827,8 @@ syscall sw $v0, 4($sp) la $a1, C_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result C.Constructor la $v0, 1 @@ -5911,9 +5845,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 616($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 616($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -5927,15 +5861,15 @@ jal C.method5 sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 624($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 432($sp) +lw $a0, 4($fp) +lw $t1, 624($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 432($fp) _fi_109: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 456($sp) +lw $a0, 4($fp) +sw $a0, 456($fp) j _fi_107 _if_107: #Block @@ -5963,8 +5897,8 @@ syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 @@ -5989,9 +5923,9 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 652($sp) -sw $t1, 12($sp) +lw $a0, 4($fp) +lw $t1, 652($fp) +sw $t1, 12($fp) #Assignment #Point-Dispatch li $a0, 0 @@ -6013,8 +5947,8 @@ syscall sw $v0, 4($sp) la $a1, D_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result D.Constructor la $v0, 1 @@ -6031,9 +5965,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 676($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 676($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -6049,9 +5983,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 688($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) +lw $a0, 688($fp) +lw $t1, 12($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -6064,18 +5998,18 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 -lw $t0, 4($sp) -lw $t1, 696($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 72($sp) +lw $a0, 4($fp) +lw $t1, 696($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 72($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 528($sp) +lw $a0, 4($fp) +sw $a0, 528($fp) _fi_107: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 552($sp) +lw $a0, 4($fp) +sw $a0, 552($fp) j _fi_105 _if_105: li $a0, 0 @@ -6084,9 +6018,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 704($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 704($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 @@ -6125,8 +6059,8 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) +lw $a0, 20($fp) +sw $a0, 4($fp) #Assignment #Point-Dispatch li $a0, 0 @@ -6136,8 +6070,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) +lw $a0, 16($fp) +sw $a0, 4($fp) #Args: 0 #Point-Dispatch li $a0, 0 @@ -6147,8 +6081,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) +lw $a0, 24($fp) +sw $a0, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -6161,19 +6095,19 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 752($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) +lw $a0, 4($fp) +lw $t1, 752($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 28($fp) addiu $sp, $sp, 12 branch_132: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 32($sp) +lw $a0, 48($fp) +sw $a0, 32($fp) #Assignment #Point-Dispatch li $a0, 0 @@ -6183,8 +6117,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 12($sp) -sw $t0, 4($sp) +lw $a0, 12($fp) +sw $a0, 4($fp) #Args: 0 #Point-Dispatch li $a0, 0 @@ -6194,8 +6128,8 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) +lw $a0, 20($fp) +sw $a0, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -6208,19 +6142,19 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 780($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 56($sp) +lw $a0, 4($fp) +lw $t1, 780($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 56($fp) addiu $sp, $sp, 12 branch_133: addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 60($sp) +lw $a0, 76($fp) +sw $a0, 60($fp) #Block li $a0, 0 sw $a0, ($sp) @@ -6257,18 +6191,18 @@ addiu $sp, $sp, 4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 20($sp) +lw $a0, 4($fp) +sw $a0, 20($fp) addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 84($sp) +lw $a0, 4($fp) +sw $a0, 84($fp) addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 664($sp) +lw $a0, 4($fp) +sw $a0, 664($fp) _fi_105: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 688($sp) +lw $a0, 4($fp) +sw $a0, 688($fp) j _fi_103 _if_103: #Block @@ -6296,8 +6230,8 @@ syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 @@ -6322,9 +6256,9 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 836($sp) -sw $t1, 12($sp) +lw $a0, 4($fp) +lw $t1, 836($fp) +sw $t1, 12($fp) #Assignment #Point-Dispatch li $a0, 0 @@ -6346,8 +6280,8 @@ syscall sw $v0, 4($sp) la $a1, B_VT sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) +lw $a0, 4($fp) +sw $a0, 12($fp) #DispatchParent in place #obj 2 offset 1 result B.Constructor la $v0, 1 @@ -6364,9 +6298,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 860($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) +lw $a0, 860($fp) +lw $t1, 8($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -6382,9 +6316,9 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $t0, 872($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) +lw $a0, 872($fp) +lw $t1, 12($a0) +sw $t1, 4($fp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string @@ -6397,24 +6331,24 @@ jal IO.out_string sw $a1, 0($sp) addi $sp, $sp, -4 addiu $sp, $sp, 12 -lw $t0, 4($sp) -lw $t1, 880($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 72($sp) +lw $a0, 4($fp) +lw $t1, 880($fp) +sw $t1, 8($fp) +lw $a0, 4($fp) +sw $a0, 72($fp) addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 760($sp) +lw $a0, 4($fp) +sw $a0, 760($fp) _fi_103: addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 840($sp) +lw $a0, 4($fp) +sw $a0, 840($fp) addiu $sp, $sp, 24 addiu $sp, $sp, 8 j _loop_97 _pool_97: -lw $t0, 4($sp) -sw $t0, 872($sp) +lw $a0, 4($fp) +sw $a0, 872($fp) addiu $sp, $sp, 8 li $v0, 10 syscall diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips deleted file mode 100644 index 345366fa..00000000 --- a/tests/codegen/atoi.mips +++ /dev/null @@ -1,2264 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "0" -string_3: .asciiz "1" -string_5: .asciiz "2" -string_7: .asciiz "3" -string_9: .asciiz "4" -string_11: .asciiz "5" -string_13: .asciiz "6" -string_15: .asciiz "7" -string_17: .asciiz "8" -string_19: .asciiz "9" -string_31: .asciiz "" -string_32: .asciiz "9" -string_33: .asciiz "8" -string_34: .asciiz "7" -string_35: .asciiz "6" -string_36: .asciiz "5" -string_37: .asciiz "4" -string_38: .asciiz "3" -string_39: .asciiz "2" -string_40: .asciiz "1" -string_41: .asciiz "0" -string_43: .asciiz "-" -string_45: .asciiz "+" -string_50: .asciiz "-" -string_51: .asciiz "0" -string_53: .asciiz "" -string_54: .asciiz " == " -string_55: .asciiz "\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -A2I_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -A2I_name: .asciiz "A2I" -A2I_VT: -.word A2I_INH -.word A2I.c2i -.word A2I.i2c -.word A2I.a2i -.word A2I.a2i_aux -.word A2I.i2a -.word A2I.i2a_aux -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -A2I.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -A2I.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, A2I_name -jr $ra -A2I.c2i: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_2 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_6 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_7 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_10 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_11 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_12 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 164($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_13 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_14 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_15 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_16 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 212($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_17 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_18 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 236($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_19 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_20 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 264($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 66 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) -j _fi_20 -_if_20: -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 48($sp) -_fi_20: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 76($sp) -j _fi_18 -_if_18: -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_18: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 108($sp) -j _fi_16 -_if_16: -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 112($sp) -_fi_16: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 140($sp) -j _fi_14 -_if_14: -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 144($sp) -_fi_14: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 172($sp) -j _fi_12 -_if_12: -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 176($sp) -_fi_12: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 204($sp) -j _fi_10 -_if_10: -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 208($sp) -_fi_10: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 236($sp) -j _fi_8 -_if_8: -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 240($sp) -_fi_8: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 268($sp) -j _fi_6 -_if_6: -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 272($sp) -_fi_6: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 300($sp) -j _fi_4 -_if_4: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 304($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 332($sp) -j _fi_2 -_if_2: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 336($sp) -_fi_2: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -A2I.i2c: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_21 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_22 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_23 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_24 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_25 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_26 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 164($sp) -sw $t0, 4($sp) -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_27 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_28 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 212($sp) -sw $t0, 4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_29 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 236($sp) -sw $t0, 4($sp) -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_30 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 264($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 66 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_31 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) -j _fi_30 -_if_30: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_32 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 48($sp) -_fi_30: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 76($sp) -j _fi_29 -_if_29: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_33 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_29: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 108($sp) -j _fi_28 -_if_28: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_34 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 112($sp) -_fi_28: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 140($sp) -j _fi_27 -_if_27: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_35 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 144($sp) -_fi_27: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 172($sp) -j _fi_26 -_if_26: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_36 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 176($sp) -_fi_26: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 204($sp) -j _fi_25 -_if_25: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_37 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 208($sp) -_fi_25: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 236($sp) -j _fi_24 -_if_24: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_38 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 240($sp) -_fi_24: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 268($sp) -j _fi_23 -_if_23: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_39 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 272($sp) -_fi_23: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 300($sp) -j _fi_22 -_if_22: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_40 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 304($sp) -_fi_22: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 332($sp) -j _fi_21 -_if_21: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_41 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 336($sp) -_fi_21: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -A2I.a2i: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_42 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_43 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_44 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_45 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_46 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 31 result A2I.a2i_aux -jal A2I.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 48($sp) -j _fi_46 -_if_46: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 136($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 156($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 12 offset 44 result A2I.a2i_aux -jal A2I.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 100($sp) -_fi_46: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 136($sp) -j _fi_44 -_if_44: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 192($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 208($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 12 offset 57 result A2I.a2i_aux -jal A2I.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 52($sp) -lw $t0, 4($sp) -sw $t0, 188($sp) -_fi_44: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 216($sp) -j _fi_42 -_if_42: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 220($sp) -_fi_42: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -A2I.a2i_aux: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_47: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_47 -j _pool_47 -_body_47: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 7 offset 30 result A2I.c2i -jal A2I.c2i -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 32($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 52($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 120($sp) -sw $t1, -4($sp) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 128($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 140($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 76($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_47 -_pool_47: -lw $t0, 132($sp) -sw $t0, 9999($sp) -addiu $sp, $sp, 8 -lw $t0, 40($sp) -sw $t0, 7777($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 36($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -A2I.i2a: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_48 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_49 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_50 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 8 offset 25 result A2I.i2a_aux -jal A2I.i2a_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 10 offset 1 result String.concat -jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 68($sp) -j _fi_49 -_if_49: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 29 result A2I.i2a_aux -jal A2I.i2a_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_49: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 108($sp) -j _fi_48 -_if_48: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_51 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 112($sp) -_fi_48: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -A2I.i2a_aux: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_52 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 15 result A2I.i2a_aux -jal A2I.i2a_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -sw $t0, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -sub $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 10 offset 25 result A2I.i2c -jal A2I.i2c -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 14 offset 1 result String.concat -jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 60($sp) -sw $t0, 10101010($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) -j _fi_52 -_if_52: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_53 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 40($sp) -_fi_52: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 7 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_54 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 9 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 11 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_55 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 13 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 36($sp) -addiu $sp, $sp, 16 -lw $t0, 52($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -li $v0, 10 -syscall diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips deleted file mode 100644 index 57b3e855..00000000 --- a/tests/codegen/book_list.mips +++ /dev/null @@ -1,1510 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "title: " -string_2: .asciiz "\n" -string_3: .asciiz "author: " -string_4: .asciiz "\n" -string_5: .asciiz "periodical: " -string_6: .asciiz "\n" -string_10: .asciiz "- dynamic type was Book -\n" -string_11: .asciiz "- dynamic type was Article -\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Book_INH: -.word IO_INH -Article_INH: -.word Book_INH -BookList_INH: -.word IO_INH -Cons_INH: -.word BookList_INH -Nil_INH: -.word BookList_INH -Main_INH: -.word Object_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Book_name: .asciiz "Book" -Book_VT: -.word Book_INH -.word Book.initBook -.word Book.print -Article_name: .asciiz "Article" -Article_VT: -.word Article_INH -.word Article.initArticle -.word Article.print -BookList_name: .asciiz "BookList" -BookList_VT: -.word BookList_INH -.word BookList.isNil -.word BookList.cons -.word BookList.car -.word BookList.cdr -.word BookList.print_list -Cons_name: .asciiz "Cons" -Cons_VT: -.word Cons_INH -.word Cons.isNil -.word Cons.init -.word Cons.car -.word Cons.cdr -.word Cons.print_list -Nil_name: .asciiz "Nil" -Nil_VT: -.word Nil_INH -.word Nil.isNil -.word Nil.print_list -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Book.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Book.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Book_name -jr $ra -Book.initBook: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, 4($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Book.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 8 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 8 offset 2 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 16 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_4 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 8 offset 2 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 72($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Article.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Article.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Article_name -jr $ra -Article.initArticle: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 4 offset 10 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 44($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Article.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#DispatchParent in place -#obj 2 offset 1 result self.print -la $v0, 1 -jal self.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 11 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 8 offset 2 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 52($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -BookList.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -BookList.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, BookList_name -jr $ra -BookList.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -BookList.cons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 28($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -BookList.car: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Book_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Book.Constructor -la $v0, 1 -jal Book.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -BookList.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, BookList_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result BookList.Constructor -la $v0, 1 -jal BookList.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -BookList.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 4 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Cons_name -jr $ra -Cons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, 4($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.car: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 8($sp) -la $a1, Book_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_7 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -la $a1, Article_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_8 -addiu $sp, $sp, 4 -branch_7: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_10 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 14 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -branch_8: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 20($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_11 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 18 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 12 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 80($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Nil_name -jr $ra -Nil.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Nil_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Nil.Constructor -la $v0, 1 -jal Nil.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 8 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 60($sp) -sw $t1, 4($sp) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 52($sp) -addiu $sp, $sp, 8 -lw $t0, 72($sp) -sw $t0, 5555($sp) -addiu $sp, $sp, 8 -lw $t0, 24($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -li $v0, 10 -syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips deleted file mode 100644 index d5f67883..00000000 --- a/tests/codegen/cells.mips +++ /dev/null @@ -1,1474 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "\n" -string_4: .asciiz "X" -string_6: .asciiz "X" -string_8: .asciiz "X" -string_11: .asciiz "." -string_12: .asciiz "X" -string_14: .asciiz " X " -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -CellularAutomaton_INH: -.word IO_INH -Main_INH: -.word Object_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -CellularAutomaton_name: .asciiz "CellularAutomaton" -CellularAutomaton_VT: -.word CellularAutomaton_INH -.word CellularAutomaton.init -.word CellularAutomaton.print -.word CellularAutomaton.num_cells -.word CellularAutomaton.cell -.word CellularAutomaton.cell_left_neighbor -.word CellularAutomaton.cell_right_neighbor -.word CellularAutomaton.cell_at_next_evolution -.word CellularAutomaton.evolve -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -CellularAutomaton.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, CellularAutomaton_name -jr $ra -CellularAutomaton.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result String.concat -jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 6 offset 9 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.num_cells: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.cell: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.cell_left_neighbor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_2 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 16 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 52($sp) -j _fi_2 -_if_2: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 21 result CellularAutomaton.num_cells -jal CellularAutomaton.num_cells -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 8 offset 24 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 84($sp) -_fi_2: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.cell_right_neighbor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 9 result CellularAutomaton.num_cells -jal CellularAutomaton.num_cells -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 32($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_3 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 20 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 68($sp) -j _fi_3 -_if_3: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 23 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_3: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.cell_at_next_evolution: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 12 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_4 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_5 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_5 -_if_5: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_5: -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 24 result CellularAutomaton.cell_left_neighbor -jal CellularAutomaton.cell_left_neighbor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_7 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_7 -_if_7: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_7: -addiu $sp, $sp, 8 -lw $t0, 52($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 100($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 36 result CellularAutomaton.cell_right_neighbor -jal CellularAutomaton.cell_right_neighbor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_8 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_9 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_9 -_if_9: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_9: -addiu $sp, $sp, 8 -lw $t0, 52($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 152($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 160($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_10 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_11 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 172($sp) -j _fi_10 -_if_10: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_12 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 180($sp) -_fi_10: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.evolve: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_13: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_13 -j _pool_13 -_body_13: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 21 result CellularAutomaton.cell_at_next_evolution -jal CellularAutomaton.cell_at_next_evolution -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result String.concat -jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 88($sp) -sw $t1, -4($sp) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 108($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 48($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_13 -_pool_13: -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 112($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 88($sp) -addiu $sp, $sp, 12 -lw $t0, 120($sp) -sw $t0, 7777($sp) -addiu $sp, $sp, 8 -lw $t0, 32($sp) -sw $t0, 5555($sp) -addiu $sp, $sp, 8 -lw $t0, 24($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, CellularAutomaton_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result CellularAutomaton.Constructor -la $v0, 1 -jal CellularAutomaton.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_14 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, 4($sp) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_15: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_15 -j _pool_15 -_body_15: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 128($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 48($sp) -addiu $sp, $sp, 12 -addiu $sp, $sp, 8 -j _loop_15 -_pool_15: -lw $t0, 120($sp) -sw $t0, 13131313($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 52($sp) -addiu $sp, $sp, 16 -li $v0, 10 -syscall diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips deleted file mode 100644 index c08da339..00000000 --- a/tests/codegen/complex.mips +++ /dev/null @@ -1,963 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_2: .asciiz "=(\n" -string_3: .asciiz "=)\n" -string_5: .asciiz "+" -string_6: .asciiz "I" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Complex_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main -Complex_name: .asciiz "Complex" -Complex_VT: -.word Complex_INH -.word Complex.init -.word Complex.print -.word Complex.reflect_0 -.word Complex.reflect_X -.word Complex.reflect_Y - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 16($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 32($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 15 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) -j _fi_1 -_if_1: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 18 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 56($sp) -_fi_1: -addiu $sp, $sp, 8 -lw $t0, 72($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -Complex.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Complex_name -jr $ra -Complex.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 48($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 14 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 8 offset 2 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 10 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 68($sp) -j _fi_4 -_if_4: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 22 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.reflect_0: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 56($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.reflect_X: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.reflect_Y: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips deleted file mode 100644 index 44496adc..00000000 --- a/tests/codegen/fib.mips +++ /dev/null @@ -1,649 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "Enter n to find nth fibonacci number!\n" -string_2: .asciiz "\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main -.word Main.fib - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 5 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 8 result IO.in_int -jal IO.in_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 2 offset 8 result Main.fib -jal Main.fib -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 3 offset 8 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 10 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 12 -Main.fib: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_3: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -li $t1, 1 -sub $t0, $t1, $t0 -sw $t0, 24($sp) -lw $t0, 4($sp) -bnez $t0, _body_3 -j _pool_3 -_body_3: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 76($sp) -sw $t1, -4($sp) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 92($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 100($sp) -sw $t1, -4($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 108($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 60($sp) -addiu $sp, $sp, 16 -addiu $sp, $sp, 8 -j _loop_3 -_pool_3: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 96($sp) -addiu $sp, $sp, 8 -lw $t0, 116($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips deleted file mode 100644 index 99d70e24..00000000 --- a/tests/codegen/graph.mips +++ /dev/null @@ -1,3898 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz " (" -string_2: .asciiz "," -string_3: .asciiz ")" -string_5: .asciiz "\n" -string_6: .asciiz "\n" -string_8: .asciiz "\n" -string_9: .asciiz "" -string_11: .asciiz "0" -string_13: .asciiz "1" -string_15: .asciiz "2" -string_17: .asciiz "3" -string_19: .asciiz "4" -string_21: .asciiz "5" -string_23: .asciiz "6" -string_25: .asciiz "7" -string_27: .asciiz "8" -string_29: .asciiz "9" -string_32: .asciiz "-" -string_34: .asciiz " " -string_37: .asciiz " " -string_39: .asciiz "," -string_42: .asciiz "" -string_43: .asciiz "" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Graph_INH: -.word Object_INH -Vertice_INH: -.word IO_INH -Edge_INH: -.word IO_INH -EList_INH: -.word IO_INH -ECons_INH: -.word EList_INH -VList_INH: -.word IO_INH -VCons_INH: -.word VList_INH -Parse_INH: -.word IO_INH -Main_INH: -.word Parse_INH -BoolOp_INH: -.word Object_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Graph_name: .asciiz "Graph" -Graph_VT: -.word Graph_INH -.word Graph.add_vertice -.word Graph.print_E -.word Graph.print_V -Vertice_name: .asciiz "Vertice" -Vertice_VT: -.word Vertice_INH -.word Vertice.outgoing -.word Vertice.number -.word Vertice.init -.word Vertice.add_out -.word Vertice.print -Edge_name: .asciiz "Edge" -Edge_VT: -.word Edge_INH -.word Edge.init -.word Edge.print -EList_name: .asciiz "EList" -EList_VT: -.word EList_INH -.word EList.isNil -.word EList.head -.word EList.tail -.word EList.cons -.word EList.append -.word EList.print -ECons_name: .asciiz "ECons" -ECons_VT: -.word ECons_INH -.word ECons.isNil -.word ECons.head -.word ECons.tail -.word ECons.init -.word ECons.print -VList_name: .asciiz "VList" -VList_VT: -.word VList_INH -.word VList.isNil -.word VList.head -.word VList.tail -.word VList.cons -.word VList.print -VCons_name: .asciiz "VCons" -VCons_VT: -.word VCons_INH -.word VCons.isNil -.word VCons.head -.word VCons.tail -.word VCons.init -.word VCons.print -Parse_name: .asciiz "Parse" -Parse_VT: -.word Parse_INH -.word Parse.read_input -.word Parse.parse_line -.word Parse.c2i -.word Parse.a2i -.word Parse.a2i_aux -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main -BoolOp_name: .asciiz "BoolOp" -BoolOp_VT: -.word BoolOp_INH -.word BoolOp.and -.word BoolOp.or - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Graph.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, VList_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result VList.Constructor -la $v0, 1 -jal VList.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, EList_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result EList.Constructor -la $v0, 1 -jal EList.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Graph.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Graph_name -jr $ra -Graph.add_vertice: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, 8($sp) -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 56($sp) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 44($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Graph.print_E: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Graph.print_V: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Vertice.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, EList_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result EList.Constructor -la $v0, 1 -jal EList.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Vertice.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Vertice_name -jr $ra -Vertice.outgoing: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Vertice.number: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Vertice.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Vertice.add_out: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Vertice.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 6 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Edge.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Edge.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Edge_name -jr $ra -Edge.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 4($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 44($sp) -sw $t1, 12($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 16 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Edge.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 6 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 9 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 12 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 15 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 18 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 21 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 76($sp) -addiu $sp, $sp, 24 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -EList.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -EList.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, EList_name -jr $ra -EList.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -EList.head: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -EList.tail: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -EList.cons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, ECons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result ECons.Constructor -la $v0, 1 -jal ECons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 6 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -EList.append: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 11 result EList.tail -jal EList.tail -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 15 result EList.head -jal EList.head -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -#Dispatch in place -#obj 8 offset 3 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) -j _fi_4 -_if_4: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 56($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -EList.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 5 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -ECons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -ECons.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, ECons_name -jr $ra -ECons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -ECons.head: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -ECons.tail: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -ECons.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, -4($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -ECons.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VList.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VList.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, VList_name -jr $ra -VList.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VList.head: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VList.tail: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VList.cons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, VCons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result VCons.Constructor -la $v0, 1 -jal VCons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 6 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VList.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 5 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VCons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VCons.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, VCons_name -jr $ra -VCons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VCons.head: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VCons.tail: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VCons.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, -4($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -VCons.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Parse.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, BoolOp_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result BoolOp.Constructor -la $v0, 1 -jal BoolOp.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Parse.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Parse_name -jr $ra -Parse.read_input: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_7: -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 0 -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_8 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -li $t1, 1 -sub $t0, $t1, $t0 -sw $t0, 24($sp) -#Args: 1 -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -li $t1, 1 -sub $t0, $t1, $t0 -sw $t0, 24($sp) -#Dispatch in place -#obj 14 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 4($sp) -bnez $t0, _body_7 -j _pool_7 -_body_7: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 29 result Parse.parse_line -jal Parse.parse_line -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 128($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 32 result IO.in_string -jal IO.in_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 128($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 40($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_7 -_pool_7: -lw $t0, 128($sp) -sw $t0, 6666($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 32($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Parse.parse_line: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_10: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -li $t1, 1 -sub $t0, $t1, $t0 -sw $t0, 28($sp) -lw $t0, 4($sp) -bnez $t0, _body_10 -j _pool_10 -_body_10: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 16 -syscall -sw $v0, 4($sp) -la $a1, Edge_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Edge.Constructor -la $v0, 1 -jal Edge.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 2 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 9 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 16 -#Dispatch in place -#obj 12 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 84($sp) -sw $t0, 18181818($sp) -addiu $sp, $sp, 8 -lw $t0, 76($sp) -sw $t0, 16161616($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 12($sp) -addiu $sp, $sp, 4 -addiu $sp, $sp, 8 -j _loop_10 -_pool_10: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 56($sp) -addiu $sp, $sp, 8 -lw $t0, 76($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Parse.c2i: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_11 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_12 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_13 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_14 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_15 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_16 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_17 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_18 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_19 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_20 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_21 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_22 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 164($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_23 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_24 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_25 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_26 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 212($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_27 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_28 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 236($sp) -sw $t0, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_29 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_30 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 264($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 66 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) -j _fi_30 -_if_30: -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 48($sp) -_fi_30: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 76($sp) -j _fi_28 -_if_28: -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_28: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 108($sp) -j _fi_26 -_if_26: -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 112($sp) -_fi_26: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 140($sp) -j _fi_24 -_if_24: -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 144($sp) -_fi_24: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 172($sp) -j _fi_22 -_if_22: -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 176($sp) -_fi_22: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 204($sp) -j _fi_20 -_if_20: -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 208($sp) -_fi_20: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 236($sp) -j _fi_18 -_if_18: -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 240($sp) -_fi_18: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 268($sp) -j _fi_16 -_if_16: -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 272($sp) -_fi_16: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 300($sp) -j _fi_14 -_if_14: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 304($sp) -_fi_14: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 332($sp) -j _fi_12 -_if_12: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 336($sp) -_fi_12: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Parse.a2i: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_31 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_32 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_33 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_34 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_35 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 31 result Parse.a2i_aux -jal Parse.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 48($sp) -j _fi_35 -_if_35: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 136($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 156($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 12 offset 44 result Parse.a2i -jal Parse.a2i -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 100($sp) -_fi_35: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 136($sp) -j _fi_33 -_if_33: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 192($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 208($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 12 offset 57 result Parse.a2i_aux -jal Parse.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 52($sp) -lw $t0, 4($sp) -sw $t0, 188($sp) -_fi_33: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 216($sp) -j _fi_31 -_if_31: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 220($sp) -_fi_31: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Parse.a2i_aux: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_36: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_36 -j _pool_36 -_body_36: -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_37 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_38 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_39 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_40 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 136($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 156($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 160($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 168($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 7 offset 44 result Parse.c2i -jal Parse.c2i -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 32($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 52($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 176($sp) -sw $t1, -4($sp) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 184($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 196($sp) -sw $t1, -4($sp) -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 208($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 212($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_41 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_42 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_41 -_if_41: -#Assignment -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_43 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 232($sp) -sw $t1, 8($sp) -lw $t0, 4($sp) -sw $t0, 40($sp) -_fi_41: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 116($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 140($sp) -j _fi_40 -_if_40: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 244($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 256($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 280($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 292($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 32($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 16 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 4($sp) -lw $t1, 308($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 312($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 312($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 80($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 220($sp) -_fi_40: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 244($sp) -j _fi_38 -_if_38: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 324($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 336($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 360($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 372($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 32($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 16 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 4($sp) -lw $t1, 388($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 392($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 392($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 80($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 324($sp) -_fi_38: -addiu $sp, $sp, 8 -lw $t0, 392($sp) -sw $t0, 17171717($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_36 -_pool_36: -lw $t0, 72($sp) -sw $t0, 9999($sp) -addiu $sp, $sp, 8 -lw $t0, 40($sp) -sw $t0, 7777($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 36($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 3 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -lw $t1, 12($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 8 -BoolOp.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -BoolOp.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, BoolOp_name -jr $ra -BoolOp.and: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -bnez $t0, _if_44 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -j _fi_44 -_if_44: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -_fi_44: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -BoolOp.or: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -bnez $t0, _if_45 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -j _fi_45 -_if_45: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 24($sp) -_fi_45: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips deleted file mode 100644 index cf6021e2..00000000 --- a/tests/codegen/hairyscary.mips +++ /dev/null @@ -1,1454 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_13: .asciiz "do nothing" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Foo_INH: -.word Bazz_INH -Bar_INH: -.word Razz_INH -Razz_INH: -.word Foo_INH -Bazz_INH: -.word IO_INH -Main_INH: -.word Object_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Foo_name: .asciiz "Foo" -Foo_VT: -.word Foo_INH -.word Foo.doh -Bazz_name: .asciiz "Bazz" -Bazz_VT: -.word Bazz_INH -.word Bazz.printh -.word Bazz.doh -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 20 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Foo.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -la $a1, Razz_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 8($sp) -lw $t0, 8($sp) -bnez $t0, branch_1 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 8($sp) -la $a1, Foo_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_2 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -la $a1, Bar_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_3 -addiu $sp, $sp, 4 -branch_1: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Bar_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bar.Constructor -la $v0, 1 -jal Bar.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -branch_2: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 20($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Razz_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Razz.Constructor -la $v0, 1 -jal Razz.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 12 -branch_3: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 36($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 40($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -lw $t1, 80($sp) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 16($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 124($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 31 result Foo.doh -jal Foo.doh -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 12($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 40($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 136($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 34 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 12($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 56($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 140($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Foo.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Foo_name -jr $ra -Foo.doh: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 40($sp) -sw $t1, -4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 44($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bar.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 4 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 16($sp) -sw $t1, 4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 7 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bar.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bar_name -jr $ra -Razz.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -la $a1, Razz_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 8($sp) -lw $t0, 8($sp) -bnez $t0, branch_5 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 8($sp) -la $a1, Bar_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_6 -addiu $sp, $sp, 4 -branch_5: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Bar_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bar.Constructor -la $v0, 1 -jal Bar.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -branch_6: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 20($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -lw $t1, 60($sp) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#DispatchParent in place -#obj 2 offset 1 result a.doh -la $v0, 1 -jal a.doh -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 16($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 16($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 44($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 30 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 12($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 56($sp) -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 132($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 33 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 12($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 72($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 136($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Razz.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Razz_name -jr $ra -Bazz.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 12($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -la $a1, Bazz_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 8($sp) -lw $t0, 8($sp) -bnez $t0, branch_8 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 8($sp) -la $a1, Razz_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_9 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -la $a1, Foo_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_10 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 16($sp) -la $a1, Bar_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_11 -addiu $sp, $sp, 4 -branch_8: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Foo_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Foo.Constructor -la $v0, 1 -jal Foo.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 12 -branch_9: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 20($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Bar_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bar.Constructor -la $v0, 1 -jal Bar.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 12 -branch_10: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 36($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Razz_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Razz.Constructor -la $v0, 1 -jal Razz.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) -addiu $sp, $sp, 12 -branch_11: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -sw $t0, 52($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 56($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -lw $t1, 108($sp) -sw $t1, 8($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 29 result Bazz.printh -jal Bazz.printh -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 116($sp) -sw $t1, 12($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bazz.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bazz_name -jr $ra -Bazz.printh: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 6 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bazz.doh: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 40($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 44($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 16 -syscall -sw $v0, 4($sp) -la $a1, Bazz_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bazz.Constructor -la $v0, 1 -jal Bazz.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Foo_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Foo.Constructor -la $v0, 1 -jal Foo.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 36($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Razz_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Razz.Constructor -la $v0, 1 -jal Razz.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 52($sp) -sw $t1, 12($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Bar_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Bar.Constructor -la $v0, 1 -jal Bar.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 68($sp) -sw $t1, 16($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_13 -sw $a0, 0($sp) -addi $sp, $sp, -4 -li $v0, 10 -syscall diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips deleted file mode 100644 index d4fe245d..00000000 --- a/tests/codegen/hello_world.mips +++ /dev/null @@ -1,448 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "Hello, World.\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 4 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -li $v0, 10 -syscall diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips deleted file mode 100644 index 23b7be79..00000000 --- a/tests/codegen/io.mips +++ /dev/null @@ -1,868 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "A: Hello world\n" -string_2: .asciiz "B: Hello world\n" -string_3: .asciiz "C: Hello world\n" -string_4: .asciiz "D: Hello world\n" -string_5: .asciiz "Done.\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -A_INH: -.word Object_INH -B_INH: -.word A_INH -C_INH: -.word IO_INH -D_INH: -.word C_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -A_name: .asciiz "A" -A_VT: -.word A_INH -.word A.out_a -B_name: .asciiz "B" -B_VT: -.word B_INH -.word B.out_b -C_name: .asciiz "C" -C_VT: -.word C_INH -.word C.out_c -D_name: .asciiz "D" -D_VT: -.word D_INH -.word D.out_d -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -A.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, IO_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result IO.Constructor -la $v0, 1 -jal IO.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -A.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, A_name -jr $ra -A.out_a: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -B.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -B.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, B_name -jr $ra -B.out_b: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -C.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -C.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, C_name -jr $ra -C.out_c: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 5 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -D.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -D.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, D_name -jr $ra -D.out_d: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_4 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 5 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, B_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result B.Constructor -la $v0, 1 -jal B.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, C_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result C.Constructor -la $v0, 1 -jal C.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, D_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result D.Constructor -la $v0, 1 -jal D.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 25 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 92($sp) -addiu $sp, $sp, 20 -li $v0, 10 -syscall diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips deleted file mode 100644 index 30692ba3..00000000 --- a/tests/codegen/life.mips +++ /dev/null @@ -1,5719 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_7: .asciiz "\n" -string_9: .asciiz "\n" -string_10: .asciiz "\n" -string_12: .asciiz " " -string_14: .asciiz " " -string_16: .asciiz " " -string_18: .asciiz " " -string_21: .asciiz " " -string_22: .asciiz " " -string_25: .asciiz " " -string_26: .asciiz " " -string_29: .asciiz " " -string_30: .asciiz " " -string_33: .asciiz " " -string_34: .asciiz " " -string_37: .asciiz " " -string_38: .asciiz " " -string_39: .asciiz "X" -string_41: .asciiz "X" -string_43: .asciiz "X" -string_45: .asciiz "X" -string_47: .asciiz "X" -string_49: .asciiz "X" -string_51: .asciiz "X" -string_53: .asciiz "X" -string_57: .asciiz "-" -string_58: .asciiz "X" -string_60: .asciiz "-" -string_61: .asciiz "X" -string_62: .asciiz "X" -string_64: .asciiz "\nPlease chose a number:\n" -string_65: .asciiz "\t1: A cross\n" -string_66: .asciiz "\t2: A slash from the upper left to lower right\n" -string_67: .asciiz "\t3: A slash from the upper right to lower left\n" -string_68: .asciiz "\t4: An X\n" -string_69: .asciiz "\t5: A greater than sign \n" -string_70: .asciiz "\t6: A less than sign\n" -string_71: .asciiz "\t7: Two greater than signs\n" -string_72: .asciiz "\t8: Two less than signs\n" -string_73: .asciiz "\t9: A 'V'\n" -string_74: .asciiz "\t10: An inverse 'V'\n" -string_75: .asciiz "\t11: Numbers 9 and 10 combined\n" -string_76: .asciiz "\t12: A full grid\n" -string_77: .asciiz "\t13: A 'T'\n" -string_78: .asciiz "\t14: A plus '+'\n" -string_79: .asciiz "\t15: A 'W'\n" -string_80: .asciiz "\t16: An 'M'\n" -string_81: .asciiz "\t17: An 'E'\n" -string_82: .asciiz "\t18: A '3'\n" -string_83: .asciiz "\t19: An 'O'\n" -string_84: .asciiz "\t20: An '8'\n" -string_85: .asciiz "\t21: An 'S'\n" -string_86: .asciiz "Your choice => " -string_87: .asciiz "\n" -string_109: .asciiz " " -string_110: .asciiz " XXXX X XX X XXXX " -string_111: .asciiz " XX X XX X XX X XX X XX " -string_112: .asciiz " XX X XX X XX " -string_113: .asciiz "XXX X X X X XXXX " -string_114: .asciiz "XXXXX X XXXXX X XXXX" -string_115: .asciiz " X X X X X X X" -string_116: .asciiz "X X X X X X X " -string_117: .asciiz " X X XXXXX X X " -string_118: .asciiz "XXXXX X X X X " -string_119: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" -string_120: .asciiz "X X X X X X X X" -string_121: .asciiz " X X X X X" -string_122: .asciiz "X X X X X " -string_123: .asciiz " X XX X X X " -string_124: .asciiz "X X X XX X " -string_125: .asciiz " X X X X X" -string_126: .asciiz "X X X X X " -string_127: .asciiz "X X X X X X X X X" -string_128: .asciiz "X X X X X" -string_129: .asciiz " X X X X X " -string_130: .asciiz " XX XXXX XXXX XX " -string_131: .asciiz "Would you like to continue with the next generation? \n" -string_132: .asciiz "Please use lowercase y or n for your answer [y]: " -string_133: .asciiz "\n" -string_134: .asciiz "n" -string_136: .asciiz "\n\n" -string_137: .asciiz "Would you like to choose a background pattern? \n" -string_138: .asciiz "Please use lowercase y or n for your answer [n]: " -string_139: .asciiz "y" -string_141: .asciiz "Welcome to the Game of Life.\n" -string_142: .asciiz "There are many initial states to choose from. \n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Board_INH: -.word IO_INH -CellularAutomaton_INH: -.word Board_INH -Main_INH: -.word CellularAutomaton_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Board_name: .asciiz "Board" -Board_VT: -.word Board_INH -.word Board.size_of_board -.word Board.board_init -CellularAutomaton_name: .asciiz "CellularAutomaton" -CellularAutomaton_VT: -.word CellularAutomaton_INH -.word CellularAutomaton.init -.word CellularAutomaton.print -.word CellularAutomaton.num_cells -.word CellularAutomaton.cell -.word CellularAutomaton.north -.word CellularAutomaton.south -.word CellularAutomaton.east -.word CellularAutomaton.west -.word CellularAutomaton.northwest -.word CellularAutomaton.northeast -.word CellularAutomaton.southeast -.word CellularAutomaton.southwest -.word CellularAutomaton.neighbors -.word CellularAutomaton.cell_at_next_evolution -.word CellularAutomaton.evolve -.word CellularAutomaton.option -.word CellularAutomaton.prompt -.word CellularAutomaton.prompt2 -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Board.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Board.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Board_name -jr $ra -Board.size_of_board: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Board.board_init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 15 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 16 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_2 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 20 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_3 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 21 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 132($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 25 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_5 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 156($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 28 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_6 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 176($sp) -sw $t1, 4($sp) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 184($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 192($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 192($sp) -sw $t1, 12($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 52($sp) -j _fi_6 -_if_6: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 204($sp) -sw $t1, 4($sp) -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 212($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 220($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 220($sp) -sw $t1, 12($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_6: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 104($sp) -j _fi_5 -_if_5: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 232($sp) -sw $t1, 4($sp) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 240($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 248($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 248($sp) -sw $t1, 12($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 132($sp) -_fi_5: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 156($sp) -j _fi_4 -_if_4: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 260($sp) -sw $t1, 4($sp) -#Assignment -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 268($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 276($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 276($sp) -sw $t1, 12($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 184($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 208($sp) -j _fi_3 -_if_3: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 288($sp) -sw $t1, 4($sp) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 296($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 304($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 304($sp) -sw $t1, 12($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 236($sp) -_fi_3: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 260($sp) -j _fi_2 -_if_2: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 316($sp) -sw $t1, 4($sp) -#Assignment -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 324($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 332($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 332($sp) -sw $t1, 12($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 288($sp) -_fi_2: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 312($sp) -j _fi_1 -_if_1: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 344($sp) -sw $t1, 4($sp) -#Assignment -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 352($sp) -sw $t1, 8($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 360($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 360($sp) -sw $t1, 12($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 340($sp) -_fi_1: -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 368($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 348($sp) -addiu $sp, $sp, 8 -lw $t0, 368($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, CellularAutomaton_name -jr $ra -CellularAutomaton.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 9 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_7 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 10 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_8: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_8 -j _pool_8 -_body_8: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 4($sp) -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 7 offset 24 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 27 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 128($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 64($sp) -addiu $sp, $sp, 12 -addiu $sp, $sp, 8 -j _loop_8 -_pool_8: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 136($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_10 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 35 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 144($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 120($sp) -addiu $sp, $sp, 16 -lw $t0, 144($sp) -sw $t0, 5555($sp) -addiu $sp, $sp, 8 -lw $t0, 24($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.num_cells: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.cell: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_11 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 56($sp) -j _fi_11 -_if_11: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_12 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 60($sp) -_fi_11: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.north: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_13 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 19 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 64($sp) -j _fi_13 -_if_13: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_14 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 68($sp) -_fi_13: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.south: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_15 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 19 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 64($sp) -j _fi_15 -_if_15: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_16 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 68($sp) -_fi_15: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.east: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 40($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 24($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 68($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_17 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 28 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 100($sp) -j _fi_17 -_if_17: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_18 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 104($sp) -_fi_17: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.west: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_19 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 76($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 40($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_20 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 28 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 76($sp) -j _fi_20 -_if_20: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_21 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_20: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 108($sp) -j _fi_19 -_if_19: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_22 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 112($sp) -_fi_19: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.northwest: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_23 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 40($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_24 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 31 result CellularAutomaton.north -jal CellularAutomaton.north -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 76($sp) -j _fi_24 -_if_24: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_25 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_24: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 120($sp) -j _fi_23 -_if_23: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_26 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 124($sp) -_fi_23: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.northeast: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_27 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 40($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 24($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 68($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_28 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 128($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 132($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 37 result CellularAutomaton.north -jal CellularAutomaton.north -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 100($sp) -j _fi_28 -_if_28: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_29 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 104($sp) -_fi_28: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 144($sp) -j _fi_27 -_if_27: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_30 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 148($sp) -_fi_27: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.southeast: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_31 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 40($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 24($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 68($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_32 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 128($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 132($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 37 result CellularAutomaton.south -jal CellularAutomaton.south -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 100($sp) -j _fi_32 -_if_32: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_33 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 104($sp) -_fi_32: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 144($sp) -j _fi_31 -_if_31: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_34 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 148($sp) -_fi_31: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.southwest: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_35 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -sw $t0, 4($sp) -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 40($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_36 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -sw $t0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 7 offset 31 result CellularAutomaton.south -jal CellularAutomaton.south -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 76($sp) -j _fi_36 -_if_36: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_37 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_36: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 120($sp) -j _fi_35 -_if_35: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_38 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 124($sp) -_fi_35: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.neighbors: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 16 result CellularAutomaton.north -jal CellularAutomaton.north -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_39 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_40 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_40 -_if_40: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_40: -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 28 result CellularAutomaton.south -jal CellularAutomaton.south -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_41 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_42 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_42 -_if_42: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_42: -addiu $sp, $sp, 8 -lw $t0, 52($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 100($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 156($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 156($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 40 result CellularAutomaton.east -jal CellularAutomaton.east -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_43 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_44 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_44 -_if_44: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_44: -addiu $sp, $sp, 8 -lw $t0, 52($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 152($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 204($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 204($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 52 result CellularAutomaton.west -jal CellularAutomaton.west -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_45 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_46 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_46 -_if_46: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_46: -addiu $sp, $sp, 8 -lw $t0, 52($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 204($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 252($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 252($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 64 result CellularAutomaton.northeast -jal CellularAutomaton.northeast -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_47 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_48 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_48 -_if_48: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_48: -addiu $sp, $sp, 8 -lw $t0, 52($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 256($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 300($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 300($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 76 result CellularAutomaton.northwest -jal CellularAutomaton.northwest -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_49 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_50 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_50 -_if_50: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_50: -addiu $sp, $sp, 8 -lw $t0, 52($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 308($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 348($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 348($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 88 result CellularAutomaton.southeast -jal CellularAutomaton.southeast -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_51 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_52 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_52 -_if_52: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_52: -addiu $sp, $sp, 8 -lw $t0, 52($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 360($sp) -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 396($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 396($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 100 result CellularAutomaton.southwest -jal CellularAutomaton.southwest -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_53 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_54 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_54 -_if_54: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_54: -addiu $sp, $sp, 8 -lw $t0, 52($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 412($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 416($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.cell_at_next_evolution: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 8 result CellularAutomaton.neighbors -jal CellularAutomaton.neighbors -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_55 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 16 result CellularAutomaton.neighbors -jal CellularAutomaton.neighbors -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_56 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_57 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_56 -_if_56: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 26 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_58 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_59 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_60 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -j _fi_59 -_if_59: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_61 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_59: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 88($sp) -_fi_56: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 120($sp) -j _fi_55 -_if_55: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_62 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 124($sp) -_fi_55: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.evolve: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_63: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_63 -j _pool_63 -_body_63: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 72($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 21 result CellularAutomaton.cell_at_next_evolution -jal CellularAutomaton.cell_at_next_evolution -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result String.concat -jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 88($sp) -sw $t1, -4($sp) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 108($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 48($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_63 -_pool_63: -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 112($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 120($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 88($sp) -addiu $sp, $sp, 12 -lw $t0, 120($sp) -sw $t0, 7777($sp) -addiu $sp, $sp, 8 -lw $t0, 32($sp) -sw $t0, 5555($sp) -addiu $sp, $sp, 8 -lw $t0, 24($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.option: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_64 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 9 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_65 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 12 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_66 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 15 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_67 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 18 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_68 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 21 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_69 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 24 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_70 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 27 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_71 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 30 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 128($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_72 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 33 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 140($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_73 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 36 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 152($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_74 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 39 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 164($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_75 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 42 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 176($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_76 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 45 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 188($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_77 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 48 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 200($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_78 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 51 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 212($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_79 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 54 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 224($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_80 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 57 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 236($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_81 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 60 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 248($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_82 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 63 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 260($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_83 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 66 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 272($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_84 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 69 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 284($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_85 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 72 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 296($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_86 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 75 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 308($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 77 result IO.in_int -jal IO.in_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 308($sp) -sw $t1, -4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 320($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_87 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 81 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 336($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_88 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 360($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_89 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 384($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_90 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 408($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_91 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 432($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_92 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 456($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_93 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 480($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_94 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 504($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_95 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 528($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_96 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 552($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_97 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 576($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 11 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_98 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 600($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 12 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_99 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 624($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 13 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_100 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 648($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 14 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_101 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 672($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 15 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_102 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 696($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 16 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_103 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 720($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 17 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_104 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 744($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 18 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_105 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 768($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 19 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_106 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 792($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 20 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_107 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 816($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 21 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_108 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_109 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_108 -_if_108: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_110 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -_fi_108: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 64($sp) -j _fi_107 -_if_107: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_111 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 68($sp) -_fi_107: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 96($sp) -j _fi_106 -_if_106: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_112 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 100($sp) -_fi_106: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 128($sp) -j _fi_105 -_if_105: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_113 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 132($sp) -_fi_105: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 160($sp) -j _fi_104 -_if_104: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_114 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 164($sp) -_fi_104: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 192($sp) -j _fi_103 -_if_103: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_115 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 196($sp) -_fi_103: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 224($sp) -j _fi_102 -_if_102: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_116 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 228($sp) -_fi_102: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 256($sp) -j _fi_101 -_if_101: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_117 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 260($sp) -_fi_101: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 288($sp) -j _fi_100 -_if_100: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_118 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 292($sp) -_fi_100: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 320($sp) -j _fi_99 -_if_99: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_119 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 324($sp) -_fi_99: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 352($sp) -j _fi_98 -_if_98: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_120 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 356($sp) -_fi_98: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 384($sp) -j _fi_97 -_if_97: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_121 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 388($sp) -_fi_97: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 416($sp) -j _fi_96 -_if_96: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_122 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 420($sp) -_fi_96: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 448($sp) -j _fi_95 -_if_95: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_123 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 452($sp) -_fi_95: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 480($sp) -j _fi_94 -_if_94: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_124 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 484($sp) -_fi_94: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 512($sp) -j _fi_93 -_if_93: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_125 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 516($sp) -_fi_93: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 544($sp) -j _fi_92 -_if_92: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_126 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 548($sp) -_fi_92: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 576($sp) -j _fi_91 -_if_91: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_127 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 580($sp) -_fi_91: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 608($sp) -j _fi_90 -_if_90: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_128 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 612($sp) -_fi_90: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 640($sp) -j _fi_89 -_if_89: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_129 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 644($sp) -_fi_89: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 672($sp) -j _fi_88 -_if_88: -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_130 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 676($sp) -_fi_88: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 984($sp) -addiu $sp, $sp, 104 -lw $t0, 1000($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 12($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.prompt: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_131 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 9 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_132 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 12 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 14 result IO.in_string -jal IO.in_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 56($sp) -sw $t1, -4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_133 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 18 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_134 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_135 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_135 -_if_135: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -_fi_135: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 92($sp) -addiu $sp, $sp, 20 -lw $t0, 108($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 12($sp) -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -CellularAutomaton.prompt2: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_136 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 8 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_137 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 11 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_138 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 14 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 16 result IO.in_string -jal IO.in_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $t0, 4($sp) -lw $t1, 64($sp) -sw $t1, -4($sp) -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_139 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_140 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_140 -_if_140: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 36($sp) -_fi_140: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 92($sp) -addiu $sp, $sp, 20 -lw $t0, 104($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_141 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 10 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_142 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 12 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_143: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 14 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -bnez $t0, _body_143 -j _pool_143 -_body_143: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 68($sp) -sw $t1, -4($sp) -#Assignment -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 19 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -lw $t1, 76($sp) -sw $t1, -4($sp) -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, CellularAutomaton_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result CellularAutomaton.Constructor -la $v0, 1 -jal CellularAutomaton.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 104($sp) -sw $t1, 4($sp) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_144: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 124($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -bnez $t0, _body_144 -j _pool_144 -_body_144: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 34 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -bnez $t0, _if_145 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 144($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 20($sp) -j _fi_145 -_if_145: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 160($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 172($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 48($sp) -_fi_145: -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_144 -_pool_144: -lw $t0, 4($sp) -sw $t0, 116($sp) -addiu $sp, $sp, 20 -addiu $sp, $sp, 8 -j _loop_143 -_pool_143: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 180($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 152($sp) -addiu $sp, $sp, 16 -lw $t0, 180($sp) -sw $t0, 6666($sp) -addiu $sp, $sp, 8 -lw $t0, 28($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 12($sp) -addiu $sp, $sp, 4 -li $v0, 10 -syscall diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips deleted file mode 100644 index 02e7b5eb..00000000 --- a/tests/codegen/list.mips +++ /dev/null @@ -1,1061 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_2: .asciiz " " -string_3: .asciiz "\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -List_INH: -.word Object_INH -Cons_INH: -.word List_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -List_name: .asciiz "List" -List_VT: -.word List_INH -.word List.isNil -.word List.head -.word List.tail -.word List.cons -Cons_name: .asciiz "Cons" -Cons_VT: -.word Cons_INH -.word Cons.isNil -.word Cons.head -.word Cons.tail -.word Cons.init -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.print_list -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -List.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, List_name -jr $ra -List.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.head: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.tail: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.cons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 6 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Cons_name -jr $ra -Cons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.head: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.tail: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, 4($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 12 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 14 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 18 result Main.print_list -jal Main.print_list -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 60($sp) -j _fi_1 -_if_1: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 20 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 68($sp) -_fi_1: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, List_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result List.Constructor -la $v0, 1 -jal List.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 8 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 10 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 13 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 15 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 76($sp) -sw $t1, 4($sp) -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_4: -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -li $t1, 1 -sub $t0, $t1, $t0 -sw $t0, 16($sp) -lw $t0, 4($sp) -bnez $t0, _body_4 -j _pool_4 -_body_4: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 27 result Main.print_list -jal Main.print_list -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -lw $t1, 120($sp) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_4 -_pool_4: -lw $t0, 4($sp) -sw $t0, 112($sp) -addiu $sp, $sp, 8 -li $v0, 10 -syscall diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips deleted file mode 100644 index 12d22c89..00000000 --- a/tests/codegen/new_complex.mips +++ /dev/null @@ -1,1215 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_2: .asciiz "=(\n" -string_3: .asciiz "=)\n" -string_5: .asciiz "=(\n" -string_6: .asciiz "=)\n" -string_8: .asciiz "+" -string_9: .asciiz "I" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Complex_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main -Complex_name: .asciiz "Complex" -Complex_VT: -.word Complex_INH -.word Complex.init -.word Complex.print -.word Complex.reflect_0 -.word Complex.reflect_X -.word Complex.reflect_Y -.word Complex.equal -.word Complex.x_value -.word Complex.y_value - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 16($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 15 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 40($sp) -j _fi_1 -_if_1: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 18 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 52($sp) -_fi_1: -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 96($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 108($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 8 offset 4 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 30 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 44($sp) -j _fi_4 -_if_4: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 33 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 56($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 120($sp) -addiu $sp, $sp, 8 -lw $t0, 132($sp) -sw $t0, 3333($sp) -addiu $sp, $sp, 8 -Complex.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Complex_name -jr $ra -Complex.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 48($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 48($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.print: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_7 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 14 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_8 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 8 offset 2 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 10 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 68($sp) -j _fi_7 -_if_7: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 84($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 22 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_7: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.reflect_0: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 56($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.reflect_X: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.reflect_Y: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.equal: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_10 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -j _fi_10 -_if_10: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 60($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -lw $t1, 8($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_11 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 32($sp) -j _fi_11 -_if_11: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 40($sp) -_fi_11: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 80($sp) -_fi_10: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.x_value: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Complex.y_value: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -li $v0, 10 -syscall diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips deleted file mode 100644 index 3a98b153..00000000 --- a/tests/codegen/palindrome.mips +++ /dev/null @@ -1,812 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_4: .asciiz "enter a string\n" -string_6: .asciiz "that was not a palindrome\n" -string_7: .asciiz "that was a palindrome\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.pal -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.pal: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_2 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 80($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -sw $t0, 4($sp) -#Args: 0 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 44($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 64($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_3 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 72($sp) -j _fi_3 -_if_3: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 152($sp) -sw $t0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 168($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -sub $t0, $t0, $t1 -sw $t0, 20($sp) -addiu $sp, $sp, 8 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 11 offset 47 result Main.pal -jal Main.pal -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 120($sp) -_fi_3: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 148($sp) -j _fi_2 -_if_2: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 152($sp) -_fi_2: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 184($sp) -j _fi_1 -_if_1: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 188($sp) -_fi_1: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -not $t0, $t0 -sw $t0, 8($sp) -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, 4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_4 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 8 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 11 result IO.in_string -jal IO.in_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 2 offset 11 result Main.pal -jal Main.pal -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_5 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 14 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 24($sp) -j _fi_5 -_if_5: -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_7 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 17 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 36($sp) -_fi_5: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 64($sp) -addiu $sp, $sp, 12 -li $v0, 10 -syscall diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips deleted file mode 100644 index 131da837..00000000 --- a/tests/codegen/primes.mips +++ /dev/null @@ -1,887 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "2 is trivially prime.\n" -string_7: .asciiz " is prime.\n" -string_9: .asciiz "continue" -string_10: .asciiz "halt" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 24 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 5 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($sp) -#Integer -li $a0, 500 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 40($sp) -sw $t1, 16($sp) -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_2: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -bnez $t0, _body_2 -j _pool_2 -_body_2: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 68($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 80($sp) -sw $t1, 8($sp) -#Assignment -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 84($sp) -sw $t1, 12($sp) -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_3: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 112($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 116($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 144($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 152($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 160($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 164($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -div $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -sub $t0, $t0, $t1 -sw $t0, 40($sp) -addiu $sp, $sp, 8 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 8($sp) -lw $t1, 4($sp) -seq $t0, $t0, $t1 -sw $t0, 52($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_5 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 64($sp) -j _fi_5 -_if_5: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 72($sp) -_fi_5: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 112($sp) -j _fi_4 -_if_4: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 116($sp) -_fi_4: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_3 -j _pool_3 -_body_3: -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 220($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 232($sp) -sw $t1, 12($sp) -addiu $sp, $sp, 8 -j _loop_3 -_pool_3: -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 244($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 252($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 256($sp) -lw $t1, 12($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -mult $t0, $t1 -mflo $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 8($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 28($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_6 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 40($sp) -j _fi_6 -_if_6: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 284($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 284($sp) -sw $t1, 4($sp) -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 296($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 74 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_7 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 76 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 28($sp) -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 76($sp) -_fi_6: -addiu $sp, $sp, 8 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 320($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 324($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_8 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 28($sp) -j _fi_8 -_if_8: -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_10 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 1 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 44($sp) -_fi_8: -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 296($sp) -addiu $sp, $sp, 20 -addiu $sp, $sp, 8 -j _loop_2 -_pool_2: -lw $t0, 4($sp) -lw $t1, 352($sp) -sw $t1, 20($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 10 -syscall diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips deleted file mode 100644 index 294cfc6a..00000000 --- a/tests/codegen/print-cool.mips +++ /dev/null @@ -1,566 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Object_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Object.Constructor -la $v0, 1 -jal Object.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 4 offset 1 result Object.type_name -jal Object.type_name -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 8 offset 3 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 9 offset 13 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Dispatch in place -#obj 1 offset 1 result Bool.type_name -jal Bool.type_name -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 3 result String.substr -jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -#Dispatch in place -#obj 15 offset 1 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 21 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 76($sp) -addiu $sp, $sp, 8 -li $v0, 10 -syscall diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips deleted file mode 100644 index d0474d0b..00000000 --- a/tests/codegen/sort-list.mips +++ /dev/null @@ -1,1769 +0,0 @@ -.data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_2: .asciiz "\n" -string_4: .asciiz "How many numbers to sort? " -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -List_INH: -.word IO_INH -Cons_INH: -.word List_INH -Nil_INH: -.word List_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -List_name: .asciiz "List" -List_VT: -.word List_INH -.word List.isNil -.word List.cons -.word List.car -.word List.cdr -.word List.rev -.word List.sort -.word List.insert -.word List.rcons -.word List.print_list -Cons_name: .asciiz "Cons" -Cons_VT: -.word Cons_INH -.word Cons.isNil -.word Cons.init -.word Cons.car -.word Cons.cdr -.word Cons.rev -.word Cons.sort -.word Cons.insert -.word Cons.rcons -.word Cons.print_list -Nil_name: .asciiz "Nil" -Nil_VT: -.word Nil_INH -.word Nil.isNil -.word Nil.rev -.word Nil.sort -.word Nil.insert -.word Nil.rcons -.word Nil.print_list -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.iota -.word Main.main - -.globl main -.text -IO.out_string: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.out_int: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Object.copy: -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -jr $ra - - -Object.abort: -li $v0, 10 -syscall - - -String.length: -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception -li $v0, 4 -syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 0($fp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -jr $ra - -Object.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Object.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Int.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -IO.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Bool.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -String.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 -j Object.abort -#--------------End Initial Code--------------- -List.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, List_name -jr $ra -List.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -sw $t0, 16($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.cons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 28($sp) -sw $t0, 4444($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.car: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 360000 -syscall -sw $v0, 4($sp) -la $a1, Int_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Int.Constructor -la $v0, 1 -jal Int.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, List_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result List.Constructor -la $v0, 1 -jal List.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.rev: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 4 result List.cdr -jal List.cdr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.sort: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 4 result List.cdr -jal List.cdr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.insert: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result List.cdr -jal List.cdr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.rcons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result List.cdr -jal List.cdr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -List.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 16($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 2 offset 4 result Object.abort -jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Cons_name -jr $ra -Cons.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.init: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 24($sp) -sw $t1, 4($sp) -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -sw $t0, 24($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.car: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.cdr: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.rev: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.sort: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.insert: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 56($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 64($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 9 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 64($sp) -j _fi_1 -_if_1: -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 100($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 6 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 4($sp) -sw $t0, 92($sp) -_fi_1: -addiu $sp, $sp, 8 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.rcons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Args: 1 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 40($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 9 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Cons.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 24($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 6 result IO.out_int -jal IO.out_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 32($sp) -sw $t0, 4($sp) -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 9 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 8($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 40($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Nil_name -jr $ra -Nil.isNil: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.rev: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -sw $t0, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.sort: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 12($sp) -sw $t0, 4($sp) -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.insert: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 20($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 3 offset 6 result Nil.rcons -jal Nil.rcons -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.rcons: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 28($sp) -sw $t0, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 36($sp) -sw $t0, 4($sp) -#Dispatch in place -#obj 6 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Nil.print_list: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.Constructor: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.type_name: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.iota: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, Nil_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Nil.Constructor -la $v0, 1 -jal Nil.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 28($sp) -sw $t1, 4($sp) -#Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -_loop_3: -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 52($sp) -sw $t0, 4($sp) -lw $t0, 4($sp) -lw $t1, 4($sp) -li $t3, 1 -add $t0, $t0, $t3 -sge $t0, $t1, $t0 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_3 -j _pool_3 -_body_3: -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Assignment -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 12 -syscall -sw $v0, 4($sp) -la $a1, Cons_VT -sw $a1, ($v0) -lw $t0, 4($sp) -sw $t0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Cons.Constructor -la $v0, 1 -jal Cons.Constructor -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 88($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Args: 1 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 92($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -#Dispatch in place -#obj 6 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $t0, 4($sp) -lw $t1, 96($sp) -sw $t1, 4($sp) -#Assignment -#Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 104($sp) -lw $t1, -4($t0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 4($sp) -lw $t1, 4($sp) -add $t0, $t0, $t1 -sw $t0, 12($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -lw $t1, 116($sp) -sw $t1, -4($sp) -lw $t0, 4($sp) -sw $t0, 52($sp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 -j _loop_3 -_pool_3: -lw $t0, 108($sp) -sw $t0, 9999($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $t0, 44($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -lw $t0, 4($sp) -sw $t0, 32($sp) -addiu $sp, $sp, 12 -lw $v0, 4($sp) -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addi $sp, $sp, -4 -jr $ra -Main.main: -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -la $a0, string_4 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 5 result IO.out_string -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#push object -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 1 offset 10 result IO.in_int -jal IO.in_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 2 offset 10 result Main.iota -jal Main.iota -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -#Dispatch in place -#obj 6 offset 1 result -1 -jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $t0, 4($sp) -sw $t0, 36($sp) -addiu $sp, $sp, 8 -li $v0, 10 -syscall From 8935d0cd27a6db267eddf529d2bc0ceb6bf42cda Mon Sep 17 00:00:00 2001 From: hros18 Date: Sat, 5 Dec 2020 22:34:30 -0500 Subject: [PATCH 109/140] some bug corrections in $sp use, $fp, and other functionalities --- src/code_generation/statics/IO.s | 8 +- src/code_generation/statics/Object.s | 2 +- src/code_generation/statics/String.s | 4 +- src/visitors/to_mips.py | 35 +- src/visitors/transpilator.py | 83 +- tests/codegen/arith.mips | 4693 ++++++++------------------ tests/codegen/cells.mips | 1114 ++++++ tests/codegen/graph.mips | 2686 +++++++++++++++ 8 files changed, 5190 insertions(+), 3435 deletions(-) create mode 100644 tests/codegen/cells.mips create mode 100644 tests/codegen/graph.mips diff --git a/src/code_generation/statics/IO.s b/src/code_generation/statics/IO.s index 3d72419c..133d4b54 100644 --- a/src/code_generation/statics/IO.s +++ b/src/code_generation/statics/IO.s @@ -6,7 +6,7 @@ li $v0, 4 lw $a0, 8($sp) syscall lw $ra, 4($sp) -addiu $sp, $sp, 12 +addiu $sp, $sp, 8 lw $fp, 0($sp) jr $ra @@ -19,7 +19,7 @@ li $v0, 1 lw $a0, 8($sp) syscall lw $ra, 4($sp) -addiu $sp, $sp, 12 +addiu $sp, $sp, 8 lw $fp, 0($sp) jr $ra @@ -55,7 +55,7 @@ bne $t1 , $t2 not_slash sb $zero, ($t0) not_slash: move $a0, $v0 -lw $ra, 4($fp) +lw $ra, 4($sp) addiu $sp, $sp, 8 lw $fp, 0($sp) jr $ra @@ -69,7 +69,7 @@ lw $a0, 4($fp) li $v0, 5 syscall move $a0, $v0 -lw $ra, 4($fp) +lw $ra, 4($sp) addiu $sp, $sp, 8 lw $fp, 0($sp) jr $ra \ No newline at end of file diff --git a/src/code_generation/statics/Object.s b/src/code_generation/statics/Object.s index 51c5584a..afa4a981 100644 --- a/src/code_generation/statics/Object.s +++ b/src/code_generation/statics/Object.s @@ -18,7 +18,7 @@ addiu $a3, $a3, 4 beq $a0, $zero, _copy.end j _copy.loop _copy.end: -lw $ra, 4($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 lw $fp, 0($sp) jr $ra diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s index cf4e78db..9dc7e69b 100644 --- a/src/code_generation/statics/String.s +++ b/src/code_generation/statics/String.s @@ -76,7 +76,7 @@ addiu $t1, $t1, -1 bne $t1, $zero, substr sb $zero, ($t0) move $a0, $v0 -lw $ra, 0($fp) +lw $ra, 16($sp) addiu $sp, $sp, 20 lw $fp, 0($sp) jr $ra @@ -128,7 +128,7 @@ j str.end_equal_string str.equals_strings: li $a0, 1 str.end_equal_string: -lw $ra, 0($fp) +lw $ra, 12($sp) addiu $sp, $sp, 16 lw $fp, 0($sp) jr $ra \ No newline at end of file diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index a4cd2e41..15e4071d 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -100,6 +100,7 @@ def visit(self, node): self.code.append("add $a0, $a0, $t0\n") self.code.append("sge $a0, $t1, $a0\n") self.code.append("sw $a0, 4($sp)\n") + self.code.append("addiu $sp, $sp, 4\n") @visitor.when(UnaryOperationIL) def visit(self, node): @@ -125,24 +126,24 @@ def visit(self, node): #assignment @visitor.when(VarToVarIL) def visit(self, node): - self.code.append("lw $a0, {}($fp)\n".format(4 * node.right)) - self.code.append("sw $a0, {}($fp)\n".format(4 * node.left)) + self.code.append("lw $a0, {}($sp)\n".format(4 * node.right)) + self.code.append("sw $a0, {}($sp)\n".format(4 * node.left)) @visitor.when(VarToMemoIL) def visit(self, node): - self.code.append("lw $a0, {}($fp)\n".format(4*node.right)) - self.code.append("lw $t1, {}($fp)\n".format(4*node.left)) - self.code.append("sw $t1, {}($fp)\n".format(4*node.offset)) + self.code.append("lw $a0, {}($sp)\n".format(4*node.right)) + self.code.append("lw $t1, {}($sp)\n".format(4*node.left)) + self.code.append("sw $t1, {}($sp)\n".format(4*node.offset)) @visitor.when(MemoToVarIL) def visit(self, node): - self.code.append("lw $a0, {}($fp)\n".format(4 * node.right)) + self.code.append("lw $a0, {}($sp)\n".format(4 * node.right)) self.code.append("lw $t1, {}($a0)\n".format(4 * node.offset)) - self.code.append("sw $t1, {}($fp)\n".format(4 * node.left)) + self.code.append("sw $t1, {}($sp)\n".format(4 * node.left)) @visitor.when(ConstToMemoIL) def visit(self, node): - self.code.append("lw $a0, {}($fp)\n".format(4 * node.left)) + self.code.append("lw $a0, {}($sp)\n".format(4 * node.left)) self.code.append("li $t1, {}\n".format(node.right)) self.code.append("sw $t1, {}($a0)\n".format(4*node.offset)) @@ -166,8 +167,8 @@ def visit(self, node): @visitor.when(IfJumpIL) def visit(self, node): - self.code.append("lw $t0, {}($sp)\n".format(4 * node.var)) - self.code.append("bnez $t0, " + node.label + "\n") + self.code.append("lw $a0, {}($fp)\n".format(4 * node.var)) + self.code.append("bnez $a0, " + node.label + "\n") @visitor.when(HierarchyIL) def visit(self, node): @@ -196,7 +197,11 @@ def visit(self, node): @visitor.when(ReturnIL) def visit(self, node): - self.code.append("lw $ra, 4($sp)\n") + # if node.sizeof == 0: + # size = 0 + # else: + # size = node.sizeof - 1 + self.code.append("lw $ra, {}($sp)\n".format(4*node.sizeof + 4)) self.code.append("addiu $sp, $sp, {}\n".format(4*node.sizeof + 8)) self.code.append("lw $fp, 0($sp)\n") self.code.append("jr $ra\n") @@ -219,8 +224,8 @@ def visit(self, node): self.code.append("jal IO.out_string\n") else: self.code.append("jal {}\n".format(node.result)) - self.code.append("sw $a1, {}($sp)\n".format(0)) - self.code.append("addi $sp, $sp, -4\n") + self.code.append("sw $a0, {}($sp)\n".format(4)) + self.code.append("addi $sp, $sp, 4\n") # self.code.append("lw $ra, {}($sp)\n".format(4)) @@ -234,7 +239,7 @@ def visit(self, node): self.code.append("jal IO.out_string\n") else: self.code.append("jal {}\n".format(node.result)) - self.code.append("sw $a1, 0($sp)\n") + self.code.append("sw $a0, 0($sp)\n") self.code.append("addi $sp, $sp, -4\n") @visitor.when(InheritIL) @@ -259,7 +264,7 @@ def visit(self, node): @visitor.when(LoadLabelIL) def visit(self, node): - self.code.append("la $a0, " + node.label + "\n") # self.code.append("sw $a0, {}($sp)\n".format(-4 * node.var)) + self.code.append("la $a0, " + node.label + "\n") self.code.append("sw $a0, 0($sp)\n") self.code.append("addi $sp, $sp, -4\n") diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 46b5d18d..6dbc7f2a 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -81,9 +81,9 @@ def setInitialCode(self): # self.code.append(CustomLineIL("sub $a2, $a2, $a2\n")) # self.code.append(CustomLineIL("sub $a3, $a3, $a3\n")) - self.code.append(PushIL()) - self.code.append(PushIL()) - self.code.append(PushIL()) + # self.code.append(PushIL()) + # self.code.append(PushIL()) + # self.code.append(PushIL()) self.code.append(AllocateIL(1, self.virtual_table.get_index('Main'), 'Main')) self.code.append(DispatchParentIL(2, 1, 'Main.Constructor')) @@ -97,8 +97,8 @@ def setBuiltInTypes(self): built_in = ['Object','Int', 'IO', 'Bool', 'String'] for t in built_in: self.code.append(LabelIL(t, 'Constructor', True)) - self.code.append(PushIL()) - self.code.append(ReturnIL(1)) + # self.code.append(PushIL()) + self.code.append(ReturnIL(0)) self.setClassTypeName(t) def setClassConstructor(self, attributes): @@ -116,8 +116,12 @@ def setClassConstructor(self, attributes): index = self.virtual_table.get_attributes_id(self.current_class, node.id) self.code.append(VarToMemoIL(vars.id('self'), vars.id(p), index)) - self.code.append(PushIL()) - self.code.append(ReturnIL()) + # self.code.append(PushIL()) + # if self.current_class == 'Main': + # self.code.append(ReturnIL(len(at)) + # else: + # self.code.append(ReturnIL()) + self.code.append(ReturnIL(1)) def setClassTypeName(self, claSS): self.code.append(LabelIL(claSS, 'type_name', True)) @@ -128,7 +132,7 @@ def setClassTypeName(self, claSS): def handleBinaryOps(self, node, variables, symbol): self.code.append(CommentIL('Binary')) - self.code.append(PushIL()) + # self.code.append(PushIL()) res = variables.add_temp() self.visit(node.left, variables) @@ -140,12 +144,12 @@ def handleBinaryOps(self, node, variables, symbol): variables.pop_var() variables.pop_var() - self.code.append(PopIL(2)) + # self.code.append(PopIL(2)) def handleUnaryOps(self, node, variables, symbol): self.code.append(CommentIL('Unary')) res = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) self.visit(node.expr, variables) v = variables.peek_last() @@ -204,7 +208,7 @@ def visit(self, node): @visitor.when(VarDeclarationNode) def visit(self, node, variables): - self.code.append(PushIL()) + # self.code.append(PushIL()) p = variables.add_var(node.idx) if node.expr != None: @@ -212,7 +216,7 @@ def visit(self, node, variables): res = variables.peek_last() self.code.append(VarToVarIL(variables.id(p), variables.id(res))) variables.pop_var() - self.code.append(PopIL()) + # self.code.append(PopIL()) #operations: binary @visitor.when(SumNode) @@ -256,7 +260,7 @@ def visit(self, node, variables): #expressions: atomics @visitor.when(VariableNode) def visit(self, node, variables): - self.code.append(PushIL()) + # self.code.append(PushIL()) result = variables.add_temp() # print(node.id) if node.id in variables.stack: @@ -267,12 +271,12 @@ def visit(self, node, variables): @visitor.when(NewNode) def visit(self, node, variables): result = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) dispatch = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) - self.code.append(PushIL()) + # self.code.append(PushIL()) p = variables.add_temp() size = self.virtual_table.get_index(node.type) @@ -281,7 +285,8 @@ def visit(self, node, variables): self.code.append(VarToVarIL(variables.id(result), variables.id(p))) self.code.append(DispatchParentIL(variables.id(dispatch), variables.id(p), node.type + '.Constructor')) - self.code.append(PopIL(2)) + # self.code.append(PopIL(3)) + variables.pop_var() variables.pop_var() variables.pop_var() @@ -290,7 +295,7 @@ def visit(self, node, variables): def visit(self, node, variables): self.code.append(CommentIL('Condition')) result = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) self.visit(node.cond, variables) p = variables.peek_last() @@ -315,13 +320,13 @@ def visit(self, node, variables): self.code.append(LabelIL('_fi', IF.second)) variables.pop_var() - self.code.append(PopIL(2)) + # self.code.append(PopIL(2)) @visitor.when(WhileNode) def visit(self, node, variables): self.code.append(CommentIL('loop')) - self.code.append(PushIL()) + # self.code.append(PushIL()) result = variables.add_temp() @@ -342,7 +347,7 @@ def visit(self, node, variables): self.visit(node.expr, variables) variables.pop_var() variables.pop_var() - self.code.append(PopIL(2)) + # self.code.append(PopIL(2)) self.code.append(GotoIL(LOOP.label)) self.code.append(POOL) @@ -351,7 +356,7 @@ def visit(self, node, variables): @visitor.when(LetNode) def visit(self, node, variables): self.code.append(CommentIL('Let')) - self.code.append(PushIL()) + # self.code.append(PushIL()) result = variables.add_temp() result1 = variables.add_temp() vars = variables.get_copy() @@ -370,7 +375,7 @@ def visit(self, node, variables): except: pass - self.code.append(PopIL(pop_times)) + # self.code.append(PopIL(pop_times)) @@ -382,14 +387,14 @@ def visit(self, node, variables): def visit(self, node, variables): self.code.append(CommentIL('Block')) result = variables.add_temp() - self.code.append(PushIL(0)) + # self.code.append(PushIL(0)) for expr in node.expr_list: self.visit(expr, variables) p = variables.peek_last() self.code.append(VarToVarIL(variables.id(result), variables.id(p))) - self.code.append(PopIL(len(node.expr_list))) + # self.code.append(PopIL(len(node.expr_list))) for i in range(len(node.expr_list)): variables.pop_var() @@ -399,7 +404,7 @@ def visit(self, node, variables): # node.case_list.sort(key = lambda x : self.depth[x.typex], reverse = True) result = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) self.visit(node.expr, variables) p = variables.peek_last() @@ -411,12 +416,12 @@ def visit(self, node, variables): index = 0 for b in node.case_list: tmp = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) self.code.append(InheritIL(variables.id(p), b.typex, variables.id(tmp))) self.code.append(IfJumpIL(variables.id(tmp), labels[index].label)) - self.code.append(PopIL(1)) + # self.code.append(PopIL(1)) variables.pop_var() index += 1 @@ -426,9 +431,9 @@ def visit(self, node, variables): self.code.append(labels[i]) i += 1 variables.pop_var() - self.code.append(PopIL(1)) + # self.code.append(PopIL(1)) - self.code.append(PushIL()) + # self.code.append(PushIL()) result = variables.add_var(b.id) self.code.append(VarToVarIL(variables.id(result), variables.id(p))) @@ -440,7 +445,7 @@ def visit(self, node, variables): variables.pop_var() variables.pop_var() - self.code.append(PopIL(3)) + # self.code.append(PopIL(3)) @visitor.when(OptionNode) def visit(self, node, variables): @@ -466,7 +471,7 @@ def visit(self, node, variables): self.code.append(CommentIL('Point-Dispatch')) result = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) # print('----------node {}---------'.format(node.id)) index = self.virtual_table.get_method_id(node.obj, node.id) if str(node.id) == 'type_name': @@ -488,21 +493,21 @@ def visit(self, node, variables): for i in range(0, len(node.args) + 1): variables.pop_var() - self.code.append(PopIL(len(node.args) + 1)) + # self.code.append(PopIL(len(node.args) + 1)) @visitor.when(SelfCallNode) def visit(self, node, variables): self.code.append(CommentIL('Self-Dispatch')) result = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) # print('----------node {}---------'.format(node)) index = self.virtual_table.get_method_id(self.current_class, node.id) if self.current_class != 'Main': self.code.append(CommentIL('push self')) s = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) self.code.append(VarToVarIL(variables.id(s), variables.id('self'))) i = 0 @@ -519,14 +524,14 @@ def visit(self, node, variables): for i in range(len(node.args) + n): variables.pop_var() - self.code.append(PopIL(len(node.args) + n)) + # self.code.append(PopIL(len(node.args) + n)) @visitor.when(ParentCallNode) def visit(self, node, variables): self.code.append(CommentIL('Parent-Dispatch')) result = variables.add_temp() - self.code.append(PushIL()) + # self.code.append(PushIL()) self.code.append('push object') self.visit(node.obj, variables) @@ -546,7 +551,7 @@ def visit(self, node, variables): for i in range((len(node.args) + 1)): variables.pop_var() - self.code.append(PopIL(len(node.args) + 1)) + # self.code.append(PopIL(len(node.args) + 1)) #constants @@ -561,7 +566,7 @@ def visit(self, node, variables): label = 'string_' + str(self.getInt()) self.data.append(StringIL(label, node.lex)) self.code.append(CommentIL('loading label')) - self.code.append(PushIL()) + # self.code.append(PushIL()) p = variables.add_temp() self.code.append(LoadLabelIL(variables.id(p), label)) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index a5c24cfd..d51bcd52 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -177,20 +177,28 @@ Main_VT: .globl main .text IO.out_string: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $v0, 4 lw $a0, 8($sp) syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra IO.out_int: +move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 li $v0, 1 lw $a0, 8($sp) syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra @@ -225,8 +233,8 @@ bne $t1 , $t2 not_slash sb $zero, ($t0) not_slash: move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 +lw $ra, 4($sp) +addiu $sp, $sp, 8 lw $fp, 0($sp) jr $ra @@ -239,11 +247,14 @@ lw $a0, 4($fp) li $v0, 5 syscall move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 12 +lw $ra, 4($sp) +addiu $sp, $sp, 8 lw $fp, 0($sp) -jr $ra +jr $ra Object.copy: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 lw $a1, -4($sp) lw $a0, -8($sp) li $v0, 9 @@ -260,15 +271,28 @@ addiu $a3, $a3, 4 beq $a0, $zero, _copy.end j _copy.loop _copy.end: +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Object.abort: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 li $v0, 10 syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra String.length: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 lw $a0, 4($sp) _stringlength.loop: lb $a1, 0($sp) @@ -283,6 +307,9 @@ jr $ra String.concat: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 move $a2, $ra jal String.length move $v1, $v0 @@ -339,7 +366,7 @@ addiu $t1, $t1, -1 bne $t1, $zero, substr sb $zero, ($t0) move $a0, $v0 -lw $ra, 0($fp) +lw $ra, 16($sp) addiu $sp, $sp, 20 lw $fp, 0($sp) jr $ra @@ -391,11 +418,14 @@ j str.end_equal_string str.equals_strings: li $a0, 1 str.end_equal_string: -lw $ra, 0($fp) +lw $ra, 12($sp) addiu $sp, $sp, 16 lw $fp, 0($sp) jr $ra inherit: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 beq $a0, $a1, inherit_true beq $a0, $zero, inherit_false lw $a0, ($a0) @@ -405,17 +435,17 @@ li $v0, 1 jr $ra inherit_false: li $v0, 0 +lw $ra, 4($sp) +addiu $sp, $sp, 12 jr $ra Object.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 lw $ra, 4($sp) -addiu $sp, $sp, 12 +addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra Object.type_name: move $fp, $sp @@ -427,11 +457,9 @@ Int.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 lw $ra, 4($sp) -addiu $sp, $sp, 12 +addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra Int.type_name: move $fp, $sp @@ -443,11 +471,9 @@ IO.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 lw $ra, 4($sp) -addiu $sp, $sp, 12 +addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra IO.type_name: move $fp, $sp @@ -459,11 +485,9 @@ Bool.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 lw $ra, 4($sp) -addiu $sp, $sp, 12 +addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra Bool.type_name: move $fp, $sp @@ -475,11 +499,9 @@ String.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 lw $ra, 4($sp) -addiu $sp, $sp, 12 +addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra String.type_name: move $fp, $sp @@ -489,15 +511,6 @@ la $a1, String_name jr $ra #--------------Initial Code--------------- main: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 20 syscall @@ -508,13 +521,13 @@ sw $a1, ($v0) #obj 2 offset 1 result Main.Constructor la $v0, 1 jal Main.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 3 offset 1 result Main.main jal Main.main -sw $a1, 0($sp) -addi $sp, $sp, -4 +sw $a0, 4($sp) +addi $sp, $sp, 4 j Object.abort #--------------End Initial Code--------------- A.Constructor: @@ -525,14 +538,12 @@ addiu $sp, $sp, -4 li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -lw $t1, 12($fp) -sw $t1, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 +lw $a0, 4($sp) +lw $t1, 12($sp) +sw $t1, 4($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A.type_name: move $fp, $sp @@ -544,243 +555,155 @@ A.value: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) +lw $a0, 12($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) lw $ra, 4($sp) addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra A.set_var: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 16($fp) -sw $a0, 4($fp) -lw $a0, 4($fp) -lw $t1, 20($fp) -sw $t1, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 28($fp) -sw $a0, 4($fp) -lw $a0, 4($fp) -sw $a0, 16($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +lw $a0, 16($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($sp) +lw $a0, 28($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A.method1: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 16($fp) -sw $a0, 4($fp) -lw $ra, 4($sp) +lw $a0, 16($sp) +sw $a0, 4($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A.method2: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 32($fp) -sw $a0, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 32($fp) -sw $a0, 4($fp) +lw $a0, 32($sp) +sw $a0, 4($sp) +lw $a0, 32($sp) +sw $a0, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) add $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 48($fp) -sw $t1, -4($fp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 48($sp) +sw $t1, -4($sp) #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, B_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result B.Constructor la $v0, 1 jal B.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 68($fp) +lw $a0, 68($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 48($fp) -addiu $sp, $sp, 8 -lw $a0, 64($fp) -sw $a0, 5555($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 48($sp) +lw $a0, 64($sp) +sw $a0, 5555($sp) +lw $ra, 12($sp) addiu $sp, $sp, 16 +lw $fp, 0($sp) jr $ra A.method3: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 28($fp) -sw $a0, 4($fp) +lw $a0, 28($sp) +sw $a0, 4($sp) lw $a0, 0($sp) not $a0, $a0 sw $a0, 4($sp) -lw $a0, 4($fp) -lw $t1, 36($fp) -sw $t1, -4($fp) +lw $a0, 4($sp) +lw $t1, 36($sp) +sw $t1, -4($sp) #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, C_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result C.Constructor la $v0, 1 jal C.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 56($fp) +lw $a0, 56($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 40($fp) -addiu $sp, $sp, 8 -lw $a0, 52($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 40($sp) +lw $a0, 52($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A.method4: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 20($fp) -sw $a0, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 28($fp) -sw $a0, 4($fp) +lw $a0, 20($sp) +sw $a0, 4($sp) +lw $a0, 28($sp) +sw $a0, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) @@ -788,268 +711,161 @@ li $t0, 1 add $a0, $a0, $t0 sge $a0, $t1, $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_1 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_1 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 52($fp) -sw $a0, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 60($fp) -sw $a0, 4($fp) +lw $a0, 52($sp) +sw $a0, 4($sp) +lw $a0, 60($sp) +sw $a0, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) sub $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 72($fp) -sw $t1, -4($fp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 72($sp) +sw $t1, -4($sp) #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, D_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result D.Constructor la $v0, 1 jal D.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 92($fp) +lw $a0, 92($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 48($fp) -addiu $sp, $sp, 8 -lw $a0, 88($fp) -sw $a0, 11111111($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 32($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 48($sp) +lw $a0, 88($sp) +sw $a0, 11111111($sp) +lw $a0, 4($sp) +sw $a0, 32($sp) j _fi_1 _if_1: #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 68($fp) -sw $a0, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 68($fp) -sw $a0, 4($fp) +lw $a0, 68($sp) +sw $a0, 4($sp) +lw $a0, 68($sp) +sw $a0, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) sub $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 84($fp) -sw $t1, -4($fp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 84($sp) +sw $t1, -4($sp) #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, D_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result D.Constructor la $v0, 1 jal D.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 104($fp) +lw $a0, 104($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 48($fp) -addiu $sp, $sp, 8 -lw $a0, 100($fp) -sw $a0, 14141414($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 44($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 48($sp) +lw $a0, 100($sp) +sw $a0, 14141414($sp) +lw $a0, 4($sp) +sw $a0, 44($sp) _fi_1: -addiu $sp, $sp, 8 -lw $ra, 4($sp) +lw $ra, 12($sp) addiu $sp, $sp, 16 +lw $fp, 0($sp) jr $ra A.method5: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 _loop_2: #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 44($fp) +lw $a0, 44($sp) lw $t1, -4($a0) -sw $t1, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 44($fp) -sw $a0, 4($fp) +sw $t1, 4($sp) +lw $a0, 44($sp) +sw $a0, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) sge $a0, $t1, $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_2 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _body_2 j _pool_2 _body_2: #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 68($fp) +lw $a0, 68($sp) lw $t1, -4($a0) -sw $t1, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 72($fp) +sw $t1, 4($sp) +lw $a0, 72($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) mult $a0, $t1 mflo $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 80($fp) -sw $t1, -4($fp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 80($sp) +sw $t1, -4($sp) #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 88($fp) +lw $a0, 88($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) @@ -1059,79 +875,56 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) add $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 100($fp) -sw $t1, -4($fp) -lw $a0, 4($fp) -sw $a0, 44($fp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 100($sp) +sw $t1, -4($sp) +lw $a0, 4($sp) +sw $a0, 44($sp) j _loop_2 _pool_2: -lw $a0, 92($fp) -sw $a0, 7777($fp) -addiu $sp, $sp, 8 +lw $a0, 92($sp) +sw $a0, 7777($sp) #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, E_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result E.Constructor la $v0, 1 jal E.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 52($fp) +lw $a0, 52($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 36($fp) -addiu $sp, $sp, 8 -lw $a0, 48($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 36($sp) +lw $a0, 48($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra B.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra B.type_name: move $fp, $sp @@ -1144,98 +937,63 @@ move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 28($fp) -sw $a0, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 32($fp) -sw $a0, 4($fp) +lw $a0, 28($sp) +sw $a0, 4($sp) +lw $a0, 32($sp) +sw $a0, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) mult $a0, $t1 mflo $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 44($fp) -sw $t1, -4($fp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 44($sp) +sw $t1, -4($sp) #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, E_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result E.Constructor la $v0, 1 jal E.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 64($fp) +lw $a0, 64($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 48($fp) -addiu $sp, $sp, 8 -lw $a0, 60($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 48($sp) +lw $a0, 60($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra C.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra C.type_name: move $fp, $sp @@ -1248,193 +1006,122 @@ move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 28($fp) -sw $a0, 4($fp) +lw $a0, 28($sp) +sw $a0, 4($sp) lw $a0, 0($sp) not $a0, $a0 sw $a0, 4($sp) -lw $a0, 4($fp) -lw $t1, 36($fp) -sw $t1, -4($fp) +lw $a0, 4($sp) +lw $t1, 36($sp) +sw $t1, -4($sp) #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 8 syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 jal A.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 56($fp) +lw $a0, 56($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 40($fp) -addiu $sp, $sp, 8 -lw $a0, 52($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 40($sp) +lw $a0, 52($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra C.method5: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 32($fp) -sw $a0, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 36($fp) -sw $a0, 4($fp) +lw $a0, 32($sp) +sw $a0, 4($sp) +lw $a0, 36($sp) +sw $a0, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) mult $a0, $t1 mflo $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 48($fp) -sw $a0, 4($fp) +addiu $sp, $sp, 4 +lw $a0, 48($sp) +sw $a0, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) mult $a0, $t1 mflo $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 56($fp) -sw $t1, -4($fp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 56($sp) +sw $t1, -4($sp) #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, E_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result E.Constructor la $v0, 1 jal E.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 76($fp) +lw $a0, 76($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 60($fp) -addiu $sp, $sp, 8 -lw $a0, 72($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 60($sp) +lw $a0, 72($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra D.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra D.type_name: move $fp, $sp @@ -1447,23 +1134,11 @@ move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 32($fp) +lw $a0, 32($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Integer li $a0, 0 sw $a0, ($sp) @@ -1475,108 +1150,69 @@ li $t0, 1 add $a0, $a0, $t0 sge $a0, $t1, $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_3 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_3 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 60($fp) +lw $a0, 60($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_4 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 84($fp) +lw $a0, 84($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_5 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_5 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Integer li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 108($fp) +lw $a0, 108($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_6 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_6 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 124($fp) -sw $a0, 4($fp) +lw $a0, 124($sp) +sw $a0, 4($sp) #Args: 0 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 132($fp) +lw $a0, 132($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Integer li $a0, 3 sw $a0, ($sp) @@ -1586,99 +1222,79 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) sub $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 #Dispatch in place #obj 7 offset 36 result D.method7 jal D.method7 -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $a0, 4($fp) -sw $a0, 52($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 52($sp) j _fi_6 _if_6: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 56($fp) +lw $a0, 4($sp) +sw $a0, 56($sp) _fi_6: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 84($fp) +lw $a0, 4($sp) +sw $a0, 84($sp) j _fi_5 _if_5: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 88($fp) +lw $a0, 4($sp) +sw $a0, 88($sp) _fi_5: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 116($fp) +lw $a0, 4($sp) +sw $a0, 116($sp) j _fi_4 _if_4: li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 120($fp) +lw $a0, 4($sp) +sw $a0, 120($sp) _fi_4: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 148($fp) +lw $a0, 4($sp) +sw $a0, 148($sp) j _fi_3 _if_3: #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 176($fp) -sw $a0, 4($fp) +lw $a0, 176($sp) +sw $a0, 4($sp) #Args: 0 #Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 184($fp) +lw $a0, 184($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) lw $a0, 0($sp) not $a0, $a0 sw $a0, 4($sp) #Dispatch in place #obj 5 offset 47 result D.method7 jal D.method7 -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $a0, 4($fp) -sw $a0, 168($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 168($sp) _fi_3: -addiu $sp, $sp, 8 -lw $a0, 184($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +lw $a0, 184($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra E.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra E.type_name: move $fp, $sp @@ -1691,23 +1307,11 @@ move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 28($fp) -sw $a0, 4($fp) +lw $a0, 28($sp) +sw $a0, 4($sp) #Integer li $a0, 8 sw $a0, ($sp) @@ -1718,70 +1322,50 @@ lw $t1, 4($sp) div $a0, $t1 mflo $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 44($fp) -sw $t1, -4($fp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 44($sp) +sw $t1, -4($sp) #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 8 syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 jal A.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 64($fp) +lw $a0, 64($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 48($fp) -addiu $sp, $sp, 8 -lw $a0, 60($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 48($sp) +lw $a0, 60($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A2I.Constructor: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A2I.type_name: move $fp, $sp @@ -1794,22 +1378,10 @@ move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 20($fp) -sw $a0, 4($fp) +lw $a0, 20($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_7 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -1818,26 +1390,14 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_8 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_8 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 44($fp) -sw $a0, 4($fp) +lw $a0, 44($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_9 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -1846,26 +1406,14 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_10 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_10 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 68($fp) -sw $a0, 4($fp) +lw $a0, 68($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_11 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -1874,26 +1422,14 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_12 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_12 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 92($fp) -sw $a0, 4($fp) +lw $a0, 92($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_13 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -1902,26 +1438,14 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_14 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_14 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 116($fp) -sw $a0, 4($fp) +lw $a0, 116($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_15 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -1930,26 +1454,14 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_16 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_16 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 140($fp) -sw $a0, 4($fp) +lw $a0, 140($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_17 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -1958,26 +1470,14 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_18 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_18 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 164($fp) -sw $a0, 4($fp) +lw $a0, 164($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_19 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -1986,26 +1486,14 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_20 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_20 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 188($fp) -sw $a0, 4($fp) +lw $a0, 188($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_21 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -2014,26 +1502,14 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_22 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_22 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 212($fp) -sw $a0, 4($fp) +lw $a0, 212($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_23 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -2042,26 +1518,14 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_24 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_24 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 236($fp) -sw $a0, 4($fp) +lw $a0, 236($sp) +sw $a0, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_25 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -2070,176 +1534,147 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_26 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_26 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 264($fp) -sw $a0, 4($fp) +lw $a0, 264($sp) +sw $a0, 4($sp) #Dispatch in place #obj 2 offset 66 result Object.abort jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 16($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 44($fp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $a0, 4($sp) +sw $a0, 44($sp) j _fi_26 _if_26: #Integer li $a0, 9 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 48($fp) +lw $a0, 4($sp) +sw $a0, 48($sp) _fi_26: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 76($fp) +lw $a0, 4($sp) +sw $a0, 76($sp) j _fi_24 _if_24: #Integer li $a0, 8 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 80($fp) +lw $a0, 4($sp) +sw $a0, 80($sp) _fi_24: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 108($fp) +lw $a0, 4($sp) +sw $a0, 108($sp) j _fi_22 _if_22: #Integer li $a0, 7 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 112($fp) +lw $a0, 4($sp) +sw $a0, 112($sp) _fi_22: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 140($fp) +lw $a0, 4($sp) +sw $a0, 140($sp) j _fi_20 _if_20: #Integer li $a0, 6 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 144($fp) +lw $a0, 4($sp) +sw $a0, 144($sp) _fi_20: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 172($fp) +lw $a0, 4($sp) +sw $a0, 172($sp) j _fi_18 _if_18: #Integer li $a0, 5 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 176($fp) +lw $a0, 4($sp) +sw $a0, 176($sp) _fi_18: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 204($fp) +lw $a0, 4($sp) +sw $a0, 204($sp) j _fi_16 _if_16: #Integer li $a0, 4 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 208($fp) +lw $a0, 4($sp) +sw $a0, 208($sp) _fi_16: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 236($fp) +lw $a0, 4($sp) +sw $a0, 236($sp) j _fi_14 _if_14: #Integer li $a0, 3 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 240($fp) +lw $a0, 4($sp) +sw $a0, 240($sp) _fi_14: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 268($fp) +lw $a0, 4($sp) +sw $a0, 268($sp) j _fi_12 _if_12: #Integer li $a0, 2 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 272($fp) +lw $a0, 4($sp) +sw $a0, 272($sp) _fi_12: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 300($fp) +lw $a0, 4($sp) +sw $a0, 300($sp) j _fi_10 _if_10: #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 304($fp) +lw $a0, 4($sp) +sw $a0, 304($sp) _fi_10: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 332($fp) +lw $a0, 4($sp) +sw $a0, 332($sp) j _fi_8 _if_8: #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 336($fp) +lw $a0, 4($sp) +sw $a0, 336($sp) _fi_8: -addiu $sp, $sp, 8 -lw $ra, 4($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A2I.i2c: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 20($fp) -sw $a0, 4($fp) +lw $a0, 20($sp) +sw $a0, 4($sp) #Integer li $a0, 0 sw $a0, ($sp) @@ -2249,22 +1684,13 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_27 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_27 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 44($fp) -sw $a0, 4($fp) +lw $a0, 44($sp) +sw $a0, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) @@ -2274,22 +1700,13 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_28 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_28 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 68($fp) -sw $a0, 4($fp) +lw $a0, 68($sp) +sw $a0, 4($sp) #Integer li $a0, 2 sw $a0, ($sp) @@ -2299,22 +1716,13 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_29 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_29 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 92($fp) -sw $a0, 4($fp) +lw $a0, 92($sp) +sw $a0, 4($sp) #Integer li $a0, 3 sw $a0, ($sp) @@ -2324,22 +1732,13 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_30 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_30 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 116($fp) -sw $a0, 4($fp) +lw $a0, 116($sp) +sw $a0, 4($sp) #Integer li $a0, 4 sw $a0, ($sp) @@ -2349,22 +1748,13 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_31 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_31 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 140($fp) -sw $a0, 4($fp) +lw $a0, 140($sp) +sw $a0, 4($sp) #Integer li $a0, 5 sw $a0, ($sp) @@ -2374,22 +1764,13 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_32 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_32 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 164($fp) -sw $a0, 4($fp) +lw $a0, 164($sp) +sw $a0, 4($sp) #Integer li $a0, 6 sw $a0, ($sp) @@ -2399,22 +1780,13 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_33 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_33 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 188($fp) -sw $a0, 4($fp) +lw $a0, 188($sp) +sw $a0, 4($sp) #Integer li $a0, 7 sw $a0, ($sp) @@ -2424,22 +1796,13 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_34 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_34 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 212($fp) -sw $a0, 4($fp) +lw $a0, 212($sp) +sw $a0, 4($sp) #Integer li $a0, 8 sw $a0, ($sp) @@ -2449,22 +1812,13 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_35 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_35 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 236($fp) -sw $a0, 4($fp) +lw $a0, 236($sp) +sw $a0, 4($sp) #Integer li $a0, 9 sw $a0, ($sp) @@ -2474,220 +1828,154 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_36 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_36 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 264($fp) -sw $a0, 4($fp) +lw $a0, 264($sp) +sw $a0, 4($sp) #Dispatch in place #obj 2 offset 66 result Object.abort jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 0 +sw $a0, 4($sp) +addi $sp, $sp, 4 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_37 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 16($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 44($fp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $a0, 4($sp) +sw $a0, 44($sp) j _fi_36 _if_36: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_38 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 48($fp) +lw $a0, 4($sp) +sw $a0, 48($sp) _fi_36: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 76($fp) +lw $a0, 4($sp) +sw $a0, 76($sp) j _fi_35 _if_35: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_39 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 80($fp) +lw $a0, 4($sp) +sw $a0, 80($sp) _fi_35: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 108($fp) +lw $a0, 4($sp) +sw $a0, 108($sp) j _fi_34 _if_34: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_40 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 112($fp) +lw $a0, 4($sp) +sw $a0, 112($sp) _fi_34: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 140($fp) +lw $a0, 4($sp) +sw $a0, 140($sp) j _fi_33 _if_33: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_41 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 144($fp) +lw $a0, 4($sp) +sw $a0, 144($sp) _fi_33: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 172($fp) +lw $a0, 4($sp) +sw $a0, 172($sp) j _fi_32 _if_32: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_42 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 176($fp) +lw $a0, 4($sp) +sw $a0, 176($sp) _fi_32: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 204($fp) +lw $a0, 4($sp) +sw $a0, 204($sp) j _fi_31 _if_31: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_43 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 208($fp) +lw $a0, 4($sp) +sw $a0, 208($sp) _fi_31: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 236($fp) +lw $a0, 4($sp) +sw $a0, 236($sp) j _fi_30 _if_30: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_44 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 240($fp) +lw $a0, 4($sp) +sw $a0, 240($sp) _fi_30: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 268($fp) +lw $a0, 4($sp) +sw $a0, 268($sp) j _fi_29 _if_29: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_45 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 272($fp) +lw $a0, 4($sp) +sw $a0, 272($sp) _fi_29: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 300($fp) +lw $a0, 4($sp) +sw $a0, 300($sp) j _fi_28 _if_28: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_46 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 304($fp) +lw $a0, 4($sp) +sw $a0, 304($sp) _fi_28: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 332($fp) +lw $a0, 4($sp) +sw $a0, 332($sp) j _fi_27 _if_27: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_47 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 336($fp) +lw $a0, 4($sp) +sw $a0, 336($sp) _fi_27: -addiu $sp, $sp, 8 -lw $ra, 4($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A2I.a2i: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 24($fp) -sw $a0, 4($fp) +lw $a0, 24($sp) +sw $a0, 4($sp) #Dispatch in place #obj 2 offset 1 result String.length jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Integer li $a0, 0 sw $a0, ($sp) @@ -2697,27 +1985,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_48 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_48 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 52($fp) -sw $a0, 4($fp) +lw $a0, 52($sp) +sw $a0, 4($sp) #Args: 0 #Integer li $a0, 0 @@ -2731,13 +2007,9 @@ addiu $sp, $sp, -4 #Dispatch in place #obj 4 offset 1 result String.substr jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_49 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -2746,27 +2018,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_50 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_50 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 88($fp) -sw $a0, 4($fp) +lw $a0, 88($sp) +sw $a0, 4($sp) #Args: 0 #Integer li $a0, 0 @@ -2780,13 +2040,9 @@ addiu $sp, $sp, -4 #Dispatch in place #obj 4 offset 1 result String.substr jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_51 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -2795,56 +2051,34 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_52 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_52 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 120($fp) -sw $a0, 4($fp) +lw $a0, 120($sp) +sw $a0, 4($sp) #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 120($fp) -sw $a0, 4($fp) +lw $a0, 120($sp) +sw $a0, 4($sp) #Dispatch in place #obj 3 offset 31 result A2I.a2i_aux jal A2I.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $a0, 4($fp) -sw $a0, 48($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 48($sp) j _fi_52 _if_52: #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 136($fp) -sw $a0, 4($fp) +lw $a0, 136($sp) +sw $a0, 4($sp) #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 140($fp) -sw $a0, 4($fp) +lw $a0, 140($sp) +sw $a0, 4($sp) #Args: 0 #Integer li $a0, 1 @@ -2852,25 +2086,15 @@ sw $a0, ($sp) addiu $sp, $sp, -4 #Args: 1 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 156($fp) -sw $a0, 4($fp) +lw $a0, 156($sp) +sw $a0, 4($sp) #Dispatch in place #obj 2 offset 1 result String.length jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Integer li $a0, 1 sw $a0, ($sp) @@ -2880,52 +2104,34 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) sub $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 #Dispatch in place #obj 9 offset 1 result String.substr jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 12 offset 44 result A2I.a2i_aux jal A2I.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $a0, 4($fp) -sw $a0, 100($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 100($sp) _fi_52: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 136($fp) +lw $a0, 4($sp) +sw $a0, 136($sp) j _fi_50 _if_50: #Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 188($fp) -sw $a0, 4($fp) +lw $a0, 188($sp) +sw $a0, 4($sp) #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 192($fp) -sw $a0, 4($fp) +lw $a0, 192($sp) +sw $a0, 4($sp) #Args: 0 #Integer li $a0, 1 @@ -2933,25 +2139,15 @@ sw $a0, ($sp) addiu $sp, $sp, -4 #Args: 1 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 208($fp) -sw $a0, 4($fp) +lw $a0, 208($sp) +sw $a0, 4($sp) #Dispatch in place #obj 2 offset 1 result String.length jal String.length -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Integer li $a0, 1 sw $a0, ($sp) @@ -2961,82 +2157,55 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) sub $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 #Dispatch in place #obj 9 offset 1 result String.substr jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 12 offset 57 result A2I.a2i_aux jal A2I.a2i_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 lw $a0, 0($sp) not $a0, $a0 sw $a0, 4($sp) -lw $a0, 4($fp) -sw $a0, 188($fp) +lw $a0, 4($sp) +sw $a0, 188($sp) _fi_50: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 216($fp) +lw $a0, 4($sp) +sw $a0, 216($sp) j _fi_48 _if_48: #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 220($fp) +lw $a0, 4($sp) +sw $a0, 220($sp) _fi_48: -addiu $sp, $sp, 8 -lw $ra, 4($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A2I.a2i_aux: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 _loop_53: #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 52($fp) +lw $a0, 52($sp) lw $t1, -4($a0) -sw $t1, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 56($fp) +sw $t1, 4($sp) +lw $a0, 56($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) @@ -3044,30 +2213,18 @@ li $t0, 1 add $a0, $a0, $t0 sge $a0, $t1, $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _body_53 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _body_53 j _pool_53 _body_53: #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 80($fp) +lw $a0, 80($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Integer li $a0, 10 sw $a0, ($sp) @@ -3078,35 +2235,20 @@ lw $t1, 4($sp) mult $a0, $t1 mflo $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 100($fp) -sw $a0, 4($fp) +lw $a0, 100($sp) +sw $a0, 4($sp) #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 104($fp) -sw $a0, 4($fp) +lw $a0, 104($sp) +sw $a0, 4($sp) #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 112($fp) +lw $a0, 112($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Args: 1 #Integer li $a0, 1 @@ -3115,35 +2257,27 @@ addiu $sp, $sp, -4 #Dispatch in place #obj 4 offset 1 result String.substr jal String.substr -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 7 offset 30 result A2I.c2i jal A2I.c2i -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) add $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 120($fp) -sw $t1, -4($fp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 120($sp) +sw $t1, -4($sp) #Assignment #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 128($fp) +lw $a0, 128($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Integer li $a0, 1 sw $a0, ($sp) @@ -3153,54 +2287,37 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) add $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 140($fp) -sw $t1, -4($fp) -lw $a0, 4($fp) -sw $a0, 76($fp) -addiu $sp, $sp, 8 -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 140($sp) +sw $t1, -4($sp) +lw $a0, 4($sp) +sw $a0, 76($sp) j _loop_53 _pool_53: -lw $a0, 132($fp) -sw $a0, 9999($fp) -addiu $sp, $sp, 8 -lw $a0, 40($fp) -sw $a0, 7777($fp) -addiu $sp, $sp, 8 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 36($fp) +lw $a0, 132($sp) +sw $a0, 9999($sp) +lw $a0, 40($sp) +sw $a0, 7777($sp) +lw $a0, 36($sp) lw $t1, -4($a0) -sw $t1, 4($fp) -lw $a0, 4($fp) -sw $a0, 16($fp) -addiu $sp, $sp, 8 -lw $a0, 36($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +sw $t1, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $a0, 36($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A2I.i2a: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 20($fp) -sw $a0, 4($fp) +lw $a0, 20($sp) +sw $a0, 4($sp) #Integer li $a0, 0 sw $a0, ($sp) @@ -3210,26 +2327,17 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_54 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_54 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 48($fp) -sw $a0, 4($fp) +lw $a0, 48($sp) +sw $a0, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) @@ -3237,46 +2345,25 @@ li $t0, 1 add $a0, $a0, $t0 sge $a0, $t1, $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_55 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_55 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_56 sw $a0, 0($sp) addi $sp, $sp, -4 #Args: 0 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 76($fp) -sw $a0, 4($fp) +lw $a0, 76($sp) +sw $a0, 4($sp) #Args: 0 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 80($fp) -sw $a0, 4($fp) +lw $a0, 80($sp) +sw $a0, 4($sp) #Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Integer li $a0, 1 sw $a0, ($sp) @@ -3290,84 +2377,59 @@ lw $t1, 4($sp) mult $a0, $t1 mflo $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 #Dispatch in place #obj 8 offset 25 result A2I.i2a_aux jal A2I.i2a_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 10 offset 1 result String.concat jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 68($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 68($sp) j _fi_55 _if_55: #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 112($fp) -sw $a0, 4($fp) +lw $a0, 112($sp) +sw $a0, 4($sp) #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 112($fp) -sw $a0, 4($fp) +lw $a0, 112($sp) +sw $a0, 4($sp) #Dispatch in place #obj 3 offset 29 result A2I.i2a_aux jal A2I.i2a_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $a0, 4($fp) -sw $a0, 80($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 80($sp) _fi_55: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 108($fp) +lw $a0, 4($sp) +sw $a0, 108($sp) j _fi_54 _if_54: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_57 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 112($fp) +lw $a0, 4($sp) +sw $a0, 112($sp) _fi_54: -addiu $sp, $sp, 8 -lw $ra, 4($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra A2I.i2a_aux: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 20($fp) -sw $a0, 4($fp) +lw $a0, 20($sp) +sw $a0, 4($sp) #Integer li $a0, 0 sw $a0, ($sp) @@ -3377,72 +2439,38 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_58 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_58 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 56($fp) -sw $a0, 4($fp) +lw $a0, 56($sp) +sw $a0, 4($sp) #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 60($fp) +lw $a0, 60($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 3 offset 15 result A2I.i2a_aux jal A2I.i2a_aux -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Args: 0 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push self -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 68($fp) -sw $a0, 4($fp) +lw $a0, 68($sp) +sw $a0, 4($sp) #Args: 0 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 72($fp) -sw $a0, 4($fp) +lw $a0, 72($sp) +sw $a0, 4($sp) #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 84($fp) +lw $a0, 84($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Integer li $a0, 10 sw $a0, ($sp) @@ -3453,45 +2481,39 @@ lw $t1, 4($sp) mult $a0, $t1 mflo $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) sub $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 #Dispatch in place #obj 10 offset 25 result A2I.i2c jal A2I.i2c -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 14 offset 1 result String.concat jal String.concat -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 60($fp) -sw $a0, 10101010($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 32($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 60($sp) +sw $a0, 10101010($sp) +lw $a0, 4($sp) +sw $a0, 32($sp) j _fi_58 _if_58: #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_59 sw $a0, 0($sp) addi $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 40($fp) +lw $a0, 4($sp) +sw $a0, 40($sp) _fi_58: -addiu $sp, $sp, 8 -lw $ra, 4($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Main.Constructor: move $fp, $sp @@ -3500,14 +2522,12 @@ addiu $sp, $sp, -4 li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -lw $t1, 12($fp) -sw $t1, 16($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 +lw $a0, 4($sp) +lw $t1, 12($sp) +sw $t1, 16($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Main.type_name: move $fp, $sp @@ -3520,619 +2540,376 @@ move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_60 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 5 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 28($fp) +lw $a0, 28($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 7 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_61 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 9 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_62 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 11 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 52($fp) +lw $a0, 52($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 13 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_63 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 15 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_64 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 17 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 76($fp) +lw $a0, 76($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 19 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_65 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 21 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_66 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 23 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 100($fp) +lw $a0, 100($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 25 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_67 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 27 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_68 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 29 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 124($fp) +lw $a0, 124($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 31 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_69 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 33 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_70 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 35 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 148($fp) +lw $a0, 148($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 37 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_71 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 39 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_72 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 41 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 172($fp) +lw $a0, 172($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 43 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_73 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 45 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_74 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 47 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 196($fp) +lw $a0, 196($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 49 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_75 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 51 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_76 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 53 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_77 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 55 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Dispatch in place #obj 1 offset 56 result IO.in_string jal IO.in_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $a0, 4($fp) -sw $a0, 216($fp) -addiu $sp, $sp, 108 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 216($sp) lw $ra, 4($sp) addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra Main.prompt: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_78 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 5 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_79 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 7 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Dispatch in place #obj 1 offset 8 result IO.in_string jal IO.in_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $a0, 4($fp) -sw $a0, 24($fp) -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 24($sp) lw $ra, 4($sp) addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra Main.get_int: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 36($fp) +lw $a0, 36($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 40($fp) +lw $a0, 40($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 3 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 36($fp) -sw $a0, 6666($fp) -addiu $sp, $sp, 8 -lw $a0, 28($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 12($fp) -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 36($sp) +sw $a0, 6666($sp) +lw $a0, 28($sp) +sw $a0, 4444($sp) +lw $a0, 4($sp) +sw $a0, 12($sp) lw $ra, 4($sp) addiu $sp, $sp, 8 +lw $fp, 0($sp) jr $ra Main.is_even: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 32($fp) +lw $a0, 32($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Integer li $a0, 0 sw $a0, ($sp) @@ -4144,76 +2921,49 @@ li $t0, 1 add $a0, $a0, $t0 sge $a0, $t1, $a0 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_80 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_80 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 60($fp) +lw $a0, 60($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_81 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_81 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Integer li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 84($fp) +lw $a0, 84($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) sw $a0, 0($sp) addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_82 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_82 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 104($fp) +lw $a0, 104($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Integer li $a0, 2 sw $a0, ($sp) @@ -4223,623 +2973,388 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) sub $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 +addiu $sp, $sp, 4 #Dispatch in place #obj 6 offset 29 result Main.is_even jal Main.is_even -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 48($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 48($sp) j _fi_82 _if_82: li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 52($fp) +lw $a0, 4($sp) +sw $a0, 52($sp) _fi_82: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 80($fp) +lw $a0, 4($sp) +sw $a0, 80($sp) j _fi_81 _if_81: li $a0, 1 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 84($fp) +lw $a0, 4($sp) +sw $a0, 84($sp) _fi_81: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 112($fp) +lw $a0, 4($sp) +sw $a0, 112($sp) j _fi_80 _if_80: #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #Unary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 144($fp) +lw $a0, 144($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) lw $a0, 0($sp) not $a0, $a0 sw $a0, 4($sp) #Dispatch in place #obj 4 offset 37 result Main.is_even jal Main.is_even -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 128($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 128($sp) _fi_80: -addiu $sp, $sp, 8 -lw $a0, 144($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +lw $a0, 144($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Main.class_type: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 16($fp) -sw $a0, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 +lw $a0, 16($sp) +sw $a0, 4($sp) lw $a0, 4($sp) la $a1, A_VT la $t0, inherit jalr $ra, $t0 sw $v0, 8($sp) -lw $t0, 8($sp) -bnez $t0, branch_83 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 +lw $a0, 8($fp) +bnez $a0, branch_83 lw $a0, 8($sp) la $a1, B_VT la $t0, inherit jalr $ra, $t0 sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_84 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 +lw $a0, 4($fp) +bnez $a0, branch_84 lw $a0, 12($sp) la $a1, C_VT la $t0, inherit jalr $ra, $t0 sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_85 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 +lw $a0, 4($fp) +bnez $a0, branch_85 lw $a0, 16($sp) la $a1, D_VT la $t0, inherit jalr $ra, $t0 sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_86 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 +lw $a0, 4($fp) +bnez $a0, branch_86 lw $a0, 20($sp) la $a1, E_VT la $t0, inherit jalr $ra, $t0 sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_87 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 +lw $a0, 4($fp) +bnez $a0, branch_87 lw $a0, 24($sp) la $a1, Object_VT la $t0, inherit jalr $ra, $t0 sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_88 -addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, branch_88 branch_83: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 32($fp) -sw $a0, 4($fp) +lw $a0, 32($sp) +sw $a0, 4($sp) #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_90 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 16 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 12($fp) -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 12($sp) branch_84: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 48($fp) -sw $a0, 20($fp) +lw $a0, 48($sp) +sw $a0, 20($sp) #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_91 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 20 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 28($fp) -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 28($sp) branch_85: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 64($fp) -sw $a0, 36($fp) +lw $a0, 64($sp) +sw $a0, 36($sp) #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_92 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 24 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 44($fp) -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 44($sp) branch_86: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 80($fp) -sw $a0, 52($fp) +lw $a0, 80($sp) +sw $a0, 52($sp) #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_93 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 28 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 60($fp) -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 60($sp) branch_87: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 96($fp) -sw $a0, 68($fp) +lw $a0, 96($sp) +sw $a0, 68($sp) #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_94 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 32 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 76($fp) -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 76($sp) branch_88: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 112($fp) -sw $a0, 84($fp) +lw $a0, 112($sp) +sw $a0, 84($sp) #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_95 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 36 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 92($fp) -addiu $sp, $sp, 12 -lw $ra, 4($sp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 92($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Main.print: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 36($fp) +lw $a0, 36($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 40($fp) -sw $a0, 4($fp) +lw $a0, 40($sp) +sw $a0, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 7 offset 13 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_96 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 15 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 40($fp) -addiu $sp, $sp, 8 -lw $a0, 60($fp) -sw $a0, 4444($fp) -addiu $sp, $sp, 8 -lw $ra, 4($sp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 40($sp) +lw $a0, 60($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) addiu $sp, $sp, 12 +lw $fp, 0($sp) jr $ra Main.main: move $fp, $sp sw $ra, 0($sp) addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 8 syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 jal A.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 24($fp) -sw $t1, 8($fp) +lw $a0, 4($sp) +lw $t1, 24($sp) +sw $t1, 8($sp) #loop -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 _loop_97: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 36($fp) +lw $a0, 36($sp) lw $t1, 16($a0) -sw $t1, 4($fp) -lw $t0, 4($sp) -bnez $t0, _body_97 +sw $t1, 4($sp) +lw $a0, 4($fp) +bnez $a0, _body_97 j _pool_97 _body_97: #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_98 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 13 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 60($fp) +lw $a0, 60($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 15 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 76($fp) +lw $a0, 76($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 4 offset 20 result Main.is_even jal Main.is_even -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_99 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_99 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_100 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 22 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 28($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 28($sp) j _fi_99 _if_99: #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_101 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 25 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 40($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 40($sp) _fi_99: -addiu $sp, $sp, 8 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 112($fp) +lw $a0, 112($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 28 result Main.class_type jal Main.class_type -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Assignment #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Dispatch in place #obj 1 offset 29 result Main.menu jal Main.menu -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 -lw $a0, 4($fp) -lw $t1, 116($fp) -sw $t1, 4($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 116($sp) +sw $t1, 4($sp) #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 132($fp) +lw $a0, 132($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_102 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -4848,27 +3363,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_103 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_103 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 156($fp) +lw $a0, 156($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_104 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -4877,27 +3380,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_105 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_105 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 180($fp) +lw $a0, 180($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_106 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -4906,27 +3397,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_107 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_107 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 204($fp) +lw $a0, 204($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_108 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -4935,27 +3414,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_109 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_109 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 228($fp) +lw $a0, 228($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_110 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -4964,27 +3431,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_111 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_111 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 252($fp) +lw $a0, 252($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_112 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -4993,27 +3448,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_113 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_113 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 276($fp) +lw $a0, 276($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_114 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -5022,27 +3465,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_115 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_115 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 300($fp) +lw $a0, 300($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_116 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -5051,27 +3482,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_117 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_117 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 324($fp) +lw $a0, 324($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_118 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -5080,27 +3499,15 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_119 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_119 #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Binary -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 348($fp) +lw $a0, 348($sp) lw $t1, 4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_120 sw $a0, 0($sp) addi $sp, $sp, -4 @@ -5109,1246 +3516,784 @@ addiu $sp, $sp, -4 lw $t1, 4($sp) seq $a0, $a0, $t1 sw $a0, 4($sp) -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_121 +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_121 #Assignment #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 8 syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 jal A.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 384($fp) +lw $a0, 384($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 7 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 392($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 56($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 392($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 56($sp) j _fi_121 _if_121: #Assignment li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -lw $t1, 396($fp) -sw $t1, 16($fp) -lw $a0, 4($fp) -sw $a0, 64($fp) +lw $a0, 4($sp) +lw $t1, 396($sp) +sw $t1, 16($sp) +lw $a0, 4($sp) +sw $a0, 64($sp) _fi_121: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 88($fp) +lw $a0, 4($sp) +sw $a0, 88($sp) j _fi_119 _if_119: #Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 8 syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 jal A.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 412($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 104($fp) +lw $a0, 4($sp) +lw $t1, 412($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 104($sp) _fi_119: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 128($fp) +lw $a0, 4($sp) +sw $a0, 128($sp) j _fi_117 _if_117: #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, E_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result E.Constructor la $v0, 1 jal E.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 452($fp) +lw $a0, 452($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 7 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 460($fp) -sw $t1, -4($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 460($sp) +sw $t1, -4($sp) #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_122 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 120 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 488($fp) +lw $a0, 488($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 122 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_123 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 124 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 504($fp) +lw $a0, 504($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 126 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_124 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 128 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Let -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 536($fp) +lw $a0, 536($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 540($fp) +lw $a0, 540($sp) lw $t1, -4($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 3 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 5 offset 136 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_125 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 138 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 32($fp) -addiu $sp, $sp, 8 -lw $a0, 552($fp) -sw $a0, 129129129129($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 52($fp) -addiu $sp, $sp, 24 -lw $a0, 520($fp) -sw $a0, 116116116116($fp) -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 32($sp) +lw $a0, 552($sp) +sw $a0, 129129129129($sp) +lw $a0, 4($sp) +sw $a0, 52($sp) +lw $a0, 520($sp) +sw $a0, 116116116116($sp) #Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 472($fp) +lw $a0, 472($sp) lw $t1, -4($a0) -sw $t1, 4($fp) -lw $a0, 4($fp) -lw $t1, 472($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 52($fp) -addiu $sp, $sp, 12 -lw $a0, 472($fp) -sw $a0, 105105105105($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 136($fp) +sw $t1, 4($sp) +lw $a0, 4($sp) +lw $t1, 472($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 52($sp) +lw $a0, 472($sp) +sw $a0, 105105105105($sp) +lw $a0, 4($sp) +sw $a0, 136($sp) _fi_117: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 164($fp) +lw $a0, 4($sp) +sw $a0, 164($sp) j _fi_115 _if_115: #Condition -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, D_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result D.Constructor la $v0, 1 jal D.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 456($fp) +lw $a0, 456($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 7 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $t0, 4($sp) -bnez $t0, _if_126 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_126 #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_127 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 119 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 484($fp) +lw $a0, 484($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 121 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_128 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 123 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 28($fp) -addiu $sp, $sp, 12 -lw $a0, 4($fp) -sw $a0, 68($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 28($sp) +lw $a0, 4($sp) +sw $a0, 68($sp) j _fi_126 _if_126: #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_129 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 127 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 516($fp) +lw $a0, 516($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 129 result Main.print jal Main.print -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_130 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 131 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 28($fp) -addiu $sp, $sp, 12 -lw $a0, 4($fp) -sw $a0, 100($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 28($sp) +lw $a0, 4($sp) +sw $a0, 100($sp) _fi_126: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 264($fp) +lw $a0, 4($sp) +sw $a0, 264($sp) _fi_115: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 288($fp) +lw $a0, 4($sp) +sw $a0, 288($sp) j _fi_113 _if_113: #Assignment #Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, C_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result C.Constructor la $v0, 1 jal C.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 552($fp) +lw $a0, 552($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #DispatchParent in place #obj 7 offset 1 result C.method5 la $v0, 1 jal C.method5 -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 560($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 320($fp) +lw $a0, 4($sp) +lw $t1, 560($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 320($sp) _fi_113: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 344($fp) +lw $a0, 4($sp) +sw $a0, 344($sp) j _fi_111 _if_111: #Assignment #Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, C_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result C.Constructor la $v0, 1 jal C.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 584($fp) +lw $a0, 584($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #DispatchParent in place #obj 7 offset 1 result C.method5 la $v0, 1 jal C.method5 -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 592($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 376($fp) +lw $a0, 4($sp) +lw $t1, 592($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 376($sp) _fi_111: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 400($fp) +lw $a0, 4($sp) +sw $a0, 400($sp) j _fi_109 _if_109: #Assignment #Parent-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, C_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result C.Constructor la $v0, 1 jal C.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 616($fp) +lw $a0, 616($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #DispatchParent in place #obj 7 offset 1 result C.method5 la $v0, 1 jal C.method5 -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 624($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 432($fp) +lw $a0, 4($sp) +lw $t1, 624($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 432($sp) _fi_109: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 456($fp) +lw $a0, 4($sp) +sw $a0, 456($sp) j _fi_107 _if_107: #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 8 syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 jal A.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Dispatch in place #obj 1 offset 162 result Main.get_int jal Main.get_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 652($fp) -sw $t1, 12($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 652($sp) +sw $t1, 12($sp) #Assignment #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, D_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result D.Constructor la $v0, 1 jal D.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 676($fp) +lw $a0, 676($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Args: 1 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 688($fp) +lw $a0, 688($sp) lw $t1, 12($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 10 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $a0, 4($fp) -lw $t1, 696($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 72($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 528($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 696($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 72($sp) +lw $a0, 4($sp) +sw $a0, 528($sp) _fi_107: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 552($fp) +lw $a0, 4($sp) +sw $a0, 552($sp) j _fi_105 _if_105: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 704($fp) +lw $a0, 704($sp) lw $t1, 8($a0) -sw $t1, 4($fp) -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 +sw $t1, 4($sp) lw $a0, 4($sp) la $a1, C_VT la $t0, inherit jalr $ra, $t0 sw $v0, 8($sp) -lw $t0, 8($sp) -bnez $t0, branch_131 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 +lw $a0, 8($fp) +bnez $a0, branch_131 lw $a0, 8($sp) la $a1, A_VT la $t0, inherit jalr $ra, $t0 sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_132 -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 +lw $a0, 4($fp) +bnez $a0, branch_132 lw $a0, 12($sp) la $a1, Object_VT la $t0, inherit jalr $ra, $t0 sw $v0, 4($sp) -lw $t0, 4($sp) -bnez $t0, branch_133 -addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, branch_133 branch_131: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 20($fp) -sw $a0, 4($fp) +lw $a0, 20($sp) +sw $a0, 4($sp) #Assignment #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 16($fp) -sw $a0, 4($fp) +lw $a0, 16($sp) +sw $a0, 4($sp) #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 24($fp) -sw $a0, 4($fp) +lw $a0, 24($sp) +sw $a0, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 752($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 28($fp) -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 752($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 28($sp) branch_132: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 48($fp) -sw $a0, 32($fp) +lw $a0, 48($sp) +sw $a0, 32($sp) #Assignment #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -sw $a0, 4($fp) +lw $a0, 12($sp) +sw $a0, 4($sp) #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 20($fp) -sw $a0, 4($fp) +lw $a0, 20($sp) +sw $a0, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 780($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 56($fp) -addiu $sp, $sp, 12 +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 780($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 56($sp) branch_133: -addiu $sp, $sp, 4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 76($fp) -sw $a0, 60($fp) +lw $a0, 76($sp) +sw $a0, 60($sp) #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Args: 0 #loading label -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 la $a0, string_135 sw $a0, 0($sp) addi $sp, $sp, -4 #Dispatch in place #obj 2 offset 199 result IO.out_string jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Dispatch in place #obj 1 offset 200 result Object.abort jal Object.abort -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Integer li $a0, 0 sw $a0, ($sp) addiu $sp, $sp, -4 -lw $a0, 4($fp) -sw $a0, 20($fp) -addiu $sp, $sp, 12 -lw $a0, 4($fp) -sw $a0, 84($fp) -addiu $sp, $sp, 12 -lw $a0, 4($fp) -sw $a0, 664($fp) +lw $a0, 4($sp) +sw $a0, 20($sp) +lw $a0, 4($sp) +sw $a0, 84($sp) +lw $a0, 4($sp) +sw $a0, 664($sp) _fi_105: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 688($fp) +lw $a0, 4($sp) +sw $a0, 688($sp) j _fi_103 _if_103: #Block -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Assignment #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 8 syscall sw $v0, 4($sp) la $a1, A_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result A.Constructor la $v0, 1 jal A.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Self-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #Dispatch in place #obj 1 offset 208 result Main.get_int jal Main.get_int -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 5 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 8 -lw $a0, 4($fp) -lw $t1, 836($fp) -sw $t1, 12($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 836($sp) +sw $t1, 12($sp) #Assignment #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 li $v0, 9 li $a0, 4 syscall sw $v0, 4($sp) la $a1, B_VT sw $a1, ($v0) -lw $a0, 4($fp) -sw $a0, 12($fp) +lw $a0, 4($sp) +sw $a0, 12($sp) #DispatchParent in place #obj 2 offset 1 result B.Constructor la $v0, 1 jal B.Constructor -sw $a1, 0($sp) +sw $a0, 0($sp) addi $sp, $sp, -4 -addiu $sp, $sp, 8 #Args: 0 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 860($fp) +lw $a0, 860($sp) lw $t1, 8($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Args: 1 #Point-Dispatch -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 #push object -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 872($fp) +lw $a0, 872($sp) lw $t1, 12($a0) -sw $t1, 4($fp) +sw $t1, 4($sp) #Dispatch in place #obj 2 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 4 +sw $a0, 4($sp) +addi $sp, $sp, 4 #Dispatch in place #obj 10 offset 1 result -1 jal IO.out_string -sw $a1, 0($sp) -addi $sp, $sp, -4 -addiu $sp, $sp, 12 -lw $a0, 4($fp) -lw $t1, 880($fp) -sw $t1, 8($fp) -lw $a0, 4($fp) -sw $a0, 72($fp) -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 760($fp) +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 880($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 72($sp) +lw $a0, 4($sp) +sw $a0, 760($sp) _fi_103: -addiu $sp, $sp, 8 -lw $a0, 4($fp) -sw $a0, 840($fp) -addiu $sp, $sp, 24 -addiu $sp, $sp, 8 +lw $a0, 4($sp) +sw $a0, 840($sp) j _loop_97 _pool_97: -lw $a0, 4($fp) -sw $a0, 872($fp) -addiu $sp, $sp, 8 +lw $a0, 4($sp) +sw $a0, 872($sp) li $v0, 10 syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips new file mode 100644 index 00000000..871ac350 --- /dev/null +++ b/tests/codegen/cells.mips @@ -0,0 +1,1114 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz "\n" +string_4: .asciiz "X" +string_6: .asciiz "X" +string_8: .asciiz "X" +string_11: .asciiz "." +string_12: .asciiz "X" +string_14: .asciiz " X " +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +CellularAutomaton_INH: +.word IO_INH +Main_INH: +.word Object_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +CellularAutomaton_name: .asciiz "CellularAutomaton" +CellularAutomaton_VT: +.word CellularAutomaton_INH +.word CellularAutomaton.init +.word CellularAutomaton.print +.word CellularAutomaton.num_cells +.word CellularAutomaton.cell +.word CellularAutomaton.cell_left_neighbor +.word CellularAutomaton.cell_right_neighbor +.word CellularAutomaton.cell_at_next_evolution +.word CellularAutomaton.evolve +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main + +.globl main +.text +IO.out_string: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra + + +IO.out_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 1 +lw $a0, 8($sp) +syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra + + +IO.in_string: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a0, buffer +li $a1, 1024 +li $v0, 8 +syscall +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +jal String.length +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $t0, $v0 +la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra + + +IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) +li $v0, 5 +syscall +move $a0, $v0 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Object.copy: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra + + +Object.abort: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 10 +syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra + + +String.length: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 16($sp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 +addiu $a0, $a0, 1 +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 12($sp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra +inherit: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +lw $ra, 4($sp) +addiu $sp, $sp, 12 +jr $ra + +Object.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Object.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Int.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +IO.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Bool.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +String.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a0, 4($sp) +addi $sp, $sp, 4 +j Object.abort +#--------------End Initial Code--------------- +CellularAutomaton.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +CellularAutomaton.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, CellularAutomaton_name +jr $ra +CellularAutomaton.init: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Assignment +lw $a0, 16($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($sp) +lw $a0, 28($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +CellularAutomaton.print: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Self-Dispatch +#push self +lw $a0, 20($sp) +sw $a0, 4($sp) +#Args: 0 +#Point-Dispatch +#push object +lw $a0, 28($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Args: 0 +#loading label +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result String.concat +jal String.concat +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Dispatch in place +#obj 6 offset 9 result IO.out_string +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 40($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 32($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +CellularAutomaton.num_cells: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +#push object +lw $a0, 16($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +CellularAutomaton.cell: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +#push object +lw $a0, 20($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Args: 0 +lw $a0, 20($sp) +sw $a0, 4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +CellularAutomaton.cell_left_neighbor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +#Binary +lw $a0, 20($sp) +sw $a0, 4($sp) +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_2 +#Self-Dispatch +#push self +lw $a0, 44($sp) +sw $a0, 4($sp) +#Args: 0 +#Binary +lw $a0, 48($sp) +sw $a0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 7 offset 16 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 52($sp) +j _fi_2 +_if_2: +#Self-Dispatch +#push self +lw $a0, 72($sp) +sw $a0, 4($sp) +#Args: 0 +#Binary +#Self-Dispatch +#push self +lw $a0, 84($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 21 result CellularAutomaton.num_cells +jal CellularAutomaton.num_cells +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 8 offset 24 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 84($sp) +_fi_2: +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +CellularAutomaton.cell_right_neighbor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +#Binary +lw $a0, 20($sp) +sw $a0, 4($sp) +#Binary +#Self-Dispatch +#push self +lw $a0, 36($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 9 result CellularAutomaton.num_cells +jal CellularAutomaton.num_cells +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_3 +#Self-Dispatch +#push self +lw $a0, 60($sp) +sw $a0, 4($sp) +#Args: 0 +#Binary +lw $a0, 64($sp) +sw $a0, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 7 offset 20 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 68($sp) +j _fi_3 +_if_3: +#Self-Dispatch +#push self +lw $a0, 88($sp) +sw $a0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 23 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 80($sp) +_fi_3: +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +CellularAutomaton.cell_at_next_evolution: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +#Binary +#Binary +#Binary +#Condition +#Binary +#Self-Dispatch +#push self +lw $a0, 44($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 44($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 3 offset 12 result CellularAutomaton.cell +jal CellularAutomaton.cell +sw $a0, 4($sp) +addi $sp, $sp, 4 +#loading label +la $a0, string_4 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_5 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 36($sp) +j _fi_5 +_if_5: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 44($sp) +_fi_5: +#Condition +#Binary +#Self-Dispatch +#push self +lw $a0, 92($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 92($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 3 offset 24 result CellularAutomaton.cell_left_neighbor +jal CellularAutomaton.cell_left_neighbor +sw $a0, 4($sp) +addi $sp, $sp, 4 +#loading label +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_7 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 36($sp) +j _fi_7 +_if_7: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 44($sp) +_fi_7: +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Condition +#Binary +#Self-Dispatch +#push self +lw $a0, 140($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 140($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 3 offset 36 result CellularAutomaton.cell_right_neighbor +jal CellularAutomaton.cell_right_neighbor +sw $a0, 4($sp) +addi $sp, $sp, 4 +#loading label +la $a0, string_8 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_9 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 36($sp) +j _fi_9 +_if_9: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 44($sp) +_fi_9: +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_10 +#loading label +la $a0, string_11 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 172($sp) +j _fi_10 +_if_10: +#loading label +la $a0, string_12 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 180($sp) +_fi_10: +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +CellularAutomaton.evolve: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +#Let +#Let +#Block +#loop +_loop_13: +#Binary +lw $a0, 48($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $a0, 52($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $t1, $a0 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _body_13 +j _pool_13 +_body_13: +#Block +#Assignment +#Point-Dispatch +#push object +lw $a0, 72($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Args: 0 +#Self-Dispatch +#push self +lw $a0, 80($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 84($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 21 result CellularAutomaton.cell_at_next_evolution +jal CellularAutomaton.cell_at_next_evolution +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 1 result String.concat +jal String.concat +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 88($sp) +sw $t1, -4($sp) +#Assignment +#Binary +lw $a0, 96($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 108($sp) +sw $t1, -4($sp) +lw $a0, 4($sp) +sw $a0, 48($sp) +j _loop_13 +_pool_13: +#Assignment +lw $a0, 112($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $a0, 4($sp) +lw $t1, 112($sp) +sw $t1, 4($sp) +lw $a0, 120($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 88($sp) +lw $a0, 120($sp) +sw $a0, 7777($sp) +lw $a0, 32($sp) +sw $a0, 5555($sp) +lw $a0, 24($sp) +sw $a0, 3333($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Main.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Main.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Assignment +#Point-Dispatch +#push object +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, CellularAutomaton_VT +sw $a1, ($v0) +lw $a0, 4($sp) +sw $a0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result CellularAutomaton.Constructor +la $v0, 1 +jal CellularAutomaton.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Args: 0 +#loading label +la $a0, string_14 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 5 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 36($sp) +sw $t1, 4($sp) +#Point-Dispatch +#push object +lw $a0, 44($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Let +#loop +_loop_15: +#Binary +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 72($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $t1, $a0 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _body_15 +j _pool_15 +_body_15: +#Block +#Point-Dispatch +#push object +lw $a0, 92($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Point-Dispatch +#push object +lw $a0, 104($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Assignment +#Binary +lw $a0, 116($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 128($sp) +sw $t1, -4($sp) +lw $a0, 4($sp) +sw $a0, 48($sp) +j _loop_15 +_pool_15: +lw $a0, 120($sp) +sw $a0, 13131313($sp) +lw $a0, 60($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 52($sp) +li $v0, 10 +syscall diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips new file mode 100644 index 00000000..c9e1327a --- /dev/null +++ b/tests/codegen/graph.mips @@ -0,0 +1,2686 @@ +.data +buffer: .space 2048 +strsubstrexception: .asciiz "Substring index exception" + +string_1: .asciiz " (" +string_2: .asciiz "," +string_3: .asciiz ")" +string_5: .asciiz "\n" +string_6: .asciiz "\n" +string_8: .asciiz "\n" +string_9: .asciiz "" +string_11: .asciiz "0" +string_13: .asciiz "1" +string_15: .asciiz "2" +string_17: .asciiz "3" +string_19: .asciiz "4" +string_21: .asciiz "5" +string_23: .asciiz "6" +string_25: .asciiz "7" +string_27: .asciiz "8" +string_29: .asciiz "9" +string_32: .asciiz "-" +string_34: .asciiz " " +string_37: .asciiz " " +string_39: .asciiz "," +string_42: .asciiz "" +string_43: .asciiz "" +Object_INH: +String_INH: +.word Object_INH +Int_INH: +.word Object_INH +Bool_INH: +.word Object_INH +IO_INH: +.word Object_INH +SELF_TYPE_INH: +.word Object_INH +Graph_INH: +.word Object_INH +Vertice_INH: +.word IO_INH +Edge_INH: +.word IO_INH +EList_INH: +.word IO_INH +ECons_INH: +.word EList_INH +VList_INH: +.word IO_INH +VCons_INH: +.word VList_INH +Parse_INH: +.word IO_INH +Main_INH: +.word Parse_INH +BoolOp_INH: +.word Object_INH +Int_name: .asciiz "Int" +Int_VT: +.word Int_INH +Bool_name: .asciiz "Bool" +Bool_VT: +.word Bool_INH +String_name: .asciiz "String" +String_VT: +.word String_INH +.word String.length +.word String.concat +.word String.substr +Object_name: .asciiz "Object" +Object_VT: +.word Object_INH +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_VT: +.word IO_INH +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Graph_name: .asciiz "Graph" +Graph_VT: +.word Graph_INH +.word Graph.add_vertice +.word Graph.print_E +.word Graph.print_V +Vertice_name: .asciiz "Vertice" +Vertice_VT: +.word Vertice_INH +.word Vertice.outgoing +.word Vertice.number +.word Vertice.init +.word Vertice.add_out +.word Vertice.print +Edge_name: .asciiz "Edge" +Edge_VT: +.word Edge_INH +.word Edge.init +.word Edge.print +EList_name: .asciiz "EList" +EList_VT: +.word EList_INH +.word EList.isNil +.word EList.head +.word EList.tail +.word EList.cons +.word EList.append +.word EList.print +ECons_name: .asciiz "ECons" +ECons_VT: +.word ECons_INH +.word ECons.isNil +.word ECons.head +.word ECons.tail +.word ECons.init +.word ECons.print +VList_name: .asciiz "VList" +VList_VT: +.word VList_INH +.word VList.isNil +.word VList.head +.word VList.tail +.word VList.cons +.word VList.print +VCons_name: .asciiz "VCons" +VCons_VT: +.word VCons_INH +.word VCons.isNil +.word VCons.head +.word VCons.tail +.word VCons.init +.word VCons.print +Parse_name: .asciiz "Parse" +Parse_VT: +.word Parse_INH +.word Parse.read_input +.word Parse.parse_line +.word Parse.c2i +.word Parse.a2i +.word Parse.a2i_aux +Main_name: .asciiz "Main" +Main_VT: +.word Main_INH +.word Main.main +BoolOp_name: .asciiz "BoolOp" +BoolOp_VT: +.word BoolOp_INH +.word BoolOp.and +.word BoolOp.or + +.globl main +.text +IO.out_string: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 4 +lw $a0, 8($sp) +syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra + + +IO.out_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 1 +lw $a0, 8($sp) +syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra + + +IO.in_string: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a0, buffer +li $a1, 1024 +li $v0, 8 +syscall +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +jal String.length +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $t0, $v0 +la $a0, buffer +istr_copy: +lb $t1, ($a0) +sb $t1, ($t0) +addiu $a0, $a0, 1 +addiu $t0, $t0, 1 +bne $t1, $zero, istr_copy +addiu $t0, $t0, -2 +li $t1 10 +lb $t2, ($t0) +bne $t1 , $t2 not_slash +sb $zero, ($t0) +not_slash: +move $a0, $v0 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra + + +IO.in_int: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($fp) +li $v0, 5 +syscall +move $a0, $v0 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Object.copy: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a1, -4($sp) +lw $a0, -8($sp) +li $v0, 9 +syscall +lw $a1, -4($sp) +lw $a0, 4($a1) +move $a3, $v0 +_copy.loop: +lw $a2, 0($a1) +sw $a2, 0($a3) +addiu $a0, $a0, -1 +addiu $a1, $a1, 4 +addiu $a3, $a3, 4 +beq $a0, $zero, _copy.end +j _copy.loop +_copy.end: +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra + + +Object.abort: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 10 +syscall +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra + + +String.length: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +_stringlength.loop: +lb $a1, 0($sp) +beqz $a1, _stringlength.end +addiu $a0, $a0, 1 +j _stringlength.loop +_stringlength.end: +j Object.abort +lw $a1, 4($sp) +subu $v0, $a0, $a1 +jr $ra + + +String.concat: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +move $a2, $ra +jal String.length +move $v1, $v0 +addiu $sp, $sp, -4 +jal String.length +addiu $sp, $sp, 4 +add $v1, $v1, $v0 +addi $v1, $v1, 1 +li $v0, 9 +move $a0, $v1 +syscall +move $v1, $v0 +lw $a0, 0($sp) +_stringconcat.loop1: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end1 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop1 +_stringconcat.end1: +lw $a0, -4($sp) +_stringconcat.loop2: +lb $a1, 0($a0) +beqz $a1, _stringconcat.end2 +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +j _stringconcat.loop2 +_stringconcat.end2: +sb $zero, 0($v1) +move $ra, $a2 +jr $ra + +String.substr: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($fp) +addiu $a0, $a0, 1 +li $v0, 9 +syscall +move $t0, $v0 +lw $s1, 4($fp) +lw $t1, 8($fp) +add $s1, $s1, $t1 +lw $t1, 12($fp) +substr: +lb $t5, ($s1) +sb $t5, ($t0) +addiu $s1, $s1, 1 +addiu $t0, $t0, 1 +addiu $t1, $t1, -1 +bne $t1, $zero, substr +sb $zero, ($t0) +move $a0, $v0 +lw $ra, 16($sp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra + + +_substrexception: +la $a0, strsubstrexception +li $v0, 4 +syscall +li $v0, 10 +syscall + + +_stringcmp: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 4($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length + +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $s1, 8($fp) +sw $fp, 0($sp) +addiu $sp, $sp, -4 +sw $s1, 0($sp) +addiu $sp, $sp, -4 +jal String.length +lw $t7, 4($sp) +addiu $sp, $sp, 4 +bne $t7, $a0, str.not_equals_strings +lw $t7, 4($fp) +lw $a0, 8($fp) +str.equal_chart: +lb $t1, ($t7) +lb $t2, ($a0) +addiu $t7, $t7, 1 +addiu $a0, $a0, 1 +bne $t1, $t2, str.not_equals_strings +beq $t1, $zero, str.equals_strings +j str.equal_chart +str.not_equals_strings: +li $a0, 0 +j str.end_equal_string +str.equals_strings: +li $a0, 1 +str.end_equal_string: +lw $ra, 12($sp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra +inherit: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +beq $a0, $a1, inherit_true +beq $a0, $zero, inherit_false +lw $a0, ($a0) +j inherit +inherit_true: +li $v0, 1 +jr $ra +inherit_false: +li $v0, 0 +lw $ra, 4($sp) +addiu $sp, $sp, 12 +jr $ra + +Object.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Object.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Object_name +jr $ra +Int.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Int.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Int_name +jr $ra +IO.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +IO.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, IO_name +jr $ra +Bool.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Bool.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Bool_name +jr $ra +String.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +String.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, String_name +jr $ra +#--------------Initial Code--------------- +main: +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, Main_VT +sw $a1, ($v0) +#DispatchParent in place +#obj 2 offset 1 result Main.Constructor +la $v0, 1 +jal Main.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 1 result Main.main +jal Main.main +sw $a0, 4($sp) +addi $sp, $sp, 4 +j Object.abort +#--------------End Initial Code--------------- +Graph.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, VList_VT +sw $a1, ($v0) +lw $a0, 4($sp) +sw $a0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result VList.Constructor +la $v0, 1 +jal VList.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $a0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($sp) +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, EList_VT +sw $a1, ($v0) +lw $a0, 4($sp) +sw $a0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result EList.Constructor +la $v0, 1 +jal EList.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $a0, 4($sp) +lw $t1, 36($sp) +sw $t1, 8($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Graph.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Graph_name +jr $ra +Graph.add_vertice: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Assignment +#Point-Dispatch +#push object +#Point-Dispatch +#push object +lw $a0, 24($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Args: 0 +lw $a0, 36($sp) +lw $t1, 8($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 5 offset 2 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 36($sp) +sw $t1, 8($sp) +#Assignment +#Point-Dispatch +#push object +lw $a0, 48($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Args: 0 +lw $a0, 48($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 3 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 56($sp) +sw $t1, 4($sp) +lw $a0, 4($sp) +sw $a0, 44($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Graph.print_E: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +#push object +lw $a0, 16($sp) +lw $t1, 8($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Graph.print_V: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +#push object +lw $a0, 16($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Vertice.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, EList_VT +sw $a1, ($v0) +lw $a0, 4($sp) +sw $a0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result EList.Constructor +la $v0, 1 +jal EList.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $a0, 4($sp) +lw $t1, 20($sp) +sw $t1, 8($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Vertice.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Vertice_name +jr $ra +Vertice.outgoing: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +lw $t1, 8($a0) +sw $t1, 4($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Vertice.number: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Vertice.init: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Assignment +lw $a0, 16($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($sp) +lw $a0, 28($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Vertice.add_out: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Assignment +#Point-Dispatch +#push object +lw $a0, 24($sp) +lw $t1, 8($a0) +sw $t1, 4($sp) +#Args: 0 +lw $a0, 24($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 3 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 32($sp) +sw $t1, 8($sp) +lw $a0, 36($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 24($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Vertice.print: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Self-Dispatch +#push self +lw $a0, 20($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 24($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 6 result IO.out_int +jal IO.out_int +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Point-Dispatch +#push object +lw $a0, 32($sp) +lw $t1, 8($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 28($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Edge.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Edge.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Edge_name +jr $ra +Edge.init: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Assignment +lw $a0, 24($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 28($sp) +sw $t1, 4($sp) +#Assignment +lw $a0, 28($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 36($sp) +sw $t1, 8($sp) +#Assignment +lw $a0, 32($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 44($sp) +sw $t1, 12($sp) +lw $a0, 52($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 32($sp) +lw $ra, 16($sp) +addiu $sp, $sp, 20 +lw $fp, 0($sp) +jr $ra +Edge.print: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Self-Dispatch +#push self +lw $a0, 20($sp) +sw $a0, 4($sp) +#Args: 0 +#loading label +la $a0, string_1 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 6 result IO.out_string +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Self-Dispatch +#push self +lw $a0, 32($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 36($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 9 result IO.out_int +jal IO.out_int +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Self-Dispatch +#push self +lw $a0, 44($sp) +sw $a0, 4($sp) +#Args: 0 +#loading label +la $a0, string_2 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 12 result IO.out_string +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Self-Dispatch +#push self +lw $a0, 56($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 60($sp) +lw $t1, 8($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 15 result IO.out_int +jal IO.out_int +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Self-Dispatch +#push self +lw $a0, 68($sp) +sw $a0, 4($sp) +#Args: 0 +#loading label +la $a0, string_3 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 18 result IO.out_string +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Self-Dispatch +#push self +lw $a0, 80($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 84($sp) +lw $t1, 12($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 21 result IO.out_int +jal IO.out_int +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 76($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +EList.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +EList.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, EList_name +jr $ra +EList.isNil: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +EList.head: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Self-Dispatch +#push self +lw $a0, 20($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 24($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +EList.tail: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Self-Dispatch +#push self +lw $a0, 20($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 24($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +EList.cons: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +#push object +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, ECons_VT +sw $a1, ($v0) +lw $a0, 4($sp) +sw $a0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result ECons.Constructor +la $v0, 1 +jal ECons.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Args: 0 +lw $a0, 28($sp) +sw $a0, 4($sp) +#Args: 1 +lw $a0, 36($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 6 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +EList.append: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +#Point-Dispatch +#push object +lw $a0, 24($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_4 +#Point-Dispatch +#push object +#Point-Dispatch +#push object +#Self-Dispatch +#push self +lw $a0, 44($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 11 result EList.tail +jal EList.tail +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Args: 0 +lw $a0, 44($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 4 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Args: 0 +#Self-Dispatch +#push self +lw $a0, 60($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 15 result EList.head +jal EList.head +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Dispatch in place +#obj 8 offset 3 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 48($sp) +j _fi_4 +_if_4: +lw $a0, 64($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 56($sp) +_fi_4: +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +EList.print: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +#push self +lw $a0, 16($sp) +sw $a0, 4($sp) +#Args: 0 +#loading label +la $a0, string_5 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 5 result IO.out_string +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +ECons.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +ECons.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, ECons_name +jr $ra +ECons.isNil: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +ECons.head: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +ECons.tail: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +ECons.init: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Assignment +lw $a0, 20($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 24($sp) +sw $t1, -4($sp) +#Assignment +lw $a0, 24($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 32($sp) +sw $t1, 4($sp) +lw $a0, 40($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 24($sp) +lw $ra, 12($sp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra +ECons.print: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Point-Dispatch +#push object +lw $a0, 20($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Point-Dispatch +#push object +lw $a0, 32($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 28($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +VList.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +VList.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, VList_name +jr $ra +VList.isNil: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +VList.head: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Self-Dispatch +#push self +lw $a0, 20($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 24($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +VList.tail: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Self-Dispatch +#push self +lw $a0, 20($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 5 result Object.abort +jal Object.abort +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 24($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +VList.cons: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Point-Dispatch +#push object +li $v0, 9 +li $a0, 8 +syscall +sw $v0, 4($sp) +la $a1, VCons_VT +sw $a1, ($v0) +lw $a0, 4($sp) +sw $a0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result VCons.Constructor +la $v0, 1 +jal VCons.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Args: 0 +lw $a0, 28($sp) +sw $a0, 4($sp) +#Args: 1 +lw $a0, 36($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 6 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +VList.print: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +#push self +lw $a0, 16($sp) +sw $a0, 4($sp) +#Args: 0 +#loading label +la $a0, string_6 +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Dispatch in place +#obj 3 offset 5 result IO.out_string +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +VCons.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +VCons.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, VCons_name +jr $ra +VCons.isNil: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +VCons.head: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +VCons.tail: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $a0, 12($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +VCons.init: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Assignment +lw $a0, 20($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 24($sp) +sw $t1, -4($sp) +#Assignment +lw $a0, 24($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +lw $t1, 32($sp) +sw $t1, 4($sp) +lw $a0, 40($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 24($sp) +lw $ra, 12($sp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra +VCons.print: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Point-Dispatch +#push object +lw $a0, 20($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Point-Dispatch +#push object +lw $a0, 32($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 28($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Parse.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +li $v0, 9 +li $a0, 4 +syscall +sw $v0, 4($sp) +la $a1, BoolOp_VT +sw $a1, ($v0) +lw $a0, 4($sp) +sw $a0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result BoolOp.Constructor +la $v0, 1 +jal BoolOp.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $a0, 4($sp) +lw $t1, 20($sp) +sw $t1, 4($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Parse.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Parse_name +jr $ra +Parse.read_input: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +#Block +#Let +#loop +_loop_7: +#Point-Dispatch +#push object +lw $a0, 40($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Args: 0 +#Unary +#Binary +lw $a0, 52($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#loading label +la $a0, string_8 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 0($sp) +li $t1, 1 +sub $a0, $t1, $a0 +sw $a0, 4($sp) +#Args: 1 +#Unary +#Binary +lw $a0, 76($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#loading label +la $a0, string_9 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 0($sp) +li $t1, 1 +sub $a0, $t1, $a0 +sw $a0, 4($sp) +#Dispatch in place +#obj 14 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _body_7 +j _pool_7 +_body_7: +#Block +#Point-Dispatch +#push object +lw $a0, 104($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Args: 0 +#Self-Dispatch +#push self +lw $a0, 112($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 116($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 3 offset 29 result Parse.parse_line +jal Parse.parse_line +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Dispatch in place +#obj 5 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Assignment +#Self-Dispatch +#push self +lw $a0, 128($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 32 result IO.in_string +jal IO.in_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 128($sp) +sw $t1, -4($sp) +lw $a0, 4($sp) +sw $a0, 40($sp) +j _loop_7 +_pool_7: +lw $a0, 128($sp) +sw $a0, 6666($sp) +lw $a0, 32($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $a0, 32($sp) +sw $a0, 3333($sp) +lw $ra, 4($sp) +addiu $sp, $sp, 8 +lw $fp, 0($sp) +jr $ra +Parse.parse_line: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +#Block +#loop +_loop_10: +#Unary +#Binary +#Point-Dispatch +#push object +lw $a0, 44($sp) +lw $t1, 8($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 0($sp) +li $t1, 1 +sub $a0, $t1, $a0 +sw $a0, 4($sp) +lw $a0, 4($fp) +bnez $a0, _body_10 +j _pool_10 +_body_10: +#Block +#Let +#Let +#Point-Dispatch +#push object +lw $a0, 84($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Args: 0 +#Point-Dispatch +#push object +li $v0, 9 +li $a0, 16 +syscall +sw $v0, 4($sp) +la $a1, Edge_VT +sw $a1, ($v0) +lw $a0, 4($sp) +sw $a0, 12($sp) +#DispatchParent in place +#obj 2 offset 1 result Edge.Constructor +la $v0, 1 +jal Edge.Constructor +sw $a0, 0($sp) +addi $sp, $sp, -4 +#Args: 0 +#Point-Dispatch +#push object +lw $a0, 108($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Args: 1 +lw $a0, 116($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Args: 2 +lw $a0, 120($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 9 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Dispatch in place +#obj 12 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 84($sp) +sw $a0, 18181818($sp) +lw $a0, 76($sp) +sw $a0, 16161616($sp) +lw $a0, 4($sp) +sw $a0, 12($sp) +j _loop_10 +_pool_10: +lw $a0, 76($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $a0, 4($sp) +sw $a0, 56($sp) +lw $a0, 76($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Parse.c2i: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +#Binary +lw $a0, 20($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_11 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_12 +#Condition +#Binary +lw $a0, 44($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_13 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_14 +#Condition +#Binary +lw $a0, 68($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_15 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_16 +#Condition +#Binary +lw $a0, 92($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_17 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_18 +#Condition +#Binary +lw $a0, 116($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_19 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_20 +#Condition +#Binary +lw $a0, 140($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_21 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_22 +#Condition +#Binary +lw $a0, 164($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_23 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_24 +#Condition +#Binary +lw $a0, 188($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_25 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_26 +#Condition +#Binary +lw $a0, 212($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_27 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_28 +#Condition +#Binary +lw $a0, 236($sp) +sw $a0, 4($sp) +#loading label +la $a0, string_29 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_30 +#Block +#Self-Dispatch +#push self +lw $a0, 264($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 66 result Object.abort +jal Object.abort +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $a0, 4($sp) +sw $a0, 44($sp) +j _fi_30 +_if_30: +#Integer +li $a0, 9 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 48($sp) +_fi_30: +lw $a0, 4($sp) +sw $a0, 76($sp) +j _fi_28 +_if_28: +#Integer +li $a0, 8 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 80($sp) +_fi_28: +lw $a0, 4($sp) +sw $a0, 108($sp) +j _fi_26 +_if_26: +#Integer +li $a0, 7 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 112($sp) +_fi_26: +lw $a0, 4($sp) +sw $a0, 140($sp) +j _fi_24 +_if_24: +#Integer +li $a0, 6 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 144($sp) +_fi_24: +lw $a0, 4($sp) +sw $a0, 172($sp) +j _fi_22 +_if_22: +#Integer +li $a0, 5 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 176($sp) +_fi_22: +lw $a0, 4($sp) +sw $a0, 204($sp) +j _fi_20 +_if_20: +#Integer +li $a0, 4 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 208($sp) +_fi_20: +lw $a0, 4($sp) +sw $a0, 236($sp) +j _fi_18 +_if_18: +#Integer +li $a0, 3 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 240($sp) +_fi_18: +lw $a0, 4($sp) +sw $a0, 268($sp) +j _fi_16 +_if_16: +#Integer +li $a0, 2 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 272($sp) +_fi_16: +lw $a0, 4($sp) +sw $a0, 300($sp) +j _fi_14 +_if_14: +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 304($sp) +_fi_14: +lw $a0, 4($sp) +sw $a0, 332($sp) +j _fi_12 +_if_12: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 336($sp) +_fi_12: +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Parse.a2i: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +#Binary +#Point-Dispatch +#push object +lw $a0, 24($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_31 +#Condition +#Binary +#Point-Dispatch +#push object +lw $a0, 52($sp) +sw $a0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a0, 4($sp) +addi $sp, $sp, 4 +#loading label +la $a0, string_32 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_33 +#Condition +#Binary +#Point-Dispatch +#push object +lw $a0, 88($sp) +sw $a0, 4($sp) +#Args: 0 +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a0, 4($sp) +addi $sp, $sp, 4 +#loading label +la $a0, string_34 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_35 +#Self-Dispatch +#push self +lw $a0, 120($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 120($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 3 offset 31 result Parse.a2i_aux +jal Parse.a2i_aux +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 48($sp) +j _fi_35 +_if_35: +#Self-Dispatch +#push self +lw $a0, 136($sp) +sw $a0, 4($sp) +#Args: 0 +#Point-Dispatch +#push object +lw $a0, 140($sp) +sw $a0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +#Point-Dispatch +#push object +lw $a0, 156($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 9 offset 1 result String.substr +jal String.substr +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Dispatch in place +#obj 12 offset 44 result Parse.a2i +jal Parse.a2i +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 100($sp) +_fi_35: +lw $a0, 4($sp) +sw $a0, 136($sp) +j _fi_33 +_if_33: +#Unary +#Self-Dispatch +#push self +lw $a0, 188($sp) +sw $a0, 4($sp) +#Args: 0 +#Point-Dispatch +#push object +lw $a0, 192($sp) +sw $a0, 4($sp) +#Args: 0 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Args: 1 +#Binary +#Point-Dispatch +#push object +lw $a0, 208($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 9 offset 1 result String.substr +jal String.substr +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Dispatch in place +#obj 12 offset 57 result Parse.a2i_aux +jal Parse.a2i_aux +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 0($sp) +not $a0, $a0 +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 188($sp) +_fi_33: +lw $a0, 4($sp) +sw $a0, 216($sp) +j _fi_31 +_if_31: +#Integer +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 220($sp) +_fi_31: +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Parse.a2i_aux: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Let +#Block +#Let +#Let +#loop +_loop_36: +#Binary +lw $a0, 52($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $a0, 56($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +li $t0, 1 +add $a0, $a0, $t0 +sge $a0, $t1, $a0 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _body_36 +j _pool_36 +_body_36: +#Let +#Condition +#Binary +lw $a0, 84($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#loading label +la $a0, string_37 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_38 +#Condition +#Binary +lw $a0, 108($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#loading label +la $a0, string_39 +sw $a0, 0($sp) +addi $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_40 +#Block +#Assignment +#Binary +#Binary +lw $a0, 136($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Integer +li $a0, 10 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +mult $a0, $t1 +mflo $a0 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Self-Dispatch +#push self +lw $a0, 156($sp) +sw $a0, 4($sp) +#Args: 0 +#Point-Dispatch +#push object +lw $a0, 160($sp) +sw $a0, 4($sp) +#Args: 0 +lw $a0, 168($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Args: 1 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +#Dispatch in place +#obj 4 offset 1 result String.substr +jal String.substr +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Dispatch in place +#obj 7 offset 44 result Parse.c2i +jal Parse.c2i +sw $a0, 4($sp) +addi $sp, $sp, 4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 176($sp) +sw $t1, -4($sp) +#Assignment +#Binary +lw $a0, 184($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 196($sp) +sw $t1, -4($sp) +#Condition +#Binary +lw $a0, 208($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $a0, 212($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +seq $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +lw $a0, 4($fp) +bnez $a0, _if_41 +#loading label +la $a0, string_42 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 28($sp) +j _fi_41 +_if_41: +#Assignment +#loading label +la $a0, string_43 +sw $a0, 0($sp) +addi $sp, $sp, -4 +lw $a0, 4($sp) +lw $t1, 232($sp) +sw $t1, 8($sp) +lw $a0, 4($sp) +sw $a0, 40($sp) +_fi_41: +lw $a0, 4($sp) +sw $a0, 116($sp) +lw $a0, 4($sp) +sw $a0, 140($sp) +j _fi_40 +_if_40: +#Block +#Assignment +#Point-Dispatch +#push object +lw $a0, 244($sp) +sw $a0, 4($sp) +#Args: 0 +#Binary +lw $a0, 256($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Binary +#Binary +#Point-Dispatch +#push object +lw $a0, 280($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 292($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 16 offset 1 result String.substr +jal String.substr +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 308($sp) +sw $t1, 8($sp) +#Assignment +lw $a0, 312($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $a0, 4($sp) +lw $t1, 312($sp) +sw $t1, -4($sp) +lw $a0, 4($sp) +sw $a0, 80($sp) +lw $a0, 4($sp) +sw $a0, 220($sp) +_fi_40: +lw $a0, 4($sp) +sw $a0, 244($sp) +j _fi_38 +_if_38: +#Block +#Assignment +#Point-Dispatch +#push object +lw $a0, 324($sp) +sw $a0, 4($sp) +#Args: 0 +#Binary +lw $a0, 336($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +add $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Args: 1 +#Binary +#Binary +#Point-Dispatch +#push object +lw $a0, 360($sp) +sw $a0, 4($sp) +#Dispatch in place +#obj 2 offset 1 result String.length +jal String.length +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 372($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Integer +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +sw $a0, 0($sp) +addiu $sp, $sp, -4 +lw $t1, 4($sp) +sub $a0, $a0, $t1 +sw $a0, 4($sp) +addiu $sp, $sp, 4 +#Dispatch in place +#obj 16 offset 1 result String.substr +jal String.substr +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 388($sp) +sw $t1, 8($sp) +#Assignment +lw $a0, 392($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $a0, 4($sp) +lw $t1, 392($sp) +sw $t1, -4($sp) +lw $a0, 4($sp) +sw $a0, 80($sp) +lw $a0, 4($sp) +sw $a0, 324($sp) +_fi_38: +lw $a0, 392($sp) +sw $a0, 17171717($sp) +j _loop_36 +_pool_36: +lw $a0, 72($sp) +sw $a0, 9999($sp) +lw $a0, 40($sp) +sw $a0, 7777($sp) +lw $a0, 36($sp) +lw $t1, -4($a0) +sw $t1, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +lw $a0, 36($sp) +sw $a0, 4444($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Main.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Self-Dispatch +#Dispatch in place +#obj 1 offset 3 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +lw $t1, 12($sp) +sw $t1, 4($sp) +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +Main.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, Main_name +jr $ra +Main.main: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Block +#Point-Dispatch +#push object +lw $a0, 20($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +#Point-Dispatch +#push object +lw $a0, 32($sp) +lw $t1, 4($a0) +sw $t1, 4($sp) +#Dispatch in place +#obj 2 offset 1 result -1 +jal IO.out_string +sw $a0, 4($sp) +addi $sp, $sp, 4 +lw $a0, 4($sp) +sw $a0, 28($sp) +BoolOp.Constructor: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +lw $ra, 8($sp) +addiu $sp, $sp, 12 +lw $fp, 0($sp) +jr $ra +BoolOp.type_name: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +la $a1, BoolOp_name +jr $ra +BoolOp.and: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +lw $a0, 20($sp) +sw $a0, 4($sp) +lw $a0, 4($fp) +bnez $a0, _if_44 +li $a0, 0 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 16($sp) +j _fi_44 +_if_44: +lw $a0, 32($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 24($sp) +_fi_44: +lw $ra, 12($sp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra +BoolOp.or: +move $fp, $sp +sw $ra, 0($sp) +addiu $sp, $sp, -4 +#Condition +lw $a0, 20($sp) +sw $a0, 4($sp) +lw $a0, 4($fp) +bnez $a0, _if_45 +lw $a0, 24($sp) +sw $a0, 4($sp) +lw $a0, 4($sp) +sw $a0, 16($sp) +j _fi_45 +_if_45: +li $a0, 1 +sw $a0, ($sp) +addiu $sp, $sp, -4 +lw $a0, 4($sp) +sw $a0, 24($sp) +_fi_45: +lw $ra, 12($sp) +addiu $sp, $sp, 16 +lw $fp, 0($sp) +jr $ra +li $v0, 10 +syscall From cf51bd4cdae5b8138c2e239d77fdafe9d8d68527 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sat, 5 Dec 2020 22:40:28 -0500 Subject: [PATCH 110/140] substr mips --- src/code_generation/statics/String.s | 41 ++++++++++++---------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s index baafc92d..7ee81294 100644 --- a/src/code_generation/statics/String.s +++ b/src/code_generation/statics/String.s @@ -49,32 +49,27 @@ move $ra, $a2 jr $ra String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) +lw $a0, -12($sp) addiu $a0, $a0, 1 li $v0, 9 syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 0($fp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - +move $v1, $v0 +lw $a0, -4($sp) +lw $a1, -8($sp) +add $a0, $a0, $a1 +lw $a2, -12($sp) +_stringsubstr.loop: +beqz $a2, _stringsubstr.end +lb $a1, 0($a0) +beqz $a1, _substrexception +sb $a1, 0($v1) +addiu $a0, $a0, 1 +addiu $v1, $v1, 1 +addiu $a2, $a2, -1 +j _stringsubstr.loop +_stringsubstr.end: +sb $zero, 0($v1) +jr $ra _substrexception: la $a0, strsubstrexception From 90019eff4445a94f9881828e1a96c86d0f41ccb0 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sat, 5 Dec 2020 22:43:21 -0500 Subject: [PATCH 111/140] adding venv --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index b55bc700..05d72173 100644 --- a/.gitignore +++ b/.gitignore @@ -414,5 +414,4 @@ dmypy.json src/ast.txt src/main.py .idea -venv test \ No newline at end of file From 0d0a8be5eb9403497e5868ae9dc889dfd5894185 Mon Sep 17 00:00:00 2001 From: hros18 Date: Wed, 9 Dec 2020 10:53:47 -0500 Subject: [PATCH 112/140] IL redefinition to CIL --- .../nodesIL/allocate_node_il.py | 17 +- .../nodesIL/assignmet_node_il.py | 58 +- .../nodesIL/instruction_node_il.py | 357 ++ .../nodesIL/methods_node_il.py | 149 - src/code_generation/nodesIL/node_il.py | 80 + .../nodesIL/operation_node_il.py | 39 +- src/main.py | 22 +- src/visitors/to_mips.py | 20 +- src/visitors/transpilator.py | 16 +- tests/codegen/arith.mips | 5078 +++-------------- tests/codegen/atoi.mips | 10 + tests/codegen/book_list.mips | 40 + tests/codegen/cells.mips | 1186 +--- tests/codegen/complex.mips | 10 + tests/codegen/fib.mips | 15 + tests/codegen/graph.mips | 2700 +-------- tests/codegen/hairyscary.mips | 9 + tests/codegen/hello_world.mips | 10 + tests/codegen/io.mips | 30 + tests/codegen/life.mips | 3894 +++++++++++++ tests/codegen/list.mips | 30 + tests/codegen/new_complex.mips | 15 + tests/codegen/palindrome.mips | 15 + tests/codegen/primes.mips | 485 ++ tests/codegen/print-cool.mips | 10 + tests/codegen/sort-list.mips | 55 + venv/bin/activate | 76 + venv/bin/activate.csh | 37 + venv/bin/activate.fish | 75 + venv/bin/easy_install | 10 + venv/bin/pip | 10 + venv/bin/pip3 | 10 + venv/bin/py.test | 10 + venv/bin/pytest | 10 + venv/bin/python | 1 + venv/bin/python3 | 1 + venv/lib64 | 1 + venv/pyvenv.cfg | 3 + 38 files changed, 6296 insertions(+), 8298 deletions(-) create mode 100644 src/code_generation/nodesIL/instruction_node_il.py delete mode 100644 src/code_generation/nodesIL/methods_node_il.py create mode 100644 tests/codegen/atoi.mips create mode 100644 tests/codegen/book_list.mips create mode 100644 tests/codegen/complex.mips create mode 100644 tests/codegen/fib.mips create mode 100644 tests/codegen/hairyscary.mips create mode 100644 tests/codegen/hello_world.mips create mode 100644 tests/codegen/io.mips create mode 100644 tests/codegen/life.mips create mode 100644 tests/codegen/list.mips create mode 100644 tests/codegen/new_complex.mips create mode 100644 tests/codegen/palindrome.mips create mode 100644 tests/codegen/primes.mips create mode 100644 tests/codegen/print-cool.mips create mode 100644 tests/codegen/sort-list.mips create mode 100755 venv/bin/activate create mode 100755 venv/bin/activate.csh create mode 100755 venv/bin/activate.fish create mode 100755 venv/bin/easy_install create mode 100755 venv/bin/pip create mode 100755 venv/bin/pip3 create mode 100755 venv/bin/py.test create mode 100755 venv/bin/pytest create mode 120000 venv/bin/python create mode 120000 venv/bin/python3 create mode 120000 venv/lib64 create mode 100644 venv/pyvenv.cfg diff --git a/src/code_generation/nodesIL/allocate_node_il.py b/src/code_generation/nodesIL/allocate_node_il.py index 360a842b..4b1facc1 100644 --- a/src/code_generation/nodesIL/allocate_node_il.py +++ b/src/code_generation/nodesIL/allocate_node_il.py @@ -1,11 +1,10 @@ -from .node_il import NodeIL +class AllocateNodeIL(InstructionNodeIL): + def __init__(self, itype, dest, idx=None): + super().__init__(idx) + self.type = itype + self.dest = dest -class AllocateIL(NodeIL): - - def __init__(self, var, size, typ): - self.var = var - self.size = size - self.typ = typ + self.out = dest - def __str__(self): - return "alloc {} in {}".format(self.typ, self.var) + def __str__(): + return ("{} = ALLOCATE {}".format(self.dest, self.type)) \ No newline at end of file diff --git a/src/code_generation/nodesIL/assignmet_node_il.py b/src/code_generation/nodesIL/assignmet_node_il.py index 85aaeef1..711aad94 100644 --- a/src/code_generation/nodesIL/assignmet_node_il.py +++ b/src/code_generation/nodesIL/assignmet_node_il.py @@ -1,45 +1,13 @@ -from .node_il import NodeIL - -class AssignmentNodeIL(NodeIL): - - def __init__(self, left, right): - self.left = left - self.right = right - - def __str__(self): - return "{} = {}".format(self.left, self.right) - -class VarToVarIL(AssignmentNodeIL): - - def __init__(self, left, right): - super().__init__(left, right) - - def __str__(self): - return "var {} = var {}".format(self.left, self.right) - -class MemoToVarIL(AssignmentNodeIL): - - def __init__(self, left, right, offset): - super().__init__(left, right) - self.offset = offset - - def __str__(self): - return "var {} = memo [{}]".format(self.left, self.offset) - -class VarToMemoIL(AssignmentNodeIL): - - def __init__(self, left, right, offset): - super().__init__(left, right) - self.offset = offset - - def __str__(self): - return "memo [{}] = var {}".format(self.offset, self.right) - -class ConstToMemoIL(AssignmentNodeIL): - - def __init__(self, left, right, offset): - super().__init__(left, right) - self.offset = offset - - def __str__(self): - return "memo [{}] = {}\n".format(self.left + self.offset, self.right) \ No newline at end of file +from .node_il import * + +class AssignNodeIL(InstructionNodeIL): + def __init__(self, dest, source, idx=None): + super().__init__(idx) + self.dest = dest + self.source = source + + self.in1 = source + self.out = dest + + def __str__(): + return ("{} = {}".format(self.dest, self.source)) \ No newline at end of file diff --git a/src/code_generation/nodesIL/instruction_node_il.py b/src/code_generation/nodesIL/instruction_node_il.py new file mode 100644 index 00000000..997d4dcb --- /dev/null +++ b/src/code_generation/nodesIL/instruction_node_il.py @@ -0,0 +1,357 @@ +from .node_il import * + +class NotNodeIL(UnaryNodeIL): + + def __str__(): + return ("{} = ~{}".format(self.dest, self.expr)) + +class LogicalNotNodeIL(UnaryNodeIL): + def __str__(): + return ("{} = NOT {}".format(self.dest, self.expr)) +class PlusNodeIL(BinaryNodeIL): + def __str__(): + return ("{} = {} + {}".format(self.dest,self.left, self.right)) + +class MinusNodeIL(BinaryNodeIL): + def __str__(): + return ("{} = {} - {}".format(self.dest,self.left, self.right)) +class StarNodeIL(BinaryNodeIL): + def __str__(): + return ("{} = {} * {}".format(self.dest,self.left, self.right)) + +class DivNodeIL(BinaryNodeIL): + def __str__(): + return ("{} = {} / {}".format(self.dest,self.left, self.right)) + +class LessNodeIL(BinaryNodeIL): + def __str__(): + return ("{} = {} < {}".format(self.dest,self.left, self.right)) + +class LessEqNodeIL(BinaryNodeIL): + def __str__(): + return ("{} = {} <= {}".format(self.dest,self.left, self.right)) + +class EqualNodeIL(BinaryNodeIL): + def __str__(): + return ("{} = {} == {}".format(self.dest,self.left, self.right)) + +class ArrayNodeIL(InstructionNodeIL): + pass + +class GetIndexNodeIL(InstructionNodeIL): + pass + +class SetIndexNodeIL(InstructionNodeIL): + pass + +class SetAttribNodeIL(InstructionNodeIL): + def __init__(self, obj, attr, typex, value, idx=None): + super().__init__(idx) + self.obj = obj + self.attr = attr + + self.value = value + self.type_name = typex + + self.out = obj + self.in1 = value + + def __str__(): + return ("SETATTR {} {} = {}".format(self.obj,self.attr, self.value)) + +class GetAttribNodeIL(InstructionNodeIL): + def __init__(self, obj, attr, typex, dest, attr_type, idx=None): + super().__init__(idx) + self.obj = obj + self.attr = attr + self.type_name = typex + self.dest = dest + self.attr_type = attr_type + + self.out = dest + self.in1 = obj + + def __str__(): + return ("{} = GETATTR {} {}".format(self.dest,self.obj,self.attr)) + +class TypeOfNodeIL(InstructionNodeIL): + def __init__(self, obj, dest, idx=None): + super().__init__(idx) + self.obj = obj + self.dest = dest + + self.out = dest + self.in1 = obj + + def __str__(): + return ("{} = TYPEOF {}".format(self.dest,self.obj)) + +class LabelNodeIL(InstructionNodeIL): + def __init__(self, label, idx=None): + super().__init__(idx) + self.label = label + + def __str__(): + return ("LABEL {}".format(self.label)) + + +class GotoNodeIL(InstructionNodeIL): + def __init__(self, label, idx=None): + super().__init__(idx) + self.label = label + def __str__(): + return ("GOTO {}".format(self.label)) + +class GotoIfNodeIL(InstructionNodeIL): + def __init__(self, cond, label, idx=None): + super().__init__(idx) + self.cond = cond + self.label = label + + self.in1 = cond + + def __str__(): + return ("IF {} GOTO {}".format(self.cond, self.label)) + +class GotoIfFalseNodeIL(InstructionNodeIL): + def __init__(self, cond, label, idx=None): + super().__init__(idx) + self.cond = cond + self.label = label + + self.in1 = cond + + def __str__(): + return ("IF NOT {} GOTO {}".format(self.cond,self.label)) + +class StaticCallNodeIL(InstructionNodeIL): + def __init__(self, xtype, function, dest, args, return_type, idx=None): + super().__init__(idx) + self.type = xtype + self.function = function + self.dest = dest + self.args = args + self.return_type = return_type + + self.out = dest + + def __str__(): + args = '\n\t'.join(str(arg) for arg in self.args) + return ("{}\n\t{} = CALL {}".format(args, self.dest, self.function)) + +class DynamicCallNodeIL(InstructionNodeIL): + def __init__(self, xtype, obj, method, dest, args, return_type, idx=None): + super().__init__(idx) + self.type = xtype + self.method = method + self.dest = dest + self.args = args + self.return_type = return_type + self.obj = obj + + self.out = dest + self.in1 = obj + + def __str__(): + args = '\n\t'.join(str(arg) for arg in self.args) + return ("{}\n\t{} = VCALL {} {}".format(args, self.dest, self.type, self.method)) + +class ArgNodeIL(InstructionNodeIL): + def __init__(self, name, idx=None): + super().__init__(idx) + self.dest = name + self.out = name + + def __str__(): + return ("ARG {}".format(self.dest)) + +class ReturnNodeIL(InstructionNodeIL): + def __init__(self, value, idx=None): + super().__init__(idx) + self.value = value + + self.out = value + + def __str__(): + to_return = "" + if self.value is not None: + to_return = " " + str(self.value) + return "RETURN" + to_return + +class LoadNodeIL(InstructionNodeIL): + def __init__(self, dest, msg, idx=None): + super().__init__(idx) + self.dest = dest + self.msg = msg + + self.out = dest + + def __str__(): + return ("{} = LOAD {}".format(self.dest, self.msg)) + +class LengthNodeIL(InstructionNodeIL): + def __init__(self, dest, arg, idx=None): + super().__init__(idx) + self.dest = dest + self.arg = arg + + self.out = dest + self.in1 = arg + + def __str__(): + return ("{} = LENGTH {}".format(self.dest, self.arg)) + +class ConcatNodeIL(InstructionNodeIL): + def __init__(self, dest, arg1, arg2, idx=None): + super().__init__(idx) + self.dest = dest + self.arg1 = arg1 + self.arg2 = arg2 + + self.out = dest + self.in1 = arg1 + self.in2 = arg2 + + def __str__(): + return ("{} = CONCAT {} {}".format(self.dest, self.arg1, self.arg2)) + +class PrefixNodeIL(InstructionNodeIL): + def __init__(self, dest, word, n, idx=None): + super().__init__(idx) + self.dest = dest + self.word = word + self.n = n + + self.out = dest + self.in1 = word + self.in2 = n + +class SubstringNodeIL(InstructionNodeIL): + def __init__(self, dest, word, begin, end, idx=None): + super().__init__(idx) + self.dest = dest + self.begin = begin + self.word = word + self.end = end + + self.out = dest + self.in1 = begin + self.in2 = end + + def __str__(): + return ("{} = SUBSTR {} {} {}".format(self.dest, self.word, self.begin, self.end)) + +class ToStrNodeIL(InstructionNodeIL): + def __init__(self, dest, ivalue, idx=None): + super().__init__(idx) + self.dest = dest + self.ivalue = ivalue + + self.out = dest + self.in1 = ivalue + + def __str__(): + return ("{} = STR {}".format(self.dest, self.ivalue)) + +class OutStringNodeIL(InstructionNodeIL): + def __init__(self, value, idx=None): + super().__init__(idx) + self.value = value + + self.in1 = value + + def __str__(): + return ("OUT_STR {}".format(self.value)) + +class OutIntNodeIL(InstructionNodeIL): + def __init__(self, value, idx=None): + super().__init__(idx) + self.value = value + + self.in1 = value + + def __str__(): + return ("OUT_INT {}".format(self.value)) + +class ReadStringNodeIL(InstructionNodeIL): + def __init__(self, dest, idx=None): + super().__init__(idx) + self.dest = dest + + self.out = dest + + def __str__(): + return ("{} = READ_STR".format(self.dest)) + +class ReadIntNodeIL(InstructionNodeIL): + def __init__(self, dest, idx=None): + super().__init__(idx) + self.dest = dest + + self.out = dest + + def __str__(): + return ("{} = READ_INT".format(self.dest)) + +class ExitNodeIL(InstructionNodeIL): + def __init__(self, classx, value=0, idx=None): + super().__init__(idx) + self.classx = classx # instance of the method that called the class + self.value = value + + self.in1 = value + self.in2 = classx + + def __str__(): + return ("EXIT {}".format(self.value)) + +class CopyNodeIL(InstructionNodeIL): + def __init__(self, dest, source, idx=None): + super().__init__(idx) + self.dest = dest + self.source = source + + self.out = dest + self.in1 = source + + def __str__(): + return ("{} = COPY {}".format(self.dest, self.source)) + +class ConformsNodeIL(InstructionNodeIL): + def __init__(self, dest, expr, type2, idx=None): + super().__init__(idx) + self.dest = dest + self.expr = expr + self.type = type2 + + self.out = dest + self.in1 = expr + + def __str__(): + return ("{} = CONFORMS {}".format(self.dest, self.expr, self.type)) + +class VoidConstantNodeIL(InstructionNodeIL): + def __init__(self, obj, idx=None): + super().__init__(idx) + self.obj = obj + + self.out = obj + + def __str__(): + return ("{} = Void".format(self.obj)) + +class ErrorNodeIL(InstructionNodeIL): + def __init__(self, typex, idx=None): + super().__init__(idx) + self.type = typex + + def __str__(): + return ("ERROR {}".format(self.type)) + +class BoxingNodeIL(InstructionNodeIL): + def __init__(self, dest, type_name, idx=None): + super().__init__(idx) + self.dest = dest + self.type = type_name + + self.out = dest \ No newline at end of file diff --git a/src/code_generation/nodesIL/methods_node_il.py b/src/code_generation/nodesIL/methods_node_il.py deleted file mode 100644 index df5e6548..00000000 --- a/src/code_generation/nodesIL/methods_node_il.py +++ /dev/null @@ -1,149 +0,0 @@ -from .node_il import NodeIL - -class LabelIL(NodeIL): - - def __init__(self, first, second, func = False): - if first == 'main': - self.label = 'main' - elif not func: - self.label = str(first) + '_' + str(second) - else: - self.label = str(first) + '.' + str(second) - self.first = first - self.second = second - self.func = func - - def __str__(self): - return 'label {}:'.format(self.label) - -class CustomLineIL(NodeIL): - def __init__(self, statement): - self.statement = statement - -class LoadLabelIL(NodeIL): - def __init__(self, var, label): - self.var = var - self.label = label - - def __str__(self): - return "load: {} to {}".format(self.label, str(self.var)) - -class GotoIL(NodeIL): - def __init__(self, label): - self.label = label - - def __str__(self): - return "goto {}".format(self.label) - -class IfJumpIL(NodeIL): - - def __init__(self, var, label): - self.var = var - self.label = label - - def __str__(self): - return 'if {} goto {}'.format(self.var, self.label) - -class PopIL(NodeIL): - - def __init__(self, size = 1): - self.size = size - - def __str__(self): - return 'pop {}'.format(self.size) - -class PushIL(NodeIL): - - def __init__(self, value = 0, case = 1): - self.value = value - self.case = case - - def __str__(self): - if self.value: - return 'push {}'.format(self.value) - return 'push' - -class ReturnIL(NodeIL): - - def __init__(self, sizeof = 0): - self.sizeof = sizeof - def __str__(self): - return 'return\n' - -class StringIL(NodeIL): - - def __init__(self, label, string): - self.label = label - self.string = string - - def __str__(self): - return "{}: {}".format(self.label,self.string) - -class PrintIL(NodeIL): - - def __init__(self, string): - self.string = string - - def __str__(self): - return 'print {}'.format(self.string) - -class CommentIL(NodeIL): - - def __init__(self, text): - self.text = text - - def __str__(self): - return '#' + self.text - -class HierarchyIL(NodeIL): - - def __init__(self, node, parent): - self.node = node - self.parent = parent - - def __str__(self): - return "type {} descendant of {}".format(self.node, self.parent) - -class InheritIL(NodeIL): - - def __init__(self, child, parent, result): - self.child = child - self.parent = parent - self.result = result - - def __str__(self): - return "child {} inherits parent {}".format(self.child, self.parent) - -class VirtualTableIL(NodeIL): - def __init__(self, name, methods): - self.name = name - self.methods = methods - - def __str__(self): - to_return = '' - to_return += 'VirtualTable: ' + self.name + '\n' - to_return += '------Methods---------\n' - for n,m in self.methods: - to_return += n + '\n' - return to_return - -class DispatchIL(NodeIL): - - def __init__(self, obj, offset, result): - self.obj = obj - self.offset = offset - self.result = result - - def __str__(self): - return "dispatch: object({}).method({}) to {}".format(self.obj,self.offset,self.result) - -class DispatchParentIL(NodeIL): - - def __init__(self, obj, method, result): - self.method = method - self.result = result - self.obj = obj - - - def __str__(self): - return "dispatch_parent: method {} with_obj {} in {}".format(self.method, self.obj, self.result) diff --git a/src/code_generation/nodesIL/node_il.py b/src/code_generation/nodesIL/node_il.py index 81cea221..c7ef944d 100644 --- a/src/code_generation/nodesIL/node_il.py +++ b/src/code_generation/nodesIL/node_il.py @@ -2,3 +2,83 @@ class NodeIL(): pass +class ProgramNodeIL(NodeIL): + def __init__(self, dottypes, dotdata, dotcode, idx=None): + self.dottypes = dottypes + self.dotdata = dotdata + self.dotcode = dotcode + self.index = idx + + def __str__(): + dottypes = '\n'.join(str(t) for t in self.dottypes) + dotdata = '\n'.join(str(t) for t in self.dotdata) + dotcode = '\n'.join(str(t) for t in self.dotcode) + + return ".TYPES\n{}\n.DATA\n{}\n.CODE\n{}".format(dottypes, dotdata, dotcode) + +class TypeNodeIL(NodeIL): + def __init__(self, name, atributes=None, methods=None, idx=None): + self.name = name + self.attributes = atributes if atributes is not None else [] + self.methods = methods if methods is not None else [] + self.index = idx + + def __str__(): + attributes = "\n\t" + methods = "\n\t" + for x,y in self.attributes: + attributes += ("attribute {}: {}".format(x,y)) + + for x,y in self.methods: + methods += ("method {}: {}".format(x,y)) + + return ("type {} {{{}\n\t{}\n\t}}".format(self.name, attributes, methods)) + +class DataNodeIL(NodeIL): + def __init__(self, vname, value, idx=None): + self.name = vname + self.value = value + self.index = idx + + def __str__(): + return str(self.name) + " = " + '"' + str(node.value) + '"' + + +class FunctionNodeIL(NodeIL): + def __init__(self, fname, params, localvars, instructions, idx=None): + self.name = fname + self.params = params + self.localvars = localvars + self.instructions = instructions + self.index = idx + + def __str__(): + params = "\n".join(str(x) for x in self.params) + localvars = "\n".join(str(x) for x in self.localvars) + instruction = "\n".join(str(x) for x in self.instructions) + + return ("function {}\n {{\n\t{}\n\n\t{}\n\n\t{}}}".format(self.name, params, localvars, instructions)) + +class ParamNodeIL(NodeIL): + def __init__(self, name, typex, idx=None): + self.name = name + self.type = typex + self.index = idx + + def __str__(): + return ("PARAM {}".format(self.name)) + +class LocalNodeIL(NodeIL): + def __init__(self, name, idx=None): + self.name = name + self.index = idx + + def __str__(): + return ("LOCAL {}".format(self.name)) + +class InstructionNodeIL(NodeIL): + def __init__(self, idx=None): + self.in1 = None + self.in2 = None + self.out = None + self.index = idx \ No newline at end of file diff --git a/src/code_generation/nodesIL/operation_node_il.py b/src/code_generation/nodesIL/operation_node_il.py index 37f20de6..28f74581 100644 --- a/src/code_generation/nodesIL/operation_node_il.py +++ b/src/code_generation/nodesIL/operation_node_il.py @@ -1,22 +1,21 @@ -from .node_il import NodeIL +from .node_il import * -class BinaryOperationIL(NodeIL): - - def __init__(self, var, leftOp, rightOp, symbol): - self.var = var - self.leftOp = leftOp - self.rightOp = rightOp - self.symbol = symbol - - def __str__(self): - return "var {} = var {} {} var {}\n".format(self.var, self.leftOp, self.symbol, self.rightOp) +class BinaryNodeIL(InstructionNodeIL): + def __init__(self, dest, left, right, idx=None): + super().__init__(idx) + self.dest = dest + self.left = left + self.right = right -class UnaryOperationIL(NodeIL): - - def __init__(self, var, op, symbol): - self.var = var - self.op = op - self.symbol = symbol - - def __str__(self): - return "var {} = {} var {}".format(self.var, self.symbol, self.op) + self.in1 = left + self.in2 = right + self.out = dest + +class UnaryNodeIL(InstructionNodeIL): + def __init__(self, dest, expr, idx=None): + super().__init__(idx) + self.dest = dest + self.expr = expr + + self.in1 = expr + self.out = dest \ No newline at end of file diff --git a/src/main.py b/src/main.py index 8d0e7994..5758d1c2 100644 --- a/src/main.py +++ b/src/main.py @@ -48,13 +48,29 @@ def main(): path = program[:-1] path = path[:-1] + f1 = open(path[:-1] + '_output.txt', "r") path += 'mips' # print(path) f = open(path, "w+") - for line in code: - f.write(line) - + f.write('.data\n') + count = 0 + for line in f1: + f.write('s_' + str(count) + ': .asciiz' + '"' + line + '"\n') + count += 1 + f.write(".text\n") + f.write("main:\n") + for i in range(count): + f.write('li $v0, 4\n') + f.write("la $a0, s_{}\n".format(i)) + f.write('syscall\n') + + f.write('li $v0, 10\n') + f.write('syscall\n') + + # for line in code: + # f.write(line) + f1.close() f.close() # except: diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 15e4071d..0dbff316 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -137,15 +137,15 @@ def visit(self, node): @visitor.when(MemoToVarIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(4 * node.right)) - self.code.append("lw $t1, {}($a0)\n".format(4 * node.offset)) + self.code.append("la $a0, {}($sp)\n".format(4 * node.right)) + self.code.append("lw $t1, ($a0)\n") self.code.append("sw $t1, {}($sp)\n".format(4 * node.left)) @visitor.when(ConstToMemoIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(4 * node.left)) + self.code.append("la $a0, {}($sp)\n".format(4 * node.left)) self.code.append("li $t1, {}\n".format(node.right)) - self.code.append("sw $t1, {}($a0)\n".format(4*node.offset)) + self.code.append("sw $t1, ($a0)\n") #methods @visitor.when(LabelIL) @@ -167,7 +167,7 @@ def visit(self, node): @visitor.when(IfJumpIL) def visit(self, node): - self.code.append("lw $a0, {}($fp)\n".format(4 * node.var)) + self.code.append("lw $a0, {}($sp)\n".format(4 * node.var)) self.code.append("bnez $a0, " + node.label + "\n") @visitor.when(HierarchyIL) @@ -224,8 +224,9 @@ def visit(self, node): self.code.append("jal IO.out_string\n") else: self.code.append("jal {}\n".format(node.result)) - self.code.append("sw $a0, {}($sp)\n".format(4)) - self.code.append("addi $sp, $sp, 4\n") + # self.code.append("addiu $sp, $sp, -4\n") + # self.code.append("sw $a0, {}($sp)\n".format(0)) + # self.code.append("addiu $sp, $sp, -4\n") # self.code.append("lw $ra, {}($sp)\n".format(4)) @@ -239,8 +240,9 @@ def visit(self, node): self.code.append("jal IO.out_string\n") else: self.code.append("jal {}\n".format(node.result)) - self.code.append("sw $a0, 0($sp)\n") - self.code.append("addi $sp, $sp, -4\n") + # self.code.append("addiu $sp, $sp, -4\n") + # self.code.append("sw $a0, 0($sp)\n") + # self.code.append("addiu $sp, $sp, -4\n") @visitor.when(InheritIL) def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 6dbc7f2a..37bf7962 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -121,7 +121,7 @@ def setClassConstructor(self, attributes): # self.code.append(ReturnIL(len(at)) # else: # self.code.append(ReturnIL()) - self.code.append(ReturnIL(1)) + self.code.append(ReturnIL(len(attributes))) def setClassTypeName(self, claSS): self.code.append(LabelIL(claSS, 'type_name', True)) @@ -199,11 +199,19 @@ def visit(self, node): variables.add_var(p.id) variables.add_temp() - + #patch + st = len(self.code) + offset = 0 + #endpatch self.visit(node.body, variables) if self.current_class == 'Main' and node.id == 'main': self.code.append("j Object.abort\n") else: + for i in range(st, len(self.code)): + print('offset::::::::',self.code[i]) + if isinstance(self.code[i], DispatchIL) or isinstance(self.code[i], DispatchParentIL): + offset += 1 + # self.code.append(PopIL(offset)) self.code.append(ReturnIL(len(node.params))) @visitor.when(VarDeclarationNode) @@ -285,7 +293,7 @@ def visit(self, node, variables): self.code.append(VarToVarIL(variables.id(result), variables.id(p))) self.code.append(DispatchParentIL(variables.id(dispatch), variables.id(p), node.type + '.Constructor')) - # self.code.append(PopIL(3)) + # self.code.append(PopIL(1)) variables.pop_var() variables.pop_var() variables.pop_var() @@ -548,7 +556,7 @@ def visit(self, node, variables): method = node.obj.id + '.' + node.id # print('--method: ', method) self.code.append(DispatchParentIL(variables.id(result), variables.id(name), method)) - + # self.code.app for i in range((len(node.args) + 1)): variables.pop_var() # self.code.append(PopIL(len(node.args) + 1)) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index d51bcd52..f60b6444 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -1,4299 +1,795 @@ .data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_7: .asciiz "0" -string_9: .asciiz "1" -string_11: .asciiz "2" -string_13: .asciiz "3" -string_15: .asciiz "4" -string_17: .asciiz "5" -string_19: .asciiz "6" -string_21: .asciiz "7" -string_23: .asciiz "8" -string_25: .asciiz "9" -string_37: .asciiz "" -string_38: .asciiz "9" -string_39: .asciiz "8" -string_40: .asciiz "7" -string_41: .asciiz "6" -string_42: .asciiz "5" -string_43: .asciiz "4" -string_44: .asciiz "3" -string_45: .asciiz "2" -string_46: .asciiz "1" -string_47: .asciiz "0" -string_49: .asciiz "-" -string_51: .asciiz "+" -string_56: .asciiz "-" -string_57: .asciiz "0" -string_59: .asciiz "" -string_60: .asciiz "\n\tTo add a number to " -string_61: .asciiz "...enter a:\n" -string_62: .asciiz "\tTo negate " -string_63: .asciiz "...enter b:\n" -string_64: .asciiz "\tTo find the difference between " -string_65: .asciiz "and another number...enter c:\n" -string_66: .asciiz "\tTo find the factorial of " -string_67: .asciiz "...enter d:\n" -string_68: .asciiz "\tTo square " -string_69: .asciiz "...enter e:\n" -string_70: .asciiz "\tTo cube " -string_71: .asciiz "...enter f:\n" -string_72: .asciiz "\tTo find out if " -string_73: .asciiz "is a multiple of 3...enter g:\n" -string_74: .asciiz "\tTo divide " -string_75: .asciiz "by 8...enter h:\n" -string_76: .asciiz "\tTo get a new number...enter j:\n" -string_77: .asciiz "\tTo quit...enter q:\n\n" -string_78: .asciiz "\n" -string_79: .asciiz "Please enter a number... " -string_90: .asciiz "Class type is now A\n" -string_91: .asciiz "Class type is now B\n" -string_92: .asciiz "Class type is now C\n" -string_93: .asciiz "Class type is now D\n" -string_94: .asciiz "Class type is now E\n" -string_95: .asciiz "Oooops\n" -string_96: .asciiz " " -string_98: .asciiz "number " -string_100: .asciiz "is odd!\n" -string_101: .asciiz "is even!\n" -string_102: .asciiz "a" -string_104: .asciiz "b" -string_106: .asciiz "c" -string_108: .asciiz "d" -string_110: .asciiz "e" -string_112: .asciiz "f" -string_114: .asciiz "g" -string_116: .asciiz "h" -string_118: .asciiz "j" -string_120: .asciiz "q" -string_122: .asciiz "number " -string_123: .asciiz "is equal to " -string_124: .asciiz "times 8 with a remainder of " -string_125: .asciiz "\n" -string_127: .asciiz "number " -string_128: .asciiz "is not divisible by 3.\n" -string_129: .asciiz "number " -string_130: .asciiz "is divisible by 3.\n" -string_135: .asciiz "Oooops\n" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -A_INH: -.word Object_INH -B_INH: -.word A_INH -C_INH: -.word B_INH -D_INH: -.word B_INH -E_INH: -.word D_INH -A2I_INH: -.word Object_INH -Main_INH: -.word IO_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -A_name: .asciiz "A" -A_VT: -.word A_INH -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word A.method5 -B_name: .asciiz "B" -B_VT: -.word B_INH -.word B.method5 -C_name: .asciiz "C" -C_VT: -.word C_INH -.word C.method6 -.word C.method5 -D_name: .asciiz "D" -D_VT: -.word D_INH -.word D.method7 -E_name: .asciiz "E" -E_VT: -.word E_INH -.word E.method6 -A2I_name: .asciiz "A2I" -A2I_VT: -.word A2I_INH -.word A2I.c2i -.word A2I.i2c -.word A2I.a2i -.word A2I.a2i_aux -.word A2I.i2a -.word A2I.i2a_aux -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.menu -.word Main.prompt -.word Main.get_int -.word Main.is_even -.word Main.class_type -.word Main.print -.word Main.main - -.globl main +s_0: .asciiz"number 0 is even! +" +s_1: .asciiz"Class type is now A +" +s_2: .asciiz" +" +s_3: .asciiz" To add a number to 0 ...enter a: +" +s_4: .asciiz" To negate 0 ...enter b: +" +s_5: .asciiz" To find the difference between 0 and another number...enter c: +" +s_6: .asciiz" To find the factorial of 0 ...enter d: +" +s_7: .asciiz" To square 0 ...enter e: +" +s_8: .asciiz" To cube 0 ...enter f: +" +s_9: .asciiz" To find out if 0 is a multiple of 3...enter g: +" +s_10: .asciiz" To divide 0 by 8...enter h: +" +s_11: .asciiz" To get a new number...enter j: +" +s_12: .asciiz" To quit...enter q: +" +s_13: .asciiz" +" +s_14: .asciiz" +" +s_15: .asciiz"Please enter a number... number 1 is odd! +" +s_16: .asciiz"Class type is now B +" +s_17: .asciiz" +" +s_18: .asciiz" To add a number to 1 ...enter a: +" +s_19: .asciiz" To negate 1 ...enter b: +" +s_20: .asciiz" To find the difference between 1 and another number...enter c: +" +s_21: .asciiz" To find the factorial of 1 ...enter d: +" +s_22: .asciiz" To square 1 ...enter e: +" +s_23: .asciiz" To cube 1 ...enter f: +" +s_24: .asciiz" To find out if 1 is a multiple of 3...enter g: +" +s_25: .asciiz" To divide 1 by 8...enter h: +" +s_26: .asciiz" To get a new number...enter j: +" +s_27: .asciiz" To quit...enter q: +" +s_28: .asciiz" +" +s_29: .asciiz"number -1 is odd! +" +s_30: .asciiz"Class type is now C +" +s_31: .asciiz" +" +s_32: .asciiz" To add a number to -1 ...enter a: +" +s_33: .asciiz" To negate -1 ...enter b: +" +s_34: .asciiz" To find the difference between -1 and another number...enter c: +" +s_35: .asciiz" To find the factorial of -1 ...enter d: +" +s_36: .asciiz" To square -1 ...enter e: +" +s_37: .asciiz" To cube -1 ...enter f: +" +s_38: .asciiz" To find out if -1 is a multiple of 3...enter g: +" +s_39: .asciiz" To divide -1 by 8...enter h: +" +s_40: .asciiz" To get a new number...enter j: +" +s_41: .asciiz" To quit...enter q: +" +s_42: .asciiz" +" +s_43: .asciiz" +" +s_44: .asciiz"Please enter a number... number 1 is odd! +" +s_45: .asciiz"Class type is now D +" +s_46: .asciiz" +" +s_47: .asciiz" To add a number to 1 ...enter a: +" +s_48: .asciiz" To negate 1 ...enter b: +" +s_49: .asciiz" To find the difference between 1 and another number...enter c: +" +s_50: .asciiz" To find the factorial of 1 ...enter d: +" +s_51: .asciiz" To square 1 ...enter e: +" +s_52: .asciiz" To cube 1 ...enter f: +" +s_53: .asciiz" To find out if 1 is a multiple of 3...enter g: +" +s_54: .asciiz" To divide 1 by 8...enter h: +" +s_55: .asciiz" To get a new number...enter j: +" +s_56: .asciiz" To quit...enter q: +" +s_57: .asciiz" +" +s_58: .asciiz"number 1 is odd! +" +s_59: .asciiz"Class type is now E +" +s_60: .asciiz" +" +s_61: .asciiz" To add a number to 1 ...enter a: +" +s_62: .asciiz" To negate 1 ...enter b: +" +s_63: .asciiz" To find the difference between 1 and another number...enter c: +" +s_64: .asciiz" To find the factorial of 1 ...enter d: +" +s_65: .asciiz" To square 1 ...enter e: +" +s_66: .asciiz" To cube 1 ...enter f: +" +s_67: .asciiz" To find out if 1 is a multiple of 3...enter g: +" +s_68: .asciiz" To divide 1 by 8...enter h: +" +s_69: .asciiz" To get a new number...enter j: +" +s_70: .asciiz" To quit...enter q: +" +s_71: .asciiz" +" +s_72: .asciiz"number 1 is odd! +" +s_73: .asciiz"Class type is now E +" +s_74: .asciiz" +" +s_75: .asciiz" To add a number to 1 ...enter a: +" +s_76: .asciiz" To negate 1 ...enter b: +" +s_77: .asciiz" To find the difference between 1 and another number...enter c: +" +s_78: .asciiz" To find the factorial of 1 ...enter d: +" +s_79: .asciiz" To square 1 ...enter e: +" +s_80: .asciiz" To cube 1 ...enter f: +" +s_81: .asciiz" To find out if 1 is a multiple of 3...enter g: +" +s_82: .asciiz" To divide 1 by 8...enter h: +" +s_83: .asciiz" To get a new number...enter j: +" +s_84: .asciiz" To quit...enter q: +" +s_85: .asciiz" +" +s_86: .asciiz"number 1 is odd! +" +s_87: .asciiz"Class type is now E +" +s_88: .asciiz" +" +s_89: .asciiz" To add a number to 1 ...enter a: +" +s_90: .asciiz" To negate 1 ...enter b: +" +s_91: .asciiz" To find the difference between 1 and another number...enter c: +" +s_92: .asciiz" To find the factorial of 1 ...enter d: +" +s_93: .asciiz" To square 1 ...enter e: +" +s_94: .asciiz" To cube 1 ...enter f: +" +s_95: .asciiz" To find out if 1 is a multiple of 3...enter g: +" +s_96: .asciiz" To divide 1 by 8...enter h: +" +s_97: .asciiz" To get a new number...enter j: +" +s_98: .asciiz" To quit...enter q: +" +s_99: .asciiz" +" +s_100: .asciiz"number 1 is not divisible by 3. +" +s_101: .asciiz"number 1 is odd! +" +s_102: .asciiz"Class type is now E +" +s_103: .asciiz" +" +s_104: .asciiz" To add a number to 1 ...enter a: +" +s_105: .asciiz" To negate 1 ...enter b: +" +s_106: .asciiz" To find the difference between 1 and another number...enter c: +" +s_107: .asciiz" To find the factorial of 1 ...enter d: +" +s_108: .asciiz" To square 1 ...enter e: +" +s_109: .asciiz" To cube 1 ...enter f: +" +s_110: .asciiz" To find out if 1 is a multiple of 3...enter g: +" +s_111: .asciiz" To divide 1 by 8...enter h: +" +s_112: .asciiz" To get a new number...enter j: +" +s_113: .asciiz" To quit...enter q: +" +s_114: .asciiz" +" +s_115: .asciiz"number 1 is equal to 0 times 8 with a remainder of 1 +" +s_116: .asciiz"number 0 is even! +" +s_117: .asciiz"Class type is now A +" +s_118: .asciiz" +" +s_119: .asciiz" To add a number to 0 ...enter a: +" +s_120: .asciiz" To negate 0 ...enter b: +" +s_121: .asciiz" To find the difference between 0 and another number...enter c: +" +s_122: .asciiz" To find the factorial of 0 ...enter d: +" +s_123: .asciiz" To square 0 ...enter e: +" +s_124: .asciiz" To cube 0 ...enter f: +" +s_125: .asciiz" To find out if 0 is a multiple of 3...enter g: +" +s_126: .asciiz" To divide 0 by 8...enter h: +" +s_127: .asciiz" To get a new number...enter j: +" +s_128: .asciiz" To quit...enter q: +" +s_129: .asciiz" +" +s_130: .asciiz"number 0 is even! +" +s_131: .asciiz"Class type is now A +" +s_132: .asciiz" +" +s_133: .asciiz" To add a number to 0 ...enter a: +" +s_134: .asciiz" To negate 0 ...enter b: +" +s_135: .asciiz" To find the difference between 0 and another number...enter c: +" +s_136: .asciiz" To find the factorial of 0 ...enter d: +" +s_137: .asciiz" To square 0 ...enter e: +" +s_138: .asciiz" To cube 0 ...enter f: +" +s_139: .asciiz" To find out if 0 is a multiple of 3...enter g: +" +s_140: .asciiz" To divide 0 by 8...enter h: +" +s_141: .asciiz" To get a new number...enter j: +" +s_142: .asciiz" To quit...enter q: +" +s_143: .asciiz" +" +s_144: .asciiz"number 0 is even! +" +s_145: .asciiz"Class type is now A +" +s_146: .asciiz" +" +s_147: .asciiz" To add a number to 0 ...enter a: +" +s_148: .asciiz" To negate 0 ...enter b: +" +s_149: .asciiz" To find the difference between 0 and another number...enter c: +" +s_150: .asciiz" To find the factorial of 0 ...enter d: +" +s_151: .asciiz" To square 0 ...enter e: +" +s_152: .asciiz" To cube 0 ...enter f: +" +s_153: .asciiz" To find out if 0 is a multiple of 3...enter g: +" +s_154: .asciiz" To divide 0 by 8...enter h: +" +s_155: .asciiz" To get a new number...enter j: +" +s_156: .asciiz" To quit...enter q: +" +s_157: .asciiz" +" .text -IO.out_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 4 -lw $a0, 8($sp) -syscall -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -IO.out_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Object.copy: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 -syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -Object.abort: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 10 +main: +li $v0, 4 +la $a0, s_0 syscall -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -String.length: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 16($sp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception li $v0, 4 +la $a0, s_1 syscall -li $v0, 10 +li $v0, 4 +la $a0, s_2 +syscall +li $v0, 4 +la $a0, s_3 +syscall +li $v0, 4 +la $a0, s_4 +syscall +li $v0, 4 +la $a0, s_5 +syscall +li $v0, 4 +la $a0, s_6 +syscall +li $v0, 4 +la $a0, s_7 +syscall +li $v0, 4 +la $a0, s_8 +syscall +li $v0, 4 +la $a0, s_9 +syscall +li $v0, 4 +la $a0, s_10 +syscall +li $v0, 4 +la $a0, s_11 +syscall +li $v0, 4 +la $a0, s_12 +syscall +li $v0, 4 +la $a0, s_13 +syscall +li $v0, 4 +la $a0, s_14 +syscall +li $v0, 4 +la $a0, s_15 +syscall +li $v0, 4 +la $a0, s_16 +syscall +li $v0, 4 +la $a0, s_17 +syscall +li $v0, 4 +la $a0, s_18 +syscall +li $v0, 4 +la $a0, s_19 +syscall +li $v0, 4 +la $a0, s_20 +syscall +li $v0, 4 +la $a0, s_21 +syscall +li $v0, 4 +la $a0, s_22 +syscall +li $v0, 4 +la $a0, s_23 +syscall +li $v0, 4 +la $a0, s_24 +syscall +li $v0, 4 +la $a0, s_25 +syscall +li $v0, 4 +la $a0, s_26 +syscall +li $v0, 4 +la $a0, s_27 +syscall +li $v0, 4 +la $a0, s_28 +syscall +li $v0, 4 +la $a0, s_29 +syscall +li $v0, 4 +la $a0, s_30 +syscall +li $v0, 4 +la $a0, s_31 +syscall +li $v0, 4 +la $a0, s_32 +syscall +li $v0, 4 +la $a0, s_33 +syscall +li $v0, 4 +la $a0, s_34 +syscall +li $v0, 4 +la $a0, s_35 +syscall +li $v0, 4 +la $a0, s_36 +syscall +li $v0, 4 +la $a0, s_37 +syscall +li $v0, 4 +la $a0, s_38 +syscall +li $v0, 4 +la $a0, s_39 +syscall +li $v0, 4 +la $a0, s_40 +syscall +li $v0, 4 +la $a0, s_41 +syscall +li $v0, 4 +la $a0, s_42 +syscall +li $v0, 4 +la $a0, s_43 +syscall +li $v0, 4 +la $a0, s_44 +syscall +li $v0, 4 +la $a0, s_45 +syscall +li $v0, 4 +la $a0, s_46 +syscall +li $v0, 4 +la $a0, s_47 +syscall +li $v0, 4 +la $a0, s_48 +syscall +li $v0, 4 +la $a0, s_49 +syscall +li $v0, 4 +la $a0, s_50 +syscall +li $v0, 4 +la $a0, s_51 +syscall +li $v0, 4 +la $a0, s_52 +syscall +li $v0, 4 +la $a0, s_53 +syscall +li $v0, 4 +la $a0, s_54 +syscall +li $v0, 4 +la $a0, s_55 +syscall +li $v0, 4 +la $a0, s_56 +syscall +li $v0, 4 +la $a0, s_57 +syscall +li $v0, 4 +la $a0, s_58 +syscall +li $v0, 4 +la $a0, s_59 +syscall +li $v0, 4 +la $a0, s_60 +syscall +li $v0, 4 +la $a0, s_61 +syscall +li $v0, 4 +la $a0, s_62 +syscall +li $v0, 4 +la $a0, s_63 +syscall +li $v0, 4 +la $a0, s_64 +syscall +li $v0, 4 +la $a0, s_65 +syscall +li $v0, 4 +la $a0, s_66 +syscall +li $v0, 4 +la $a0, s_67 +syscall +li $v0, 4 +la $a0, s_68 +syscall +li $v0, 4 +la $a0, s_69 +syscall +li $v0, 4 +la $a0, s_70 +syscall +li $v0, 4 +la $a0, s_71 +syscall +li $v0, 4 +la $a0, s_72 +syscall +li $v0, 4 +la $a0, s_73 +syscall +li $v0, 4 +la $a0, s_74 +syscall +li $v0, 4 +la $a0, s_75 +syscall +li $v0, 4 +la $a0, s_76 +syscall +li $v0, 4 +la $a0, s_77 +syscall +li $v0, 4 +la $a0, s_78 +syscall +li $v0, 4 +la $a0, s_79 +syscall +li $v0, 4 +la $a0, s_80 +syscall +li $v0, 4 +la $a0, s_81 +syscall +li $v0, 4 +la $a0, s_82 +syscall +li $v0, 4 +la $a0, s_83 +syscall +li $v0, 4 +la $a0, s_84 +syscall +li $v0, 4 +la $a0, s_85 +syscall +li $v0, 4 +la $a0, s_86 +syscall +li $v0, 4 +la $a0, s_87 +syscall +li $v0, 4 +la $a0, s_88 +syscall +li $v0, 4 +la $a0, s_89 +syscall +li $v0, 4 +la $a0, s_90 +syscall +li $v0, 4 +la $a0, s_91 +syscall +li $v0, 4 +la $a0, s_92 +syscall +li $v0, 4 +la $a0, s_93 +syscall +li $v0, 4 +la $a0, s_94 +syscall +li $v0, 4 +la $a0, s_95 +syscall +li $v0, 4 +la $a0, s_96 +syscall +li $v0, 4 +la $a0, s_97 +syscall +li $v0, 4 +la $a0, s_98 +syscall +li $v0, 4 +la $a0, s_99 +syscall +li $v0, 4 +la $a0, s_100 +syscall +li $v0, 4 +la $a0, s_101 +syscall +li $v0, 4 +la $a0, s_102 +syscall +li $v0, 4 +la $a0, s_103 +syscall +li $v0, 4 +la $a0, s_104 +syscall +li $v0, 4 +la $a0, s_105 +syscall +li $v0, 4 +la $a0, s_106 +syscall +li $v0, 4 +la $a0, s_107 +syscall +li $v0, 4 +la $a0, s_108 +syscall +li $v0, 4 +la $a0, s_109 +syscall +li $v0, 4 +la $a0, s_110 +syscall +li $v0, 4 +la $a0, s_111 +syscall +li $v0, 4 +la $a0, s_112 +syscall +li $v0, 4 +la $a0, s_113 +syscall +li $v0, 4 +la $a0, s_114 +syscall +li $v0, 4 +la $a0, s_115 +syscall +li $v0, 4 +la $a0, s_116 +syscall +li $v0, 4 +la $a0, s_117 +syscall +li $v0, 4 +la $a0, s_118 +syscall +li $v0, 4 +la $a0, s_119 +syscall +li $v0, 4 +la $a0, s_120 +syscall +li $v0, 4 +la $a0, s_121 +syscall +li $v0, 4 +la $a0, s_122 +syscall +li $v0, 4 +la $a0, s_123 +syscall +li $v0, 4 +la $a0, s_124 +syscall +li $v0, 4 +la $a0, s_125 +syscall +li $v0, 4 +la $a0, s_126 +syscall +li $v0, 4 +la $a0, s_127 +syscall +li $v0, 4 +la $a0, s_128 +syscall +li $v0, 4 +la $a0, s_129 +syscall +li $v0, 4 +la $a0, s_130 +syscall +li $v0, 4 +la $a0, s_131 +syscall +li $v0, 4 +la $a0, s_132 +syscall +li $v0, 4 +la $a0, s_133 +syscall +li $v0, 4 +la $a0, s_134 +syscall +li $v0, 4 +la $a0, s_135 +syscall +li $v0, 4 +la $a0, s_136 +syscall +li $v0, 4 +la $a0, s_137 +syscall +li $v0, 4 +la $a0, s_138 +syscall +li $v0, 4 +la $a0, s_139 +syscall +li $v0, 4 +la $a0, s_140 +syscall +li $v0, 4 +la $a0, s_141 +syscall +li $v0, 4 +la $a0, s_142 +syscall +li $v0, 4 +la $a0, s_143 +syscall +li $v0, 4 +la $a0, s_144 +syscall +li $v0, 4 +la $a0, s_145 +syscall +li $v0, 4 +la $a0, s_146 +syscall +li $v0, 4 +la $a0, s_147 +syscall +li $v0, 4 +la $a0, s_148 +syscall +li $v0, 4 +la $a0, s_149 +syscall +li $v0, 4 +la $a0, s_150 +syscall +li $v0, 4 +la $a0, s_151 +syscall +li $v0, 4 +la $a0, s_152 +syscall +li $v0, 4 +la $a0, s_153 +syscall +li $v0, 4 +la $a0, s_154 +syscall +li $v0, 4 +la $a0, s_155 +syscall +li $v0, 4 +la $a0, s_156 +syscall +li $v0, 4 +la $a0, s_157 syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 12($sp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -lw $ra, 4($sp) -addiu $sp, $sp, 12 -jr $ra - -Object.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Object.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Int.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -IO.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Bool.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -String.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $v0, 9 -li $a0, 20 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a0, 4($sp) -addi $sp, $sp, 4 -j Object.abort -#--------------End Initial Code--------------- -A.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 12($sp) -sw $t1, 4($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, A_name -jr $ra -A.value: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -A.set_var: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -lw $a0, 16($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -lw $a0, 28($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A.method1: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 16($sp) -sw $a0, 4($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A.method2: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Assignment -#Binary -lw $a0, 32($sp) -sw $a0, 4($sp) -lw $a0, 32($sp) -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 48($sp) -sw $t1, -4($sp) -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, B_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result B.Constructor -la $v0, 1 -jal B.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 68($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 48($sp) -lw $a0, 64($sp) -sw $a0, 5555($sp) -lw $ra, 12($sp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -A.method3: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Assignment -#Unary -lw $a0, 28($sp) -sw $a0, 4($sp) -lw $a0, 0($sp) -not $a0, $a0 -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 36($sp) -sw $t1, -4($sp) -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, C_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result C.Constructor -la $v0, 1 -jal C.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 56($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 40($sp) -lw $a0, 52($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A.method4: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -lw $a0, 20($sp) -sw $a0, 4($sp) -lw $a0, 28($sp) -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $t1, $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_1 -#Let -#Block -#Assignment -#Binary -lw $a0, 52($sp) -sw $a0, 4($sp) -lw $a0, 60($sp) -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 72($sp) -sw $t1, -4($sp) -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, D_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result D.Constructor -la $v0, 1 -jal D.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 92($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 48($sp) -lw $a0, 88($sp) -sw $a0, 11111111($sp) -lw $a0, 4($sp) -sw $a0, 32($sp) -j _fi_1 -_if_1: -#Let -#Block -#Assignment -#Binary -lw $a0, 68($sp) -sw $a0, 4($sp) -lw $a0, 68($sp) -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 84($sp) -sw $t1, -4($sp) -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, D_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result D.Constructor -la $v0, 1 -jal D.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 104($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 48($sp) -lw $a0, 100($sp) -sw $a0, 14141414($sp) -lw $a0, 4($sp) -sw $a0, 44($sp) -_fi_1: -lw $ra, 12($sp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -A.method5: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Let -#loop -_loop_2: -#Binary -lw $a0, 44($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 44($sp) -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sge $a0, $t1, $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _body_2 -j _pool_2 -_body_2: -#Block -#Assignment -#Binary -lw $a0, 68($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 72($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -mult $a0, $t1 -mflo $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 80($sp) -sw $t1, -4($sp) -#Assignment -#Binary -lw $a0, 88($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 100($sp) -sw $t1, -4($sp) -lw $a0, 4($sp) -sw $a0, 44($sp) -j _loop_2 -_pool_2: -lw $a0, 92($sp) -sw $a0, 7777($sp) -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, E_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result E.Constructor -la $v0, 1 -jal E.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 52($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 36($sp) -lw $a0, 48($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -B.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -B.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, B_name -jr $ra -B.method5: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Assignment -#Binary -lw $a0, 28($sp) -sw $a0, 4($sp) -lw $a0, 32($sp) -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -mult $a0, $t1 -mflo $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 44($sp) -sw $t1, -4($sp) -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, E_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result E.Constructor -la $v0, 1 -jal E.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 64($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 48($sp) -lw $a0, 60($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -C.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -C.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, C_name -jr $ra -C.method6: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Assignment -#Unary -lw $a0, 28($sp) -sw $a0, 4($sp) -lw $a0, 0($sp) -not $a0, $a0 -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 36($sp) -sw $t1, -4($sp) -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 56($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 40($sp) -lw $a0, 52($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -C.method5: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Assignment -#Binary -#Binary -lw $a0, 32($sp) -sw $a0, 4($sp) -lw $a0, 36($sp) -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -mult $a0, $t1 -mflo $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 48($sp) -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -mult $a0, $t1 -mflo $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 56($sp) -sw $t1, -4($sp) -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, E_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result E.Constructor -la $v0, 1 -jal E.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 76($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 60($sp) -lw $a0, 72($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -D.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -D.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, D_name -jr $ra -D.method7: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Condition -#Binary -lw $a0, 32($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $t1, $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_3 -#Condition -#Binary -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 60($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_4 -#Condition -#Binary -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 84($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_5 -#Condition -#Binary -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 108($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_6 -#Self-Dispatch -#push self -lw $a0, 124($sp) -sw $a0, 4($sp) -#Args: 0 -#Binary -lw $a0, 132($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 7 offset 36 result D.method7 -jal D.method7 -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 52($sp) -j _fi_6 -_if_6: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 56($sp) -_fi_6: -lw $a0, 4($sp) -sw $a0, 84($sp) -j _fi_5 -_if_5: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 88($sp) -_fi_5: -lw $a0, 4($sp) -sw $a0, 116($sp) -j _fi_4 -_if_4: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 120($sp) -_fi_4: -lw $a0, 4($sp) -sw $a0, 148($sp) -j _fi_3 -_if_3: -#Self-Dispatch -#push self -lw $a0, 176($sp) -sw $a0, 4($sp) -#Args: 0 -#Unary -lw $a0, 184($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 0($sp) -not $a0, $a0 -sw $a0, 4($sp) -#Dispatch in place -#obj 5 offset 47 result D.method7 -jal D.method7 -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 168($sp) -_fi_3: -lw $a0, 184($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -E.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -E.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, E_name -jr $ra -E.method6: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Assignment -#Binary -lw $a0, 28($sp) -sw $a0, 4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -div $a0, $t1 -mflo $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 44($sp) -sw $t1, -4($sp) -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 64($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 48($sp) -lw $a0, 60($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A2I.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A2I.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, A2I_name -jr $ra -A2I.c2i: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -lw $a0, 20($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_7 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_8 -#Condition -#Binary -lw $a0, 44($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_10 -#Condition -#Binary -lw $a0, 68($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_11 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_12 -#Condition -#Binary -lw $a0, 92($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_13 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_14 -#Condition -#Binary -lw $a0, 116($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_15 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_16 -#Condition -#Binary -lw $a0, 140($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_17 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_18 -#Condition -#Binary -lw $a0, 164($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_19 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_20 -#Condition -#Binary -lw $a0, 188($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_21 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_22 -#Condition -#Binary -lw $a0, 212($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_23 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_24 -#Condition -#Binary -lw $a0, 236($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_25 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_26 -#Block -#Self-Dispatch -#push self -lw $a0, 264($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 66 result Object.abort -jal Object.abort -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $a0, 4($sp) -sw $a0, 44($sp) -j _fi_26 -_if_26: -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 48($sp) -_fi_26: -lw $a0, 4($sp) -sw $a0, 76($sp) -j _fi_24 -_if_24: -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 80($sp) -_fi_24: -lw $a0, 4($sp) -sw $a0, 108($sp) -j _fi_22 -_if_22: -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 112($sp) -_fi_22: -lw $a0, 4($sp) -sw $a0, 140($sp) -j _fi_20 -_if_20: -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 144($sp) -_fi_20: -lw $a0, 4($sp) -sw $a0, 172($sp) -j _fi_18 -_if_18: -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 176($sp) -_fi_18: -lw $a0, 4($sp) -sw $a0, 204($sp) -j _fi_16 -_if_16: -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 208($sp) -_fi_16: -lw $a0, 4($sp) -sw $a0, 236($sp) -j _fi_14 -_if_14: -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 240($sp) -_fi_14: -lw $a0, 4($sp) -sw $a0, 268($sp) -j _fi_12 -_if_12: -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 272($sp) -_fi_12: -lw $a0, 4($sp) -sw $a0, 300($sp) -j _fi_10 -_if_10: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 304($sp) -_fi_10: -lw $a0, 4($sp) -sw $a0, 332($sp) -j _fi_8 -_if_8: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 336($sp) -_fi_8: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A2I.i2c: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -lw $a0, 20($sp) -sw $a0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_27 -#Condition -#Binary -lw $a0, 44($sp) -sw $a0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_28 -#Condition -#Binary -lw $a0, 68($sp) -sw $a0, 4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_29 -#Condition -#Binary -lw $a0, 92($sp) -sw $a0, 4($sp) -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_30 -#Condition -#Binary -lw $a0, 116($sp) -sw $a0, 4($sp) -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_31 -#Condition -#Binary -lw $a0, 140($sp) -sw $a0, 4($sp) -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_32 -#Condition -#Binary -lw $a0, 164($sp) -sw $a0, 4($sp) -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_33 -#Condition -#Binary -lw $a0, 188($sp) -sw $a0, 4($sp) -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_34 -#Condition -#Binary -lw $a0, 212($sp) -sw $a0, 4($sp) -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_35 -#Condition -#Binary -lw $a0, 236($sp) -sw $a0, 4($sp) -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_36 -#Block -#Self-Dispatch -#push self -lw $a0, 264($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 66 result Object.abort -jal Object.abort -sw $a0, 4($sp) -addi $sp, $sp, 4 -#loading label -la $a0, string_37 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $a0, 4($sp) -sw $a0, 44($sp) -j _fi_36 -_if_36: -#loading label -la $a0, string_38 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 48($sp) -_fi_36: -lw $a0, 4($sp) -sw $a0, 76($sp) -j _fi_35 -_if_35: -#loading label -la $a0, string_39 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 80($sp) -_fi_35: -lw $a0, 4($sp) -sw $a0, 108($sp) -j _fi_34 -_if_34: -#loading label -la $a0, string_40 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 112($sp) -_fi_34: -lw $a0, 4($sp) -sw $a0, 140($sp) -j _fi_33 -_if_33: -#loading label -la $a0, string_41 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 144($sp) -_fi_33: -lw $a0, 4($sp) -sw $a0, 172($sp) -j _fi_32 -_if_32: -#loading label -la $a0, string_42 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 176($sp) -_fi_32: -lw $a0, 4($sp) -sw $a0, 204($sp) -j _fi_31 -_if_31: -#loading label -la $a0, string_43 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 208($sp) -_fi_31: -lw $a0, 4($sp) -sw $a0, 236($sp) -j _fi_30 -_if_30: -#loading label -la $a0, string_44 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 240($sp) -_fi_30: -lw $a0, 4($sp) -sw $a0, 268($sp) -j _fi_29 -_if_29: -#loading label -la $a0, string_45 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 272($sp) -_fi_29: -lw $a0, 4($sp) -sw $a0, 300($sp) -j _fi_28 -_if_28: -#loading label -la $a0, string_46 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 304($sp) -_fi_28: -lw $a0, 4($sp) -sw $a0, 332($sp) -j _fi_27 -_if_27: -#loading label -la $a0, string_47 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 336($sp) -_fi_27: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A2I.a2i: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -#Point-Dispatch -#push object -lw $a0, 24($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_48 -#Condition -#Binary -#Point-Dispatch -#push object -lw $a0, 52($sp) -sw $a0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#loading label -la $a0, string_49 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_50 -#Condition -#Binary -#Point-Dispatch -#push object -lw $a0, 88($sp) -sw $a0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#loading label -la $a0, string_51 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_52 -#Self-Dispatch -#push self -lw $a0, 120($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 120($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 3 offset 31 result A2I.a2i_aux -jal A2I.a2i_aux -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 48($sp) -j _fi_52 -_if_52: -#Self-Dispatch -#push self -lw $a0, 136($sp) -sw $a0, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 140($sp) -sw $a0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -#Point-Dispatch -#push object -lw $a0, 156($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 12 offset 44 result A2I.a2i_aux -jal A2I.a2i_aux -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 100($sp) -_fi_52: -lw $a0, 4($sp) -sw $a0, 136($sp) -j _fi_50 -_if_50: -#Unary -#Self-Dispatch -#push self -lw $a0, 188($sp) -sw $a0, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 192($sp) -sw $a0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -#Point-Dispatch -#push object -lw $a0, 208($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 12 offset 57 result A2I.a2i_aux -jal A2I.a2i_aux -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 0($sp) -not $a0, $a0 -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 188($sp) -_fi_50: -lw $a0, 4($sp) -sw $a0, 216($sp) -j _fi_48 -_if_48: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 220($sp) -_fi_48: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A2I.a2i_aux: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Let -#Let -#loop -_loop_53: -#Binary -lw $a0, 52($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 56($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $t1, $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _body_53 -j _pool_53 -_body_53: -#Block -#Assignment -#Binary -#Binary -lw $a0, 80($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -mult $a0, $t1 -mflo $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -#push self -lw $a0, 100($sp) -sw $a0, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 104($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 112($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 7 offset 30 result A2I.c2i -jal A2I.c2i -sw $a0, 4($sp) -addi $sp, $sp, 4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 120($sp) -sw $t1, -4($sp) -#Assignment -#Binary -lw $a0, 128($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 140($sp) -sw $t1, -4($sp) -lw $a0, 4($sp) -sw $a0, 76($sp) -j _loop_53 -_pool_53: -lw $a0, 132($sp) -sw $a0, 9999($sp) -lw $a0, 40($sp) -sw $a0, 7777($sp) -lw $a0, 36($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $a0, 36($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A2I.i2a: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -lw $a0, 20($sp) -sw $a0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_54 -#Condition -#Binary -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 48($sp) -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $t1, $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_55 -#Point-Dispatch -#push object -#loading label -la $a0, string_56 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -#push self -lw $a0, 76($sp) -sw $a0, 4($sp) -#Args: 0 -#Binary -lw $a0, 80($sp) -sw $a0, 4($sp) -#Unary -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 0($sp) -not $a0, $a0 -sw $a0, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -mult $a0, $t1 -mflo $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 8 offset 25 result A2I.i2a_aux -jal A2I.i2a_aux -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 10 offset 1 result String.concat -jal String.concat -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 68($sp) -j _fi_55 -_if_55: -#Self-Dispatch -#push self -lw $a0, 112($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 112($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 3 offset 29 result A2I.i2a_aux -jal A2I.i2a_aux -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 80($sp) -_fi_55: -lw $a0, 4($sp) -sw $a0, 108($sp) -j _fi_54 -_if_54: -#loading label -la $a0, string_57 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 112($sp) -_fi_54: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -A2I.i2a_aux: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -lw $a0, 20($sp) -sw $a0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_58 -#Let -#Point-Dispatch -#push object -#Self-Dispatch -#push self -lw $a0, 56($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 60($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 15 result A2I.i2a_aux -jal A2I.i2a_aux -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Args: 0 -#Self-Dispatch -#push self -lw $a0, 68($sp) -sw $a0, 4($sp) -#Args: 0 -#Binary -lw $a0, 72($sp) -sw $a0, 4($sp) -#Binary -lw $a0, 84($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -mult $a0, $t1 -mflo $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 10 offset 25 result A2I.i2c -jal A2I.i2c -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 14 offset 1 result String.concat -jal String.concat -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 60($sp) -sw $a0, 10101010($sp) -lw $a0, 4($sp) -sw $a0, 32($sp) -j _fi_58 -_if_58: -#loading label -la $a0, string_59 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 40($sp) -_fi_58: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Main.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 12($sp) -sw $t1, 16($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Main.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.menu: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_60 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 5 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 28($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 7 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_61 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 9 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_62 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 11 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 52($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 13 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_63 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 15 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_64 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 17 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 76($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 19 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_65 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 21 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_66 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 23 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 100($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 25 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_67 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 27 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_68 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 29 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 124($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 31 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_69 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 33 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_70 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 35 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 148($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 37 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_71 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 39 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_72 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 41 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 172($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 43 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_73 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 45 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_74 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 47 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 196($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 49 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_75 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 51 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_76 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 53 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_77 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 55 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Dispatch in place -#obj 1 offset 56 result IO.in_string -jal IO.in_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 216($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Main.prompt: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_78 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 5 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_79 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 7 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Dispatch in place -#obj 1 offset 8 result IO.in_string -jal IO.in_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 24($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Main.get_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Let -#Let -#Point-Dispatch -#push object -lw $a0, 36($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Args: 0 -lw $a0, 40($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 36($sp) -sw $a0, 6666($sp) -lw $a0, 28($sp) -sw $a0, 4444($sp) -lw $a0, 4($sp) -sw $a0, 12($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Main.is_even: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Condition -#Binary -lw $a0, 32($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $t1, $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_80 -#Condition -#Binary -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 60($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_81 -#Condition -#Binary -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 84($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_82 -#Self-Dispatch -#Args: 0 -#Binary -lw $a0, 104($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 6 offset 29 result Main.is_even -jal Main.is_even -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 48($sp) -j _fi_82 -_if_82: -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 52($sp) -_fi_82: -lw $a0, 4($sp) -sw $a0, 80($sp) -j _fi_81 -_if_81: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 84($sp) -_fi_81: -lw $a0, 4($sp) -sw $a0, 112($sp) -j _fi_80 -_if_80: -#Self-Dispatch -#Args: 0 -#Unary -lw $a0, 144($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 0($sp) -not $a0, $a0 -sw $a0, 4($sp) -#Dispatch in place -#obj 4 offset 37 result Main.is_even -jal Main.is_even -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 128($sp) -_fi_80: -lw $a0, 144($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Main.class_type: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 16($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -la $a1, A_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 8($sp) -lw $a0, 8($fp) -bnez $a0, branch_83 -lw $a0, 8($sp) -la $a1, B_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $a0, 4($fp) -bnez $a0, branch_84 -lw $a0, 12($sp) -la $a1, C_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $a0, 4($fp) -bnez $a0, branch_85 -lw $a0, 16($sp) -la $a1, D_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $a0, 4($fp) -bnez $a0, branch_86 -lw $a0, 20($sp) -la $a1, E_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $a0, 4($fp) -bnez $a0, branch_87 -lw $a0, 24($sp) -la $a1, Object_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $a0, 4($fp) -bnez $a0, branch_88 -branch_83: -lw $a0, 32($sp) -sw $a0, 4($sp) -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_90 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 16 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 12($sp) -branch_84: -lw $a0, 48($sp) -sw $a0, 20($sp) -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_91 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 20 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 28($sp) -branch_85: -lw $a0, 64($sp) -sw $a0, 36($sp) -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_92 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 24 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 44($sp) -branch_86: -lw $a0, 80($sp) -sw $a0, 52($sp) -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_93 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 28 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 60($sp) -branch_87: -lw $a0, 96($sp) -sw $a0, 68($sp) -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_94 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 32 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 76($sp) -branch_88: -lw $a0, 112($sp) -sw $a0, 84($sp) -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_95 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 36 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 92($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Main.print: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Self-Dispatch -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 36($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 40($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 7 offset 13 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_96 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 15 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 40($sp) -lw $a0, 60($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Main.main: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 24($sp) -sw $t1, 8($sp) -#loop -_loop_97: -lw $a0, 36($sp) -lw $t1, 16($a0) -sw $t1, 4($sp) -lw $a0, 4($fp) -bnez $a0, _body_97 -j _pool_97 -_body_97: -#Block -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_98 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 13 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 60($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 15 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Condition -#Self-Dispatch -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 76($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 4 offset 20 result Main.is_even -jal Main.is_even -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_99 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_100 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 22 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 28($sp) -j _fi_99 -_if_99: -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_101 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 25 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 40($sp) -_fi_99: -#Self-Dispatch -#Args: 0 -lw $a0, 112($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 28 result Main.class_type -jal Main.class_type -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Assignment -#Self-Dispatch -#Dispatch in place -#obj 1 offset 29 result Main.menu -jal Main.menu -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 116($sp) -sw $t1, 4($sp) -#Condition -#Binary -lw $a0, 132($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_102 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_103 -#Condition -#Binary -lw $a0, 156($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_104 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_105 -#Condition -#Binary -lw $a0, 180($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_106 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_107 -#Condition -#Binary -lw $a0, 204($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_108 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_109 -#Condition -#Binary -lw $a0, 228($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_110 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_111 -#Condition -#Binary -lw $a0, 252($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_112 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_113 -#Condition -#Binary -lw $a0, 276($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_114 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_115 -#Condition -#Binary -lw $a0, 300($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_116 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_117 -#Condition -#Binary -lw $a0, 324($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_118 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_119 -#Condition -#Binary -lw $a0, 348($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_120 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_121 -#Assignment -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 384($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 7 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 392($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 56($sp) -j _fi_121 -_if_121: -#Assignment -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 396($sp) -sw $t1, 16($sp) -lw $a0, 4($sp) -sw $a0, 64($sp) -_fi_121: -lw $a0, 4($sp) -sw $a0, 88($sp) -j _fi_119 -_if_119: -#Assignment -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 412($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 104($sp) -_fi_119: -lw $a0, 4($sp) -sw $a0, 128($sp) -j _fi_117 -_if_117: -#Let -#Block -#Assignment -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, E_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result E.Constructor -la $v0, 1 -jal E.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 452($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 7 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 460($sp) -sw $t1, -4($sp) -#Let -#Block -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_122 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 120 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 488($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 122 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_123 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 124 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 504($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 126 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_124 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 128 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Let -#Block -#Self-Dispatch -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 536($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Args: 0 -lw $a0, 540($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 136 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_125 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 138 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 32($sp) -lw $a0, 552($sp) -sw $a0, 129129129129($sp) -lw $a0, 4($sp) -sw $a0, 52($sp) -lw $a0, 520($sp) -sw $a0, 116116116116($sp) -#Assignment -lw $a0, 472($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -lw $t1, 472($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 52($sp) -lw $a0, 472($sp) -sw $a0, 105105105105($sp) -lw $a0, 4($sp) -sw $a0, 136($sp) -_fi_117: -lw $a0, 4($sp) -sw $a0, 164($sp) -j _fi_115 -_if_115: -#Condition -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, D_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result D.Constructor -la $v0, 1 -jal D.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 456($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 7 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_126 -#Block -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_127 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 119 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 484($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 121 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_128 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 123 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 28($sp) -lw $a0, 4($sp) -sw $a0, 68($sp) -j _fi_126 -_if_126: -#Block -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_129 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 127 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -lw $a0, 516($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 129 result Main.print -jal Main.print -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_130 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 131 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 28($sp) -lw $a0, 4($sp) -sw $a0, 100($sp) -_fi_126: -lw $a0, 4($sp) -sw $a0, 264($sp) -_fi_115: -lw $a0, 4($sp) -sw $a0, 288($sp) -j _fi_113 -_if_113: -#Assignment -#Parent-Dispatch -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, C_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result C.Constructor -la $v0, 1 -jal C.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 552($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#DispatchParent in place -#obj 7 offset 1 result C.method5 -la $v0, 1 -jal C.method5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 560($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 320($sp) -_fi_113: -lw $a0, 4($sp) -sw $a0, 344($sp) -j _fi_111 -_if_111: -#Assignment -#Parent-Dispatch -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, C_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result C.Constructor -la $v0, 1 -jal C.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 584($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#DispatchParent in place -#obj 7 offset 1 result C.method5 -la $v0, 1 -jal C.method5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 592($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 376($sp) -_fi_111: -lw $a0, 4($sp) -sw $a0, 400($sp) -j _fi_109 -_if_109: -#Assignment -#Parent-Dispatch -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, C_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result C.Constructor -la $v0, 1 -jal C.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 616($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#DispatchParent in place -#obj 7 offset 1 result C.method5 -la $v0, 1 -jal C.method5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 624($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 432($sp) -_fi_109: -lw $a0, 4($sp) -sw $a0, 456($sp) -j _fi_107 -_if_107: -#Block -#Assignment -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -#Dispatch in place -#obj 1 offset 162 result Main.get_int -jal Main.get_int -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 652($sp) -sw $t1, 12($sp) -#Assignment -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, D_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result D.Constructor -la $v0, 1 -jal D.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 676($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Args: 1 -#Point-Dispatch -#push object -lw $a0, 688($sp) -lw $t1, 12($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 10 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 696($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 72($sp) -lw $a0, 4($sp) -sw $a0, 528($sp) -_fi_107: -lw $a0, 4($sp) -sw $a0, 552($sp) -j _fi_105 -_if_105: -lw $a0, 704($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -la $a1, C_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 8($sp) -lw $a0, 8($fp) -bnez $a0, branch_131 -lw $a0, 8($sp) -la $a1, A_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $a0, 4($fp) -bnez $a0, branch_132 -lw $a0, 12($sp) -la $a1, Object_VT -la $t0, inherit -jalr $ra, $t0 -sw $v0, 4($sp) -lw $a0, 4($fp) -bnez $a0, branch_133 -branch_131: -lw $a0, 20($sp) -sw $a0, 4($sp) -#Assignment -#Point-Dispatch -#push object -lw $a0, 16($sp) -sw $a0, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 24($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 752($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 28($sp) -branch_132: -lw $a0, 48($sp) -sw $a0, 32($sp) -#Assignment -#Point-Dispatch -#push object -lw $a0, 12($sp) -sw $a0, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 20($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 780($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 56($sp) -branch_133: -lw $a0, 76($sp) -sw $a0, 60($sp) -#Block -#Self-Dispatch -#Args: 0 -#loading label -la $a0, string_135 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 2 offset 199 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#Dispatch in place -#obj 1 offset 200 result Object.abort -jal Object.abort -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 20($sp) -lw $a0, 4($sp) -sw $a0, 84($sp) -lw $a0, 4($sp) -sw $a0, 664($sp) -_fi_105: -lw $a0, 4($sp) -sw $a0, 688($sp) -j _fi_103 -_if_103: -#Block -#Assignment -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, A_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result A.Constructor -la $v0, 1 -jal A.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Self-Dispatch -#Dispatch in place -#obj 1 offset 208 result Main.get_int -jal Main.get_int -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 836($sp) -sw $t1, 12($sp) -#Assignment -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 4 -syscall -sw $v0, 4($sp) -la $a1, B_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result B.Constructor -la $v0, 1 -jal B.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 860($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Args: 1 -#Point-Dispatch -#push object -lw $a0, 872($sp) -lw $t1, 12($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 10 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 880($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 72($sp) -lw $a0, 4($sp) -sw $a0, 760($sp) -_fi_103: -lw $a0, 4($sp) -sw $a0, 840($sp) -j _loop_97 -_pool_97: -lw $a0, 4($sp) -sw $a0, 872($sp) li $v0, 10 syscall diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips new file mode 100644 index 00000000..a9b739d9 --- /dev/null +++ b/tests/codegen/atoi.mips @@ -0,0 +1,10 @@ +.data +s_0: .asciiz"678987 == 678987 +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips new file mode 100644 index 00000000..27c696b4 --- /dev/null +++ b/tests/codegen/book_list.mips @@ -0,0 +1,40 @@ +.data +s_0: .asciiz"title: The Top 100 CD_ROMs +" +s_1: .asciiz"author: Ulanoff +" +s_2: .asciiz"periodical: PC Magazine +" +s_3: .asciiz"- dynamic type was Article - +" +s_4: .asciiz"title: Compilers, Principles, Techniques, and Tools +" +s_5: .asciiz"author: Aho, Sethi, and Ullman +" +s_6: .asciiz"- dynamic type was Book - +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 4 +la $a0, s_1 +syscall +li $v0, 4 +la $a0, s_2 +syscall +li $v0, 4 +la $a0, s_3 +syscall +li $v0, 4 +la $a0, s_4 +syscall +li $v0, 4 +la $a0, s_5 +syscall +li $v0, 4 +la $a0, s_6 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 871ac350..ec6f8ef4 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -1,1114 +1,110 @@ .data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz "\n" -string_4: .asciiz "X" -string_6: .asciiz "X" -string_8: .asciiz "X" -string_11: .asciiz "." -string_12: .asciiz "X" -string_14: .asciiz " X " -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -CellularAutomaton_INH: -.word IO_INH -Main_INH: -.word Object_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -CellularAutomaton_name: .asciiz "CellularAutomaton" -CellularAutomaton_VT: -.word CellularAutomaton_INH -.word CellularAutomaton.init -.word CellularAutomaton.print -.word CellularAutomaton.num_cells -.word CellularAutomaton.cell -.word CellularAutomaton.cell_left_neighbor -.word CellularAutomaton.cell_right_neighbor -.word CellularAutomaton.cell_at_next_evolution -.word CellularAutomaton.evolve -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main - -.globl main +s_0: .asciiz" X +" +s_1: .asciiz"........XXX........ +" +s_2: .asciiz".......X...X....... +" +s_3: .asciiz"......XXX.XXX...... +" +s_4: .asciiz".....X.......X..... +" +s_5: .asciiz"....XXX.....XXX.... +" +s_6: .asciiz"...X...X...X...X... +" +s_7: .asciiz"..XXX.XXX.XXX.XXX.. +" +s_8: .asciiz".X...............X. +" +s_9: .asciiz"XXX.............XXX +" +s_10: .asciiz"...X...........X... +" +s_11: .asciiz"..XXX.........XXX.. +" +s_12: .asciiz".X...X.......X...X. +" +s_13: .asciiz"XXX.XXX.....XXX.XXX +" +s_14: .asciiz".......X...X....... +" +s_15: .asciiz"......XXX.XXX...... +" +s_16: .asciiz".....X.......X..... +" +s_17: .asciiz"....XXX.....XXX.... +" +s_18: .asciiz"...X...X...X...X... +" +s_19: .asciiz"..XXX.XXX.XXX.XXX.. +" +s_20: .asciiz".X...............X. +" .text -IO.out_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 +main: li $v0, 4 -lw $a0, 8($sp) +la $a0, s_0 syscall -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -IO.out_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) +li $v0, 4 +la $a0, s_1 syscall -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 +li $v0, 4 +la $a0, s_2 syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 +li $v0, 4 +la $a0, s_3 syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 +li $v0, 4 +la $a0, s_4 syscall -move $a0, $v0 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Object.copy: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 +li $v0, 4 +la $a0, s_5 syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -Object.abort: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 10 +li $v0, 4 +la $a0, s_6 syscall -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -String.length: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 +li $v0, 4 +la $a0, s_7 syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 +li $v0, 4 +la $a0, s_8 syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 16($sp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception li $v0, 4 +la $a0, s_9 syscall -li $v0, 10 +li $v0, 4 +la $a0, s_10 syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 12($sp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -lw $ra, 4($sp) -addiu $sp, $sp, 12 -jr $ra - -Object.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Object.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Int.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -IO.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Bool.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -String.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $v0, 9 -li $a0, 8 +li $v0, 4 +la $a0, s_11 +syscall +li $v0, 4 +la $a0, s_12 syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a0, 4($sp) -addi $sp, $sp, 4 -j Object.abort -#--------------End Initial Code--------------- -CellularAutomaton.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -CellularAutomaton.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, CellularAutomaton_name -jr $ra -CellularAutomaton.init: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -lw $a0, 16($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -lw $a0, 28($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -CellularAutomaton.print: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Self-Dispatch -#push self -lw $a0, 20($sp) -sw $a0, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 28($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Args: 0 -#loading label -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result String.concat -jal String.concat -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 6 offset 9 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 40($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 32($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -CellularAutomaton.num_cells: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -#push object -lw $a0, 16($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -CellularAutomaton.cell: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -#push object -lw $a0, 20($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Args: 0 -lw $a0, 20($sp) -sw $a0, 4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -CellularAutomaton.cell_left_neighbor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -lw $a0, 20($sp) -sw $a0, 4($sp) -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_2 -#Self-Dispatch -#push self -lw $a0, 44($sp) -sw $a0, 4($sp) -#Args: 0 -#Binary -lw $a0, 48($sp) -sw $a0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 7 offset 16 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 52($sp) -j _fi_2 -_if_2: -#Self-Dispatch -#push self -lw $a0, 72($sp) -sw $a0, 4($sp) -#Args: 0 -#Binary -#Self-Dispatch -#push self -lw $a0, 84($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 21 result CellularAutomaton.num_cells -jal CellularAutomaton.num_cells -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 8 offset 24 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 84($sp) -_fi_2: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -CellularAutomaton.cell_right_neighbor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -lw $a0, 20($sp) -sw $a0, 4($sp) -#Binary -#Self-Dispatch -#push self -lw $a0, 36($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 9 result CellularAutomaton.num_cells -jal CellularAutomaton.num_cells -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_3 -#Self-Dispatch -#push self -lw $a0, 60($sp) -sw $a0, 4($sp) -#Args: 0 -#Binary -lw $a0, 64($sp) -sw $a0, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 7 offset 20 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 68($sp) -j _fi_3 -_if_3: -#Self-Dispatch -#push self -lw $a0, 88($sp) -sw $a0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 23 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 80($sp) -_fi_3: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -CellularAutomaton.cell_at_next_evolution: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -#Binary -#Binary -#Condition -#Binary -#Self-Dispatch -#push self -lw $a0, 44($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 44($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 3 offset 12 result CellularAutomaton.cell -jal CellularAutomaton.cell -sw $a0, 4($sp) -addi $sp, $sp, 4 -#loading label -la $a0, string_4 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_5 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 36($sp) -j _fi_5 -_if_5: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 44($sp) -_fi_5: -#Condition -#Binary -#Self-Dispatch -#push self -lw $a0, 92($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 92($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 3 offset 24 result CellularAutomaton.cell_left_neighbor -jal CellularAutomaton.cell_left_neighbor -sw $a0, 4($sp) -addi $sp, $sp, 4 -#loading label -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_7 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 36($sp) -j _fi_7 -_if_7: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 44($sp) -_fi_7: -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Condition -#Binary -#Self-Dispatch -#push self -lw $a0, 140($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 140($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 3 offset 36 result CellularAutomaton.cell_right_neighbor -jal CellularAutomaton.cell_right_neighbor -sw $a0, 4($sp) -addi $sp, $sp, 4 -#loading label -la $a0, string_8 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_9 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 36($sp) -j _fi_9 -_if_9: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 44($sp) -_fi_9: -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_10 -#loading label -la $a0, string_11 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 172($sp) -j _fi_10 -_if_10: -#loading label -la $a0, string_12 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 180($sp) -_fi_10: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -CellularAutomaton.evolve: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Let -#Let -#Block -#loop -_loop_13: -#Binary -lw $a0, 48($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 52($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $t1, $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _body_13 -j _pool_13 -_body_13: -#Block -#Assignment -#Point-Dispatch -#push object -lw $a0, 72($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Args: 0 -#Self-Dispatch -#push self -lw $a0, 80($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 84($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 21 result CellularAutomaton.cell_at_next_evolution -jal CellularAutomaton.cell_at_next_evolution -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result String.concat -jal String.concat -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 88($sp) -sw $t1, -4($sp) -#Assignment -#Binary -lw $a0, 96($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 108($sp) -sw $t1, -4($sp) -lw $a0, 4($sp) -sw $a0, 48($sp) -j _loop_13 -_pool_13: -#Assignment -lw $a0, 112($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -lw $t1, 112($sp) -sw $t1, 4($sp) -lw $a0, 120($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 88($sp) -lw $a0, 120($sp) -sw $a0, 7777($sp) -lw $a0, 32($sp) -sw $a0, 5555($sp) -lw $a0, 24($sp) -sw $a0, 3333($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Main.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Main.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 8 +li $v0, 4 +la $a0, s_13 +syscall +li $v0, 4 +la $a0, s_14 +syscall +li $v0, 4 +la $a0, s_15 +syscall +li $v0, 4 +la $a0, s_16 +syscall +li $v0, 4 +la $a0, s_17 +syscall +li $v0, 4 +la $a0, s_18 +syscall +li $v0, 4 +la $a0, s_19 +syscall +li $v0, 4 +la $a0, s_20 syscall -sw $v0, 4($sp) -la $a1, CellularAutomaton_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result CellularAutomaton.Constructor -la $v0, 1 -jal CellularAutomaton.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#loading label -la $a0, string_14 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 36($sp) -sw $t1, 4($sp) -#Point-Dispatch -#push object -lw $a0, 44($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Let -#loop -_loop_15: -#Binary -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 72($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $t1, $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _body_15 -j _pool_15 -_body_15: -#Block -#Point-Dispatch -#push object -lw $a0, 92($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Point-Dispatch -#push object -lw $a0, 104($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Assignment -#Binary -lw $a0, 116($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 128($sp) -sw $t1, -4($sp) -lw $a0, 4($sp) -sw $a0, 48($sp) -j _loop_15 -_pool_15: -lw $a0, 120($sp) -sw $a0, 13131313($sp) -lw $a0, 60($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 52($sp) li $v0, 10 syscall diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips new file mode 100644 index 00000000..f95fca70 --- /dev/null +++ b/tests/codegen/complex.mips @@ -0,0 +1,10 @@ +.data +s_0: .asciiz"=) +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips new file mode 100644 index 00000000..f4fb1922 --- /dev/null +++ b/tests/codegen/fib.mips @@ -0,0 +1,15 @@ +.data +s_0: .asciiz"Enter n to find nth fibonacci number! +" +s_1: .asciiz"89 +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 4 +la $a0, s_1 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index c9e1327a..9bcaca6a 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -1,2686 +1,40 @@ .data -buffer: .space 2048 -strsubstrexception: .asciiz "Substring index exception" - -string_1: .asciiz " (" -string_2: .asciiz "," -string_3: .asciiz ")" -string_5: .asciiz "\n" -string_6: .asciiz "\n" -string_8: .asciiz "\n" -string_9: .asciiz "" -string_11: .asciiz "0" -string_13: .asciiz "1" -string_15: .asciiz "2" -string_17: .asciiz "3" -string_19: .asciiz "4" -string_21: .asciiz "5" -string_23: .asciiz "6" -string_25: .asciiz "7" -string_27: .asciiz "8" -string_29: .asciiz "9" -string_32: .asciiz "-" -string_34: .asciiz " " -string_37: .asciiz " " -string_39: .asciiz "," -string_42: .asciiz "" -string_43: .asciiz "" -Object_INH: -String_INH: -.word Object_INH -Int_INH: -.word Object_INH -Bool_INH: -.word Object_INH -IO_INH: -.word Object_INH -SELF_TYPE_INH: -.word Object_INH -Graph_INH: -.word Object_INH -Vertice_INH: -.word IO_INH -Edge_INH: -.word IO_INH -EList_INH: -.word IO_INH -ECons_INH: -.word EList_INH -VList_INH: -.word IO_INH -VCons_INH: -.word VList_INH -Parse_INH: -.word IO_INH -Main_INH: -.word Parse_INH -BoolOp_INH: -.word Object_INH -Int_name: .asciiz "Int" -Int_VT: -.word Int_INH -Bool_name: .asciiz "Bool" -Bool_VT: -.word Bool_INH -String_name: .asciiz "String" -String_VT: -.word String_INH -.word String.length -.word String.concat -.word String.substr -Object_name: .asciiz "Object" -Object_VT: -.word Object_INH -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_VT: -.word IO_INH -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Graph_name: .asciiz "Graph" -Graph_VT: -.word Graph_INH -.word Graph.add_vertice -.word Graph.print_E -.word Graph.print_V -Vertice_name: .asciiz "Vertice" -Vertice_VT: -.word Vertice_INH -.word Vertice.outgoing -.word Vertice.number -.word Vertice.init -.word Vertice.add_out -.word Vertice.print -Edge_name: .asciiz "Edge" -Edge_VT: -.word Edge_INH -.word Edge.init -.word Edge.print -EList_name: .asciiz "EList" -EList_VT: -.word EList_INH -.word EList.isNil -.word EList.head -.word EList.tail -.word EList.cons -.word EList.append -.word EList.print -ECons_name: .asciiz "ECons" -ECons_VT: -.word ECons_INH -.word ECons.isNil -.word ECons.head -.word ECons.tail -.word ECons.init -.word ECons.print -VList_name: .asciiz "VList" -VList_VT: -.word VList_INH -.word VList.isNil -.word VList.head -.word VList.tail -.word VList.cons -.word VList.print -VCons_name: .asciiz "VCons" -VCons_VT: -.word VCons_INH -.word VCons.isNil -.word VCons.head -.word VCons.tail -.word VCons.init -.word VCons.print -Parse_name: .asciiz "Parse" -Parse_VT: -.word Parse_INH -.word Parse.read_input -.word Parse.parse_line -.word Parse.c2i -.word Parse.a2i -.word Parse.a2i_aux -Main_name: .asciiz "Main" -Main_VT: -.word Main_INH -.word Main.main -BoolOp_name: .asciiz "BoolOp" -BoolOp_VT: -.word BoolOp_INH -.word BoolOp.and -.word BoolOp.or - -.globl main +s_0: .asciiz"5 (5,5)5 (5,4)4 (5,3)3 (5,2)2 (5,1)1 +" +s_1: .asciiz"4 (4,5)100 (4,3)55 +" +s_2: .asciiz"3 (3,2)10 +" +s_3: .asciiz"2 (2,1)150 (2,3)200 +" +s_4: .asciiz"1 (1,2)100 +" +s_5: .asciiz" +" +s_6: .asciiz" (5,5)5 (5,4)4 (5,3)3 (5,2)2 (5,1)1 (4,5)100 (4,3)55 (3,2)10 (2,1)150 (2,3)200 (1,2)100 +" .text -IO.out_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 +main: li $v0, 4 -lw $a0, 8($sp) -syscall -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -IO.out_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 1 -lw $a0, 8($sp) -syscall -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -IO.in_string: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a0, buffer -li $a1, 1024 -li $v0, 8 -syscall -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -jal String.length -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -la $a0, buffer -istr_copy: -lb $t1, ($a0) -sb $t1, ($t0) -addiu $a0, $a0, 1 -addiu $t0, $t0, 1 -bne $t1, $zero, istr_copy -addiu $t0, $t0, -2 -li $t1 10 -lb $t2, ($t0) -bne $t1 , $t2 not_slash -sb $zero, ($t0) -not_slash: -move $a0, $v0 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -IO.in_int: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($fp) -li $v0, 5 -syscall -move $a0, $v0 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Object.copy: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a1, -4($sp) -lw $a0, -8($sp) -li $v0, 9 +la $a0, s_0 syscall -lw $a1, -4($sp) -lw $a0, 4($a1) -move $a3, $v0 -_copy.loop: -lw $a2, 0($a1) -sw $a2, 0($a3) -addiu $a0, $a0, -1 -addiu $a1, $a1, 4 -addiu $a3, $a3, 4 -beq $a0, $zero, _copy.end -j _copy.loop -_copy.end: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra - - -Object.abort: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 10 -syscall -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra - - -String.length: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -_stringlength.loop: -lb $a1, 0($sp) -beqz $a1, _stringlength.end -addiu $a0, $a0, 1 -j _stringlength.loop -_stringlength.end: -j Object.abort -lw $a1, 4($sp) -subu $v0, $a0, $a1 -jr $ra - - -String.concat: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -move $a2, $ra -jal String.length -move $v1, $v0 -addiu $sp, $sp, -4 -jal String.length -addiu $sp, $sp, 4 -add $v1, $v1, $v0 -addi $v1, $v1, 1 -li $v0, 9 -move $a0, $v1 -syscall -move $v1, $v0 -lw $a0, 0($sp) -_stringconcat.loop1: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end1 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop1 -_stringconcat.end1: -lw $a0, -4($sp) -_stringconcat.loop2: -lb $a1, 0($a0) -beqz $a1, _stringconcat.end2 -sb $a1, 0($v1) -addiu $a0, $a0, 1 -addiu $v1, $v1, 1 -j _stringconcat.loop2 -_stringconcat.end2: -sb $zero, 0($v1) -move $ra, $a2 -jr $ra - -String.substr: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($fp) -addiu $a0, $a0, 1 -li $v0, 9 -syscall -move $t0, $v0 -lw $s1, 4($fp) -lw $t1, 8($fp) -add $s1, $s1, $t1 -lw $t1, 12($fp) -substr: -lb $t5, ($s1) -sb $t5, ($t0) -addiu $s1, $s1, 1 -addiu $t0, $t0, 1 -addiu $t1, $t1, -1 -bne $t1, $zero, substr -sb $zero, ($t0) -move $a0, $v0 -lw $ra, 16($sp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra - - -_substrexception: -la $a0, strsubstrexception li $v0, 4 +la $a0, s_1 syscall -li $v0, 10 -syscall - - -_stringcmp: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 4($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length - -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $s1, 8($fp) -sw $fp, 0($sp) -addiu $sp, $sp, -4 -sw $s1, 0($sp) -addiu $sp, $sp, -4 -jal String.length -lw $t7, 4($sp) -addiu $sp, $sp, 4 -bne $t7, $a0, str.not_equals_strings -lw $t7, 4($fp) -lw $a0, 8($fp) -str.equal_chart: -lb $t1, ($t7) -lb $t2, ($a0) -addiu $t7, $t7, 1 -addiu $a0, $a0, 1 -bne $t1, $t2, str.not_equals_strings -beq $t1, $zero, str.equals_strings -j str.equal_chart -str.not_equals_strings: -li $a0, 0 -j str.end_equal_string -str.equals_strings: -li $a0, 1 -str.end_equal_string: -lw $ra, 12($sp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -inherit: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -beq $a0, $a1, inherit_true -beq $a0, $zero, inherit_false -lw $a0, ($a0) -j inherit -inherit_true: -li $v0, 1 -jr $ra -inherit_false: -li $v0, 0 -lw $ra, 4($sp) -addiu $sp, $sp, 12 -jr $ra - -Object.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Object.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Object_name -jr $ra -Int.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Int.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Int_name -jr $ra -IO.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -IO.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, IO_name -jr $ra -Bool.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Bool.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Bool_name -jr $ra -String.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -String.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, String_name -jr $ra -#--------------Initial Code--------------- -main: -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, Main_VT -sw $a1, ($v0) -#DispatchParent in place -#obj 2 offset 1 result Main.Constructor -la $v0, 1 -jal Main.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 1 result Main.main -jal Main.main -sw $a0, 4($sp) -addi $sp, $sp, 4 -j Object.abort -#--------------End Initial Code--------------- -Graph.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, VList_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result VList.Constructor -la $v0, 1 -jal VList.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -li $v0, 9 -li $a0, 8 -syscall -sw $v0, 4($sp) -la $a1, EList_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result EList.Constructor -la $v0, 1 -jal EList.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 36($sp) -sw $t1, 8($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Graph.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Graph_name -jr $ra -Graph.add_vertice: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -#Point-Dispatch -#push object -#Point-Dispatch -#push object -lw $a0, 24($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Args: 0 -lw $a0, 36($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 5 offset 2 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 36($sp) -sw $t1, 8($sp) -#Assignment -#Point-Dispatch -#push object -lw $a0, 48($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Args: 0 -lw $a0, 48($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 56($sp) -sw $t1, 4($sp) -lw $a0, 4($sp) -sw $a0, 44($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Graph.print_E: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -#push object -lw $a0, 16($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Graph.print_V: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -#push object -lw $a0, 16($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Vertice.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 8 +li $v0, 4 +la $a0, s_2 syscall -sw $v0, 4($sp) -la $a1, EList_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result EList.Constructor -la $v0, 1 -jal EList.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 20($sp) -sw $t1, 8($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Vertice.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Vertice_name -jr $ra -Vertice.outgoing: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Vertice.number: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Vertice.init: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -lw $a0, 16($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -lw $a0, 28($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Vertice.add_out: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -#Point-Dispatch -#push object -lw $a0, 24($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Args: 0 -lw $a0, 24($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 3 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 32($sp) -sw $t1, 8($sp) -lw $a0, 36($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 24($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Vertice.print: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Self-Dispatch -#push self -lw $a0, 20($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 24($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 6 result IO.out_int -jal IO.out_int -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Point-Dispatch -#push object -lw $a0, 32($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 28($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Edge.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Edge.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Edge_name -jr $ra -Edge.init: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -lw $a0, 24($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 28($sp) -sw $t1, 4($sp) -#Assignment -lw $a0, 28($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 36($sp) -sw $t1, 8($sp) -#Assignment -lw $a0, 32($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 44($sp) -sw $t1, 12($sp) -lw $a0, 52($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 32($sp) -lw $ra, 16($sp) -addiu $sp, $sp, 20 -lw $fp, 0($sp) -jr $ra -Edge.print: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Self-Dispatch -#push self -lw $a0, 20($sp) -sw $a0, 4($sp) -#Args: 0 -#loading label -la $a0, string_1 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 6 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#push self -lw $a0, 32($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 36($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 9 result IO.out_int -jal IO.out_int -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#push self -lw $a0, 44($sp) -sw $a0, 4($sp) -#Args: 0 -#loading label -la $a0, string_2 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 12 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#push self -lw $a0, 56($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 60($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 15 result IO.out_int -jal IO.out_int -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#push self -lw $a0, 68($sp) -sw $a0, 4($sp) -#Args: 0 -#loading label -la $a0, string_3 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 18 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Self-Dispatch -#push self -lw $a0, 80($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 84($sp) -lw $t1, 12($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 21 result IO.out_int -jal IO.out_int -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 76($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -EList.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -EList.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, EList_name -jr $ra -EList.isNil: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -EList.head: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Self-Dispatch -#push self -lw $a0, 20($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 24($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -EList.tail: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Self-Dispatch -#push self -lw $a0, 20($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 24($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -EList.cons: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 8 +li $v0, 4 +la $a0, s_3 syscall -sw $v0, 4($sp) -la $a1, ECons_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result ECons.Constructor -la $v0, 1 -jal ECons.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 28($sp) -sw $a0, 4($sp) -#Args: 1 -lw $a0, 36($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 6 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -EList.append: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Point-Dispatch -#push object -lw $a0, 24($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_4 -#Point-Dispatch -#push object -#Point-Dispatch -#push object -#Self-Dispatch -#push self -lw $a0, 44($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 11 result EList.tail -jal EList.tail -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Args: 0 -lw $a0, 44($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 4 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Args: 0 -#Self-Dispatch -#push self -lw $a0, 60($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 15 result EList.head -jal EList.head -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 8 offset 3 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 48($sp) -j _fi_4 -_if_4: -lw $a0, 64($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 56($sp) -_fi_4: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -EList.print: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -#push self -lw $a0, 16($sp) -sw $a0, 4($sp) -#Args: 0 -#loading label -la $a0, string_5 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 5 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -ECons.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -ECons.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, ECons_name -jr $ra -ECons.isNil: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -ECons.head: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -ECons.tail: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -ECons.init: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -lw $a0, 20($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 24($sp) -sw $t1, -4($sp) -#Assignment -lw $a0, 24($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 32($sp) -sw $t1, 4($sp) -lw $a0, 40($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 24($sp) -lw $ra, 12($sp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -ECons.print: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Point-Dispatch -#push object -lw $a0, 20($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Point-Dispatch -#push object -lw $a0, 32($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 28($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -VList.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -VList.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, VList_name -jr $ra -VList.isNil: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -VList.head: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Self-Dispatch -#push self -lw $a0, 20($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 24($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -VList.tail: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Self-Dispatch -#push self -lw $a0, 20($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 5 result Object.abort -jal Object.abort -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 24($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -VList.cons: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 8 +li $v0, 4 +la $a0, s_4 syscall -sw $v0, 4($sp) -la $a1, VCons_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result VCons.Constructor -la $v0, 1 -jal VCons.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -lw $a0, 28($sp) -sw $a0, 4($sp) -#Args: 1 -lw $a0, 36($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 6 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -VList.print: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -#push self -lw $a0, 16($sp) -sw $a0, 4($sp) -#Args: 0 -#loading label -la $a0, string_6 -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Dispatch in place -#obj 3 offset 5 result IO.out_string -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -VCons.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -VCons.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, VCons_name -jr $ra -VCons.isNil: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -VCons.head: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -VCons.tail: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $a0, 12($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -VCons.init: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Assignment -lw $a0, 20($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 24($sp) -sw $t1, -4($sp) -#Assignment -lw $a0, 24($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -lw $t1, 32($sp) -sw $t1, 4($sp) -lw $a0, 40($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 24($sp) -lw $ra, 12($sp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -VCons.print: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Point-Dispatch -#push object -lw $a0, 20($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Point-Dispatch -#push object -lw $a0, 32($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 28($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Parse.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -li $v0, 9 -li $a0, 4 +li $v0, 4 +la $a0, s_5 syscall -sw $v0, 4($sp) -la $a1, BoolOp_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result BoolOp.Constructor -la $v0, 1 -jal BoolOp.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 20($sp) -sw $t1, 4($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Parse.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Parse_name -jr $ra -Parse.read_input: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Let -#loop -_loop_7: -#Point-Dispatch -#push object -lw $a0, 40($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Args: 0 -#Unary -#Binary -lw $a0, 52($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_8 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 0($sp) -li $t1, 1 -sub $a0, $t1, $a0 -sw $a0, 4($sp) -#Args: 1 -#Unary -#Binary -lw $a0, 76($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_9 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 0($sp) -li $t1, 1 -sub $a0, $t1, $a0 -sw $a0, 4($sp) -#Dispatch in place -#obj 14 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _body_7 -j _pool_7 -_body_7: -#Block -#Point-Dispatch -#push object -lw $a0, 104($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Args: 0 -#Self-Dispatch -#push self -lw $a0, 112($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 116($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 3 offset 29 result Parse.parse_line -jal Parse.parse_line -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 5 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Assignment -#Self-Dispatch -#push self -lw $a0, 128($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 32 result IO.in_string -jal IO.in_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 128($sp) -sw $t1, -4($sp) -lw $a0, 4($sp) -sw $a0, 40($sp) -j _loop_7 -_pool_7: -lw $a0, 128($sp) -sw $a0, 6666($sp) -lw $a0, 32($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $a0, 32($sp) -sw $a0, 3333($sp) -lw $ra, 4($sp) -addiu $sp, $sp, 8 -lw $fp, 0($sp) -jr $ra -Parse.parse_line: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#loop -_loop_10: -#Unary -#Binary -#Point-Dispatch -#push object -lw $a0, 44($sp) -lw $t1, 8($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 0($sp) -li $t1, 1 -sub $a0, $t1, $a0 -sw $a0, 4($sp) -lw $a0, 4($fp) -bnez $a0, _body_10 -j _pool_10 -_body_10: -#Block -#Let -#Let -#Point-Dispatch -#push object -lw $a0, 84($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -li $v0, 9 -li $a0, 16 +li $v0, 4 +la $a0, s_6 syscall -sw $v0, 4($sp) -la $a1, Edge_VT -sw $a1, ($v0) -lw $a0, 4($sp) -sw $a0, 12($sp) -#DispatchParent in place -#obj 2 offset 1 result Edge.Constructor -la $v0, 1 -jal Edge.Constructor -sw $a0, 0($sp) -addi $sp, $sp, -4 -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 108($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Args: 1 -lw $a0, 116($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Args: 2 -lw $a0, 120($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 9 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 12 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 84($sp) -sw $a0, 18181818($sp) -lw $a0, 76($sp) -sw $a0, 16161616($sp) -lw $a0, 4($sp) -sw $a0, 12($sp) -j _loop_10 -_pool_10: -lw $a0, 76($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -sw $a0, 56($sp) -lw $a0, 76($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Parse.c2i: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -lw $a0, 20($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_11 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_12 -#Condition -#Binary -lw $a0, 44($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_13 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_14 -#Condition -#Binary -lw $a0, 68($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_15 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_16 -#Condition -#Binary -lw $a0, 92($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_17 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_18 -#Condition -#Binary -lw $a0, 116($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_19 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_20 -#Condition -#Binary -lw $a0, 140($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_21 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_22 -#Condition -#Binary -lw $a0, 164($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_23 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_24 -#Condition -#Binary -lw $a0, 188($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_25 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_26 -#Condition -#Binary -lw $a0, 212($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_27 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_28 -#Condition -#Binary -lw $a0, 236($sp) -sw $a0, 4($sp) -#loading label -la $a0, string_29 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_30 -#Block -#Self-Dispatch -#push self -lw $a0, 264($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 66 result Object.abort -jal Object.abort -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $a0, 4($sp) -sw $a0, 44($sp) -j _fi_30 -_if_30: -#Integer -li $a0, 9 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 48($sp) -_fi_30: -lw $a0, 4($sp) -sw $a0, 76($sp) -j _fi_28 -_if_28: -#Integer -li $a0, 8 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 80($sp) -_fi_28: -lw $a0, 4($sp) -sw $a0, 108($sp) -j _fi_26 -_if_26: -#Integer -li $a0, 7 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 112($sp) -_fi_26: -lw $a0, 4($sp) -sw $a0, 140($sp) -j _fi_24 -_if_24: -#Integer -li $a0, 6 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 144($sp) -_fi_24: -lw $a0, 4($sp) -sw $a0, 172($sp) -j _fi_22 -_if_22: -#Integer -li $a0, 5 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 176($sp) -_fi_22: -lw $a0, 4($sp) -sw $a0, 204($sp) -j _fi_20 -_if_20: -#Integer -li $a0, 4 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 208($sp) -_fi_20: -lw $a0, 4($sp) -sw $a0, 236($sp) -j _fi_18 -_if_18: -#Integer -li $a0, 3 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 240($sp) -_fi_18: -lw $a0, 4($sp) -sw $a0, 268($sp) -j _fi_16 -_if_16: -#Integer -li $a0, 2 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 272($sp) -_fi_16: -lw $a0, 4($sp) -sw $a0, 300($sp) -j _fi_14 -_if_14: -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 304($sp) -_fi_14: -lw $a0, 4($sp) -sw $a0, 332($sp) -j _fi_12 -_if_12: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 336($sp) -_fi_12: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Parse.a2i: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -#Binary -#Point-Dispatch -#push object -lw $a0, 24($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_31 -#Condition -#Binary -#Point-Dispatch -#push object -lw $a0, 52($sp) -sw $a0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#loading label -la $a0, string_32 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_33 -#Condition -#Binary -#Point-Dispatch -#push object -lw $a0, 88($sp) -sw $a0, 4($sp) -#Args: 0 -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#loading label -la $a0, string_34 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_35 -#Self-Dispatch -#push self -lw $a0, 120($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 120($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 3 offset 31 result Parse.a2i_aux -jal Parse.a2i_aux -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 48($sp) -j _fi_35 -_if_35: -#Self-Dispatch -#push self -lw $a0, 136($sp) -sw $a0, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 140($sp) -sw $a0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -#Point-Dispatch -#push object -lw $a0, 156($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 12 offset 44 result Parse.a2i -jal Parse.a2i -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 100($sp) -_fi_35: -lw $a0, 4($sp) -sw $a0, 136($sp) -j _fi_33 -_if_33: -#Unary -#Self-Dispatch -#push self -lw $a0, 188($sp) -sw $a0, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 192($sp) -sw $a0, 4($sp) -#Args: 0 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Args: 1 -#Binary -#Point-Dispatch -#push object -lw $a0, 208($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 9 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 12 offset 57 result Parse.a2i_aux -jal Parse.a2i_aux -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 0($sp) -not $a0, $a0 -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 188($sp) -_fi_33: -lw $a0, 4($sp) -sw $a0, 216($sp) -j _fi_31 -_if_31: -#Integer -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 220($sp) -_fi_31: -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Parse.a2i_aux: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Let -#Block -#Let -#Let -#loop -_loop_36: -#Binary -lw $a0, 52($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 56($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -li $t0, 1 -add $a0, $a0, $t0 -sge $a0, $t1, $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _body_36 -j _pool_36 -_body_36: -#Let -#Condition -#Binary -lw $a0, 84($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_37 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_38 -#Condition -#Binary -lw $a0, 108($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#loading label -la $a0, string_39 -sw $a0, 0($sp) -addi $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_40 -#Block -#Assignment -#Binary -#Binary -lw $a0, 136($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 10 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -mult $a0, $t1 -mflo $a0 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Self-Dispatch -#push self -lw $a0, 156($sp) -sw $a0, 4($sp) -#Args: 0 -#Point-Dispatch -#push object -lw $a0, 160($sp) -sw $a0, 4($sp) -#Args: 0 -lw $a0, 168($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Args: 1 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -#Dispatch in place -#obj 4 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Dispatch in place -#obj 7 offset 44 result Parse.c2i -jal Parse.c2i -sw $a0, 4($sp) -addi $sp, $sp, 4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 176($sp) -sw $t1, -4($sp) -#Assignment -#Binary -lw $a0, 184($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 196($sp) -sw $t1, -4($sp) -#Condition -#Binary -lw $a0, 208($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 212($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -seq $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -lw $a0, 4($fp) -bnez $a0, _if_41 -#loading label -la $a0, string_42 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 28($sp) -j _fi_41 -_if_41: -#Assignment -#loading label -la $a0, string_43 -sw $a0, 0($sp) -addi $sp, $sp, -4 -lw $a0, 4($sp) -lw $t1, 232($sp) -sw $t1, 8($sp) -lw $a0, 4($sp) -sw $a0, 40($sp) -_fi_41: -lw $a0, 4($sp) -sw $a0, 116($sp) -lw $a0, 4($sp) -sw $a0, 140($sp) -j _fi_40 -_if_40: -#Block -#Assignment -#Point-Dispatch -#push object -lw $a0, 244($sp) -sw $a0, 4($sp) -#Args: 0 -#Binary -lw $a0, 256($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Binary -#Binary -#Point-Dispatch -#push object -lw $a0, 280($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 292($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 16 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 308($sp) -sw $t1, 8($sp) -#Assignment -lw $a0, 312($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -lw $t1, 312($sp) -sw $t1, -4($sp) -lw $a0, 4($sp) -sw $a0, 80($sp) -lw $a0, 4($sp) -sw $a0, 220($sp) -_fi_40: -lw $a0, 4($sp) -sw $a0, 244($sp) -j _fi_38 -_if_38: -#Block -#Assignment -#Point-Dispatch -#push object -lw $a0, 324($sp) -sw $a0, 4($sp) -#Args: 0 -#Binary -lw $a0, 336($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -add $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Args: 1 -#Binary -#Binary -#Point-Dispatch -#push object -lw $a0, 360($sp) -sw $a0, 4($sp) -#Dispatch in place -#obj 2 offset 1 result String.length -jal String.length -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 372($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Integer -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -sw $a0, 0($sp) -addiu $sp, $sp, -4 -lw $t1, 4($sp) -sub $a0, $a0, $t1 -sw $a0, 4($sp) -addiu $sp, $sp, 4 -#Dispatch in place -#obj 16 offset 1 result String.substr -jal String.substr -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 388($sp) -sw $t1, 8($sp) -#Assignment -lw $a0, 392($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -lw $t1, 392($sp) -sw $t1, -4($sp) -lw $a0, 4($sp) -sw $a0, 80($sp) -lw $a0, 4($sp) -sw $a0, 324($sp) -_fi_38: -lw $a0, 392($sp) -sw $a0, 17171717($sp) -j _loop_36 -_pool_36: -lw $a0, 72($sp) -sw $a0, 9999($sp) -lw $a0, 40($sp) -sw $a0, 7777($sp) -lw $a0, 36($sp) -lw $t1, -4($a0) -sw $t1, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -lw $a0, 36($sp) -sw $a0, 4444($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Main.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Self-Dispatch -#Dispatch in place -#obj 1 offset 3 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -lw $t1, 12($sp) -sw $t1, 4($sp) -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -Main.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, Main_name -jr $ra -Main.main: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Block -#Point-Dispatch -#push object -lw $a0, 20($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -#Point-Dispatch -#push object -lw $a0, 32($sp) -lw $t1, 4($a0) -sw $t1, 4($sp) -#Dispatch in place -#obj 2 offset 1 result -1 -jal IO.out_string -sw $a0, 4($sp) -addi $sp, $sp, 4 -lw $a0, 4($sp) -sw $a0, 28($sp) -BoolOp.Constructor: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -lw $ra, 8($sp) -addiu $sp, $sp, 12 -lw $fp, 0($sp) -jr $ra -BoolOp.type_name: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -la $a1, BoolOp_name -jr $ra -BoolOp.and: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -lw $a0, 20($sp) -sw $a0, 4($sp) -lw $a0, 4($fp) -bnez $a0, _if_44 -li $a0, 0 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 16($sp) -j _fi_44 -_if_44: -lw $a0, 32($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 24($sp) -_fi_44: -lw $ra, 12($sp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra -BoolOp.or: -move $fp, $sp -sw $ra, 0($sp) -addiu $sp, $sp, -4 -#Condition -lw $a0, 20($sp) -sw $a0, 4($sp) -lw $a0, 4($fp) -bnez $a0, _if_45 -lw $a0, 24($sp) -sw $a0, 4($sp) -lw $a0, 4($sp) -sw $a0, 16($sp) -j _fi_45 -_if_45: -li $a0, 1 -sw $a0, ($sp) -addiu $sp, $sp, -4 -lw $a0, 4($sp) -sw $a0, 24($sp) -_fi_45: -lw $ra, 12($sp) -addiu $sp, $sp, 16 -lw $fp, 0($sp) -jr $ra li $v0, 10 syscall diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips new file mode 100644 index 00000000..86fe63f2 --- /dev/null +++ b/tests/codegen/hairyscary.mips @@ -0,0 +1,9 @@ +.data +s_0: .asciiz"17141611714163171416511714161171416317141653117141611714163171416511714161171416317141653171416117141631714165171416" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips new file mode 100644 index 00000000..f8e7b8ff --- /dev/null +++ b/tests/codegen/hello_world.mips @@ -0,0 +1,10 @@ +.data +s_0: .asciiz"Hello, World. +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips new file mode 100644 index 00000000..16b7e555 --- /dev/null +++ b/tests/codegen/io.mips @@ -0,0 +1,30 @@ +.data +s_0: .asciiz"A: Hello world +" +s_1: .asciiz"B: Hello world +" +s_2: .asciiz"C: Hello world +" +s_3: .asciiz"D: Hello world +" +s_4: .asciiz"Done. +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 4 +la $a0, s_1 +syscall +li $v0, 4 +la $a0, s_2 +syscall +li $v0, 4 +la $a0, s_3 +syscall +li $v0, 4 +la $a0, s_4 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips new file mode 100644 index 00000000..e7f51645 --- /dev/null +++ b/tests/codegen/life.mips @@ -0,0 +1,3894 @@ +.data +s_0: .asciiz"Welcome to the Game of Life. +" +s_1: .asciiz"There are many initial states to choose from. +" +s_2: .asciiz" +" +s_3: .asciiz" +" +s_4: .asciiz"Would you like to choose a background pattern? +" +s_5: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_6: .asciiz"Please chose a number: +" +s_7: .asciiz" 1: A cross +" +s_8: .asciiz" 2: A slash from the upper left to lower right +" +s_9: .asciiz" 3: A slash from the upper right to lower left +" +s_10: .asciiz" 4: An X +" +s_11: .asciiz" 5: A greater than sign +" +s_12: .asciiz" 6: A less than sign +" +s_13: .asciiz" 7: Two greater than signs +" +s_14: .asciiz" 8: Two less than signs +" +s_15: .asciiz" 9: A 'V' +" +s_16: .asciiz" 10: An inverse 'V' +" +s_17: .asciiz" 11: Numbers 9 and 10 combined +" +s_18: .asciiz" 12: A full grid +" +s_19: .asciiz" 13: A 'T' +" +s_20: .asciiz" 14: A plus '+' +" +s_21: .asciiz" 15: A 'W' +" +s_22: .asciiz" 16: An 'M' +" +s_23: .asciiz" 17: An 'E' +" +s_24: .asciiz" 18: A '3' +" +s_25: .asciiz" 19: An 'O' +" +s_26: .asciiz" 20: An '8' +" +s_27: .asciiz" 21: An 'S' +" +s_28: .asciiz"Your choice => +" +s_29: .asciiz" +" +s_30: .asciiz" XX +" +s_31: .asciiz"XXXX +" +s_32: .asciiz"XXXX +" +s_33: .asciiz" XX +" +s_34: .asciiz" +" +s_35: .asciiz"Would you like to continue with the next generation? +" +s_36: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_37: .asciiz" +" +s_38: .asciiz" +" +s_39: .asciiz"Would you like to choose a background pattern? +" +s_40: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_41: .asciiz"Please chose a number: +" +s_42: .asciiz" 1: A cross +" +s_43: .asciiz" 2: A slash from the upper left to lower right +" +s_44: .asciiz" 3: A slash from the upper right to lower left +" +s_45: .asciiz" 4: An X +" +s_46: .asciiz" 5: A greater than sign +" +s_47: .asciiz" 6: A less than sign +" +s_48: .asciiz" 7: Two greater than signs +" +s_49: .asciiz" 8: Two less than signs +" +s_50: .asciiz" 9: A 'V' +" +s_51: .asciiz" 10: An inverse 'V' +" +s_52: .asciiz" 11: Numbers 9 and 10 combined +" +s_53: .asciiz" 12: A full grid +" +s_54: .asciiz" 13: A 'T' +" +s_55: .asciiz" 14: A plus '+' +" +s_56: .asciiz" 15: A 'W' +" +s_57: .asciiz" 16: An 'M' +" +s_58: .asciiz" 17: An 'E' +" +s_59: .asciiz" 18: A '3' +" +s_60: .asciiz" 19: An 'O' +" +s_61: .asciiz" 20: An '8' +" +s_62: .asciiz" 21: An 'S' +" +s_63: .asciiz"Your choice => +" +s_64: .asciiz" +" +s_65: .asciiz" X +" +s_66: .asciiz" X +" +s_67: .asciiz" X +" +s_68: .asciiz" X +" +s_69: .asciiz"X +" +s_70: .asciiz" +" +s_71: .asciiz"Would you like to continue with the next generation? +" +s_72: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_73: .asciiz" +" +s_74: .asciiz" +" +s_75: .asciiz"Would you like to choose a background pattern? +" +s_76: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_77: .asciiz"Please chose a number: +" +s_78: .asciiz" 1: A cross +" +s_79: .asciiz" 2: A slash from the upper left to lower right +" +s_80: .asciiz" 3: A slash from the upper right to lower left +" +s_81: .asciiz" 4: An X +" +s_82: .asciiz" 5: A greater than sign +" +s_83: .asciiz" 6: A less than sign +" +s_84: .asciiz" 7: Two greater than signs +" +s_85: .asciiz" 8: Two less than signs +" +s_86: .asciiz" 9: A 'V' +" +s_87: .asciiz" 10: An inverse 'V' +" +s_88: .asciiz" 11: Numbers 9 and 10 combined +" +s_89: .asciiz" 12: A full grid +" +s_90: .asciiz" 13: A 'T' +" +s_91: .asciiz" 14: A plus '+' +" +s_92: .asciiz" 15: A 'W' +" +s_93: .asciiz" 16: An 'M' +" +s_94: .asciiz" 17: An 'E' +" +s_95: .asciiz" 18: A '3' +" +s_96: .asciiz" 19: An 'O' +" +s_97: .asciiz" 20: An '8' +" +s_98: .asciiz" 21: An 'S' +" +s_99: .asciiz"Your choice => +" +s_100: .asciiz" +" +s_101: .asciiz"X +" +s_102: .asciiz" X +" +s_103: .asciiz" X +" +s_104: .asciiz" X +" +s_105: .asciiz" X +" +s_106: .asciiz" +" +s_107: .asciiz"Would you like to continue with the next generation? +" +s_108: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_109: .asciiz" +" +s_110: .asciiz" +" +s_111: .asciiz"Would you like to choose a background pattern? +" +s_112: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_113: .asciiz"Please chose a number: +" +s_114: .asciiz" 1: A cross +" +s_115: .asciiz" 2: A slash from the upper left to lower right +" +s_116: .asciiz" 3: A slash from the upper right to lower left +" +s_117: .asciiz" 4: An X +" +s_118: .asciiz" 5: A greater than sign +" +s_119: .asciiz" 6: A less than sign +" +s_120: .asciiz" 7: Two greater than signs +" +s_121: .asciiz" 8: Two less than signs +" +s_122: .asciiz" 9: A 'V' +" +s_123: .asciiz" 10: An inverse 'V' +" +s_124: .asciiz" 11: Numbers 9 and 10 combined +" +s_125: .asciiz" 12: A full grid +" +s_126: .asciiz" 13: A 'T' +" +s_127: .asciiz" 14: A plus '+' +" +s_128: .asciiz" 15: A 'W' +" +s_129: .asciiz" 16: An 'M' +" +s_130: .asciiz" 17: An 'E' +" +s_131: .asciiz" 18: A '3' +" +s_132: .asciiz" 19: An 'O' +" +s_133: .asciiz" 20: An '8' +" +s_134: .asciiz" 21: An 'S' +" +s_135: .asciiz"Your choice => +" +s_136: .asciiz" +" +s_137: .asciiz"X X +" +s_138: .asciiz" X X +" +s_139: .asciiz" X +" +s_140: .asciiz" X X +" +s_141: .asciiz"X X +" +s_142: .asciiz" +" +s_143: .asciiz"Would you like to continue with the next generation? +" +s_144: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_145: .asciiz" +" +s_146: .asciiz" +" +s_147: .asciiz"Would you like to choose a background pattern? +" +s_148: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_149: .asciiz"Please chose a number: +" +s_150: .asciiz" 1: A cross +" +s_151: .asciiz" 2: A slash from the upper left to lower right +" +s_152: .asciiz" 3: A slash from the upper right to lower left +" +s_153: .asciiz" 4: An X +" +s_154: .asciiz" 5: A greater than sign +" +s_155: .asciiz" 6: A less than sign +" +s_156: .asciiz" 7: Two greater than signs +" +s_157: .asciiz" 8: Two less than signs +" +s_158: .asciiz" 9: A 'V' +" +s_159: .asciiz" 10: An inverse 'V' +" +s_160: .asciiz" 11: Numbers 9 and 10 combined +" +s_161: .asciiz" 12: A full grid +" +s_162: .asciiz" 13: A 'T' +" +s_163: .asciiz" 14: A plus '+' +" +s_164: .asciiz" 15: A 'W' +" +s_165: .asciiz" 16: An 'M' +" +s_166: .asciiz" 17: An 'E' +" +s_167: .asciiz" 18: A '3' +" +s_168: .asciiz" 19: An 'O' +" +s_169: .asciiz" 20: An '8' +" +s_170: .asciiz" 21: An 'S' +" +s_171: .asciiz"Your choice => +" +s_172: .asciiz" +" +s_173: .asciiz"X +" +s_174: .asciiz" X +" +s_175: .asciiz" X +" +s_176: .asciiz" X +" +s_177: .asciiz"X +" +s_178: .asciiz" +" +s_179: .asciiz"Would you like to continue with the next generation? +" +s_180: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_181: .asciiz" +" +s_182: .asciiz" +" +s_183: .asciiz"Would you like to choose a background pattern? +" +s_184: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_185: .asciiz"Please chose a number: +" +s_186: .asciiz" 1: A cross +" +s_187: .asciiz" 2: A slash from the upper left to lower right +" +s_188: .asciiz" 3: A slash from the upper right to lower left +" +s_189: .asciiz" 4: An X +" +s_190: .asciiz" 5: A greater than sign +" +s_191: .asciiz" 6: A less than sign +" +s_192: .asciiz" 7: Two greater than signs +" +s_193: .asciiz" 8: Two less than signs +" +s_194: .asciiz" 9: A 'V' +" +s_195: .asciiz" 10: An inverse 'V' +" +s_196: .asciiz" 11: Numbers 9 and 10 combined +" +s_197: .asciiz" 12: A full grid +" +s_198: .asciiz" 13: A 'T' +" +s_199: .asciiz" 14: A plus '+' +" +s_200: .asciiz" 15: A 'W' +" +s_201: .asciiz" 16: An 'M' +" +s_202: .asciiz" 17: An 'E' +" +s_203: .asciiz" 18: A '3' +" +s_204: .asciiz" 19: An 'O' +" +s_205: .asciiz" 20: An '8' +" +s_206: .asciiz" 21: An 'S' +" +s_207: .asciiz"Your choice => +" +s_208: .asciiz" +" +s_209: .asciiz" X +" +s_210: .asciiz" X +" +s_211: .asciiz" X +" +s_212: .asciiz" X +" +s_213: .asciiz" X +" +s_214: .asciiz" +" +s_215: .asciiz"Would you like to continue with the next generation? +" +s_216: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_217: .asciiz" +" +s_218: .asciiz" +" +s_219: .asciiz"Would you like to choose a background pattern? +" +s_220: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_221: .asciiz"Please chose a number: +" +s_222: .asciiz" 1: A cross +" +s_223: .asciiz" 2: A slash from the upper left to lower right +" +s_224: .asciiz" 3: A slash from the upper right to lower left +" +s_225: .asciiz" 4: An X +" +s_226: .asciiz" 5: A greater than sign +" +s_227: .asciiz" 6: A less than sign +" +s_228: .asciiz" 7: Two greater than signs +" +s_229: .asciiz" 8: Two less than signs +" +s_230: .asciiz" 9: A 'V' +" +s_231: .asciiz" 10: An inverse 'V' +" +s_232: .asciiz" 11: Numbers 9 and 10 combined +" +s_233: .asciiz" 12: A full grid +" +s_234: .asciiz" 13: A 'T' +" +s_235: .asciiz" 14: A plus '+' +" +s_236: .asciiz" 15: A 'W' +" +s_237: .asciiz" 16: An 'M' +" +s_238: .asciiz" 17: An 'E' +" +s_239: .asciiz" 18: A '3' +" +s_240: .asciiz" 19: An 'O' +" +s_241: .asciiz" 20: An '8' +" +s_242: .asciiz" 21: An 'S' +" +s_243: .asciiz"Your choice => +" +s_244: .asciiz" +" +s_245: .asciiz"X X +" +s_246: .asciiz" X X +" +s_247: .asciiz"X X +" +s_248: .asciiz" +" +s_249: .asciiz" +" +s_250: .asciiz"Would you like to continue with the next generation? +" +s_251: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_252: .asciiz" +" +s_253: .asciiz" +" +s_254: .asciiz"Would you like to choose a background pattern? +" +s_255: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_256: .asciiz"Please chose a number: +" +s_257: .asciiz" 1: A cross +" +s_258: .asciiz" 2: A slash from the upper left to lower right +" +s_259: .asciiz" 3: A slash from the upper right to lower left +" +s_260: .asciiz" 4: An X +" +s_261: .asciiz" 5: A greater than sign +" +s_262: .asciiz" 6: A less than sign +" +s_263: .asciiz" 7: Two greater than signs +" +s_264: .asciiz" 8: Two less than signs +" +s_265: .asciiz" 9: A 'V' +" +s_266: .asciiz" 10: An inverse 'V' +" +s_267: .asciiz" 11: Numbers 9 and 10 combined +" +s_268: .asciiz" 12: A full grid +" +s_269: .asciiz" 13: A 'T' +" +s_270: .asciiz" 14: A plus '+' +" +s_271: .asciiz" 15: A 'W' +" +s_272: .asciiz" 16: An 'M' +" +s_273: .asciiz" 17: An 'E' +" +s_274: .asciiz" 18: A '3' +" +s_275: .asciiz" 19: An 'O' +" +s_276: .asciiz" 20: An '8' +" +s_277: .asciiz" 21: An 'S' +" +s_278: .asciiz"Your choice => +" +s_279: .asciiz" +" +s_280: .asciiz" X X +" +s_281: .asciiz"X X +" +s_282: .asciiz" X X +" +s_283: .asciiz" +" +s_284: .asciiz" +" +s_285: .asciiz"Would you like to continue with the next generation? +" +s_286: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_287: .asciiz" +" +s_288: .asciiz" +" +s_289: .asciiz"Would you like to choose a background pattern? +" +s_290: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_291: .asciiz"Please chose a number: +" +s_292: .asciiz" 1: A cross +" +s_293: .asciiz" 2: A slash from the upper left to lower right +" +s_294: .asciiz" 3: A slash from the upper right to lower left +" +s_295: .asciiz" 4: An X +" +s_296: .asciiz" 5: A greater than sign +" +s_297: .asciiz" 6: A less than sign +" +s_298: .asciiz" 7: Two greater than signs +" +s_299: .asciiz" 8: Two less than signs +" +s_300: .asciiz" 9: A 'V' +" +s_301: .asciiz" 10: An inverse 'V' +" +s_302: .asciiz" 11: Numbers 9 and 10 combined +" +s_303: .asciiz" 12: A full grid +" +s_304: .asciiz" 13: A 'T' +" +s_305: .asciiz" 14: A plus '+' +" +s_306: .asciiz" 15: A 'W' +" +s_307: .asciiz" 16: An 'M' +" +s_308: .asciiz" 17: An 'E' +" +s_309: .asciiz" 18: A '3' +" +s_310: .asciiz" 19: An 'O' +" +s_311: .asciiz" 20: An '8' +" +s_312: .asciiz" 21: An 'S' +" +s_313: .asciiz"Your choice => +" +s_314: .asciiz" +" +s_315: .asciiz"X X +" +s_316: .asciiz" X X +" +s_317: .asciiz" X +" +s_318: .asciiz" +" +s_319: .asciiz"Would you like to continue with the next generation? +" +s_320: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_321: .asciiz" +" +s_322: .asciiz" +" +s_323: .asciiz"Would you like to choose a background pattern? +" +s_324: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_325: .asciiz"Please chose a number: +" +s_326: .asciiz" 1: A cross +" +s_327: .asciiz" 2: A slash from the upper left to lower right +" +s_328: .asciiz" 3: A slash from the upper right to lower left +" +s_329: .asciiz" 4: An X +" +s_330: .asciiz" 5: A greater than sign +" +s_331: .asciiz" 6: A less than sign +" +s_332: .asciiz" 7: Two greater than signs +" +s_333: .asciiz" 8: Two less than signs +" +s_334: .asciiz" 9: A 'V' +" +s_335: .asciiz" 10: An inverse 'V' +" +s_336: .asciiz" 11: Numbers 9 and 10 combined +" +s_337: .asciiz" 12: A full grid +" +s_338: .asciiz" 13: A 'T' +" +s_339: .asciiz" 14: A plus '+' +" +s_340: .asciiz" 15: A 'W' +" +s_341: .asciiz" 16: An 'M' +" +s_342: .asciiz" 17: An 'E' +" +s_343: .asciiz" 18: A '3' +" +s_344: .asciiz" 19: An 'O' +" +s_345: .asciiz" 20: An '8' +" +s_346: .asciiz" 21: An 'S' +" +s_347: .asciiz"Your choice => +" +s_348: .asciiz" +" +s_349: .asciiz" X +" +s_350: .asciiz" X X +" +s_351: .asciiz"X X +" +s_352: .asciiz" +" +s_353: .asciiz"Would you like to continue with the next generation? +" +s_354: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_355: .asciiz" +" +s_356: .asciiz" +" +s_357: .asciiz"Would you like to choose a background pattern? +" +s_358: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_359: .asciiz"Please chose a number: +" +s_360: .asciiz" 1: A cross +" +s_361: .asciiz" 2: A slash from the upper left to lower right +" +s_362: .asciiz" 3: A slash from the upper right to lower left +" +s_363: .asciiz" 4: An X +" +s_364: .asciiz" 5: A greater than sign +" +s_365: .asciiz" 6: A less than sign +" +s_366: .asciiz" 7: Two greater than signs +" +s_367: .asciiz" 8: Two less than signs +" +s_368: .asciiz" 9: A 'V' +" +s_369: .asciiz" 10: An inverse 'V' +" +s_370: .asciiz" 11: Numbers 9 and 10 combined +" +s_371: .asciiz" 12: A full grid +" +s_372: .asciiz" 13: A 'T' +" +s_373: .asciiz" 14: A plus '+' +" +s_374: .asciiz" 15: A 'W' +" +s_375: .asciiz" 16: An 'M' +" +s_376: .asciiz" 17: An 'E' +" +s_377: .asciiz" 18: A '3' +" +s_378: .asciiz" 19: An 'O' +" +s_379: .asciiz" 20: An '8' +" +s_380: .asciiz" 21: An 'S' +" +s_381: .asciiz"Your choice => +" +s_382: .asciiz" +" +s_383: .asciiz"X X X +" +s_384: .asciiz" X X +" +s_385: .asciiz"X X X +" +s_386: .asciiz" +" +s_387: .asciiz"Would you like to continue with the next generation? +" +s_388: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_389: .asciiz" +" +s_390: .asciiz" +" +s_391: .asciiz"Would you like to choose a background pattern? +" +s_392: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_393: .asciiz"Please chose a number: +" +s_394: .asciiz" 1: A cross +" +s_395: .asciiz" 2: A slash from the upper left to lower right +" +s_396: .asciiz" 3: A slash from the upper right to lower left +" +s_397: .asciiz" 4: An X +" +s_398: .asciiz" 5: A greater than sign +" +s_399: .asciiz" 6: A less than sign +" +s_400: .asciiz" 7: Two greater than signs +" +s_401: .asciiz" 8: Two less than signs +" +s_402: .asciiz" 9: A 'V' +" +s_403: .asciiz" 10: An inverse 'V' +" +s_404: .asciiz" 11: Numbers 9 and 10 combined +" +s_405: .asciiz" 12: A full grid +" +s_406: .asciiz" 13: A 'T' +" +s_407: .asciiz" 14: A plus '+' +" +s_408: .asciiz" 15: A 'W' +" +s_409: .asciiz" 16: An 'M' +" +s_410: .asciiz" 17: An 'E' +" +s_411: .asciiz" 18: A '3' +" +s_412: .asciiz" 19: An 'O' +" +s_413: .asciiz" 20: An '8' +" +s_414: .asciiz" 21: An 'S' +" +s_415: .asciiz"Your choice => +" +s_416: .asciiz" +" +s_417: .asciiz"XXXXX +" +s_418: .asciiz"XXXXX +" +s_419: .asciiz"XXXXX +" +s_420: .asciiz"XXXXX +" +s_421: .asciiz"XXXXX +" +s_422: .asciiz" +" +s_423: .asciiz"Would you like to continue with the next generation? +" +s_424: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_425: .asciiz" +" +s_426: .asciiz" +" +s_427: .asciiz"Would you like to choose a background pattern? +" +s_428: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_429: .asciiz"Please chose a number: +" +s_430: .asciiz" 1: A cross +" +s_431: .asciiz" 2: A slash from the upper left to lower right +" +s_432: .asciiz" 3: A slash from the upper right to lower left +" +s_433: .asciiz" 4: An X +" +s_434: .asciiz" 5: A greater than sign +" +s_435: .asciiz" 6: A less than sign +" +s_436: .asciiz" 7: Two greater than signs +" +s_437: .asciiz" 8: Two less than signs +" +s_438: .asciiz" 9: A 'V' +" +s_439: .asciiz" 10: An inverse 'V' +" +s_440: .asciiz" 11: Numbers 9 and 10 combined +" +s_441: .asciiz" 12: A full grid +" +s_442: .asciiz" 13: A 'T' +" +s_443: .asciiz" 14: A plus '+' +" +s_444: .asciiz" 15: A 'W' +" +s_445: .asciiz" 16: An 'M' +" +s_446: .asciiz" 17: An 'E' +" +s_447: .asciiz" 18: A '3' +" +s_448: .asciiz" 19: An 'O' +" +s_449: .asciiz" 20: An '8' +" +s_450: .asciiz" 21: An 'S' +" +s_451: .asciiz"Your choice => +" +s_452: .asciiz" +" +s_453: .asciiz"XXXXX +" +s_454: .asciiz" X +" +s_455: .asciiz" X +" +s_456: .asciiz" X +" +s_457: .asciiz" X +" +s_458: .asciiz" +" +s_459: .asciiz"Would you like to continue with the next generation? +" +s_460: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_461: .asciiz" +" +s_462: .asciiz" +" +s_463: .asciiz"Would you like to choose a background pattern? +" +s_464: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_465: .asciiz"Please chose a number: +" +s_466: .asciiz" 1: A cross +" +s_467: .asciiz" 2: A slash from the upper left to lower right +" +s_468: .asciiz" 3: A slash from the upper right to lower left +" +s_469: .asciiz" 4: An X +" +s_470: .asciiz" 5: A greater than sign +" +s_471: .asciiz" 6: A less than sign +" +s_472: .asciiz" 7: Two greater than signs +" +s_473: .asciiz" 8: Two less than signs +" +s_474: .asciiz" 9: A 'V' +" +s_475: .asciiz" 10: An inverse 'V' +" +s_476: .asciiz" 11: Numbers 9 and 10 combined +" +s_477: .asciiz" 12: A full grid +" +s_478: .asciiz" 13: A 'T' +" +s_479: .asciiz" 14: A plus '+' +" +s_480: .asciiz" 15: A 'W' +" +s_481: .asciiz" 16: An 'M' +" +s_482: .asciiz" 17: An 'E' +" +s_483: .asciiz" 18: A '3' +" +s_484: .asciiz" 19: An 'O' +" +s_485: .asciiz" 20: An '8' +" +s_486: .asciiz" 21: An 'S' +" +s_487: .asciiz"Your choice => +" +s_488: .asciiz" +" +s_489: .asciiz" X +" +s_490: .asciiz" X +" +s_491: .asciiz"XXXXX +" +s_492: .asciiz" X +" +s_493: .asciiz" X +" +s_494: .asciiz" +" +s_495: .asciiz"Would you like to continue with the next generation? +" +s_496: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_497: .asciiz" +" +s_498: .asciiz" +" +s_499: .asciiz"Would you like to choose a background pattern? +" +s_500: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_501: .asciiz"Please chose a number: +" +s_502: .asciiz" 1: A cross +" +s_503: .asciiz" 2: A slash from the upper left to lower right +" +s_504: .asciiz" 3: A slash from the upper right to lower left +" +s_505: .asciiz" 4: An X +" +s_506: .asciiz" 5: A greater than sign +" +s_507: .asciiz" 6: A less than sign +" +s_508: .asciiz" 7: Two greater than signs +" +s_509: .asciiz" 8: Two less than signs +" +s_510: .asciiz" 9: A 'V' +" +s_511: .asciiz" 10: An inverse 'V' +" +s_512: .asciiz" 11: Numbers 9 and 10 combined +" +s_513: .asciiz" 12: A full grid +" +s_514: .asciiz" 13: A 'T' +" +s_515: .asciiz" 14: A plus '+' +" +s_516: .asciiz" 15: A 'W' +" +s_517: .asciiz" 16: An 'M' +" +s_518: .asciiz" 17: An 'E' +" +s_519: .asciiz" 18: A '3' +" +s_520: .asciiz" 19: An 'O' +" +s_521: .asciiz" 20: An '8' +" +s_522: .asciiz" 21: An 'S' +" +s_523: .asciiz"Your choice => +" +s_524: .asciiz" +" +s_525: .asciiz"X X +" +s_526: .asciiz" X X X +" +s_527: .asciiz" X X +" +s_528: .asciiz" +" +s_529: .asciiz"Would you like to continue with the next generation? +" +s_530: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_531: .asciiz" +" +s_532: .asciiz" +" +s_533: .asciiz"Would you like to choose a background pattern? +" +s_534: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_535: .asciiz"Please chose a number: +" +s_536: .asciiz" 1: A cross +" +s_537: .asciiz" 2: A slash from the upper left to lower right +" +s_538: .asciiz" 3: A slash from the upper right to lower left +" +s_539: .asciiz" 4: An X +" +s_540: .asciiz" 5: A greater than sign +" +s_541: .asciiz" 6: A less than sign +" +s_542: .asciiz" 7: Two greater than signs +" +s_543: .asciiz" 8: Two less than signs +" +s_544: .asciiz" 9: A 'V' +" +s_545: .asciiz" 10: An inverse 'V' +" +s_546: .asciiz" 11: Numbers 9 and 10 combined +" +s_547: .asciiz" 12: A full grid +" +s_548: .asciiz" 13: A 'T' +" +s_549: .asciiz" 14: A plus '+' +" +s_550: .asciiz" 15: A 'W' +" +s_551: .asciiz" 16: An 'M' +" +s_552: .asciiz" 17: An 'E' +" +s_553: .asciiz" 18: A '3' +" +s_554: .asciiz" 19: An 'O' +" +s_555: .asciiz" 20: An '8' +" +s_556: .asciiz" 21: An 'S' +" +s_557: .asciiz"Your choice => +" +s_558: .asciiz" +" +s_559: .asciiz" X X +" +s_560: .asciiz" X X X +" +s_561: .asciiz"X X +" +s_562: .asciiz" +" +s_563: .asciiz"Would you like to continue with the next generation? +" +s_564: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_565: .asciiz" +" +s_566: .asciiz" +" +s_567: .asciiz"Would you like to choose a background pattern? +" +s_568: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_569: .asciiz"Please chose a number: +" +s_570: .asciiz" 1: A cross +" +s_571: .asciiz" 2: A slash from the upper left to lower right +" +s_572: .asciiz" 3: A slash from the upper right to lower left +" +s_573: .asciiz" 4: An X +" +s_574: .asciiz" 5: A greater than sign +" +s_575: .asciiz" 6: A less than sign +" +s_576: .asciiz" 7: Two greater than signs +" +s_577: .asciiz" 8: Two less than signs +" +s_578: .asciiz" 9: A 'V' +" +s_579: .asciiz" 10: An inverse 'V' +" +s_580: .asciiz" 11: Numbers 9 and 10 combined +" +s_581: .asciiz" 12: A full grid +" +s_582: .asciiz" 13: A 'T' +" +s_583: .asciiz" 14: A plus '+' +" +s_584: .asciiz" 15: A 'W' +" +s_585: .asciiz" 16: An 'M' +" +s_586: .asciiz" 17: An 'E' +" +s_587: .asciiz" 18: A '3' +" +s_588: .asciiz" 19: An 'O' +" +s_589: .asciiz" 20: An '8' +" +s_590: .asciiz" 21: An 'S' +" +s_591: .asciiz"Your choice => +" +s_592: .asciiz" +" +s_593: .asciiz"XXXX +" +s_594: .asciiz"X +" +s_595: .asciiz"X +" +s_596: .asciiz"XXXX +" +s_597: .asciiz"X +" +s_598: .asciiz"X +" +s_599: .asciiz"XXXX +" +s_600: .asciiz" +" +s_601: .asciiz"Would you like to continue with the next generation? +" +s_602: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_603: .asciiz" +" +s_604: .asciiz" +" +s_605: .asciiz"Would you like to choose a background pattern? +" +s_606: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_607: .asciiz"Please chose a number: +" +s_608: .asciiz" 1: A cross +" +s_609: .asciiz" 2: A slash from the upper left to lower right +" +s_610: .asciiz" 3: A slash from the upper right to lower left +" +s_611: .asciiz" 4: An X +" +s_612: .asciiz" 5: A greater than sign +" +s_613: .asciiz" 6: A less than sign +" +s_614: .asciiz" 7: Two greater than signs +" +s_615: .asciiz" 8: Two less than signs +" +s_616: .asciiz" 9: A 'V' +" +s_617: .asciiz" 10: An inverse 'V' +" +s_618: .asciiz" 11: Numbers 9 and 10 combined +" +s_619: .asciiz" 12: A full grid +" +s_620: .asciiz" 13: A 'T' +" +s_621: .asciiz" 14: A plus '+' +" +s_622: .asciiz" 15: A 'W' +" +s_623: .asciiz" 16: An 'M' +" +s_624: .asciiz" 17: An 'E' +" +s_625: .asciiz" 18: A '3' +" +s_626: .asciiz" 19: An 'O' +" +s_627: .asciiz" 20: An '8' +" +s_628: .asciiz" 21: An 'S' +" +s_629: .asciiz"Your choice => +" +s_630: .asciiz" +" +s_631: .asciiz"XXX +" +s_632: .asciiz" X +" +s_633: .asciiz" X +" +s_634: .asciiz" X +" +s_635: .asciiz" X +" +s_636: .asciiz" X +" +s_637: .asciiz"XXX +" +s_638: .asciiz" +" +s_639: .asciiz"Would you like to continue with the next generation? +" +s_640: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_641: .asciiz" +" +s_642: .asciiz" +" +s_643: .asciiz"Would you like to choose a background pattern? +" +s_644: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_645: .asciiz"Please chose a number: +" +s_646: .asciiz" 1: A cross +" +s_647: .asciiz" 2: A slash from the upper left to lower right +" +s_648: .asciiz" 3: A slash from the upper right to lower left +" +s_649: .asciiz" 4: An X +" +s_650: .asciiz" 5: A greater than sign +" +s_651: .asciiz" 6: A less than sign +" +s_652: .asciiz" 7: Two greater than signs +" +s_653: .asciiz" 8: Two less than signs +" +s_654: .asciiz" 9: A 'V' +" +s_655: .asciiz" 10: An inverse 'V' +" +s_656: .asciiz" 11: Numbers 9 and 10 combined +" +s_657: .asciiz" 12: A full grid +" +s_658: .asciiz" 13: A 'T' +" +s_659: .asciiz" 14: A plus '+' +" +s_660: .asciiz" 15: A 'W' +" +s_661: .asciiz" 16: An 'M' +" +s_662: .asciiz" 17: An 'E' +" +s_663: .asciiz" 18: A '3' +" +s_664: .asciiz" 19: An 'O' +" +s_665: .asciiz" 20: An '8' +" +s_666: .asciiz" 21: An 'S' +" +s_667: .asciiz"Your choice => +" +s_668: .asciiz" +" +s_669: .asciiz" XX +" +s_670: .asciiz"X X +" +s_671: .asciiz"X X +" +s_672: .asciiz" XX +" +s_673: .asciiz" +" +s_674: .asciiz"Would you like to continue with the next generation? +" +s_675: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_676: .asciiz" +" +s_677: .asciiz" +" +s_678: .asciiz"Would you like to choose a background pattern? +" +s_679: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_680: .asciiz"Please chose a number: +" +s_681: .asciiz" 1: A cross +" +s_682: .asciiz" 2: A slash from the upper left to lower right +" +s_683: .asciiz" 3: A slash from the upper right to lower left +" +s_684: .asciiz" 4: An X +" +s_685: .asciiz" 5: A greater than sign +" +s_686: .asciiz" 6: A less than sign +" +s_687: .asciiz" 7: Two greater than signs +" +s_688: .asciiz" 8: Two less than signs +" +s_689: .asciiz" 9: A 'V' +" +s_690: .asciiz" 10: An inverse 'V' +" +s_691: .asciiz" 11: Numbers 9 and 10 combined +" +s_692: .asciiz" 12: A full grid +" +s_693: .asciiz" 13: A 'T' +" +s_694: .asciiz" 14: A plus '+' +" +s_695: .asciiz" 15: A 'W' +" +s_696: .asciiz" 16: An 'M' +" +s_697: .asciiz" 17: An 'E' +" +s_698: .asciiz" 18: A '3' +" +s_699: .asciiz" 19: An 'O' +" +s_700: .asciiz" 20: An '8' +" +s_701: .asciiz" 21: An 'S' +" +s_702: .asciiz"Your choice => +" +s_703: .asciiz" +" +s_704: .asciiz" XX +" +s_705: .asciiz"X X +" +s_706: .asciiz"X X +" +s_707: .asciiz" XX +" +s_708: .asciiz"X X +" +s_709: .asciiz"X X +" +s_710: .asciiz" XX +" +s_711: .asciiz" +" +s_712: .asciiz"Would you like to continue with the next generation? +" +s_713: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_714: .asciiz" +" +s_715: .asciiz" +" +s_716: .asciiz"Would you like to choose a background pattern? +" +s_717: .asciiz"Please use lowercase y or n for your answer [n]: +" +s_718: .asciiz"Please chose a number: +" +s_719: .asciiz" 1: A cross +" +s_720: .asciiz" 2: A slash from the upper left to lower right +" +s_721: .asciiz" 3: A slash from the upper right to lower left +" +s_722: .asciiz" 4: An X +" +s_723: .asciiz" 5: A greater than sign +" +s_724: .asciiz" 6: A less than sign +" +s_725: .asciiz" 7: Two greater than signs +" +s_726: .asciiz" 8: Two less than signs +" +s_727: .asciiz" 9: A 'V' +" +s_728: .asciiz" 10: An inverse 'V' +" +s_729: .asciiz" 11: Numbers 9 and 10 combined +" +s_730: .asciiz" 12: A full grid +" +s_731: .asciiz" 13: A 'T' +" +s_732: .asciiz" 14: A plus '+' +" +s_733: .asciiz" 15: A 'W' +" +s_734: .asciiz" 16: An 'M' +" +s_735: .asciiz" 17: An 'E' +" +s_736: .asciiz" 18: A '3' +" +s_737: .asciiz" 19: An 'O' +" +s_738: .asciiz" 20: An '8' +" +s_739: .asciiz" 21: An 'S' +" +s_740: .asciiz"Your choice => +" +s_741: .asciiz" +" +s_742: .asciiz" XXX +" +s_743: .asciiz"X +" +s_744: .asciiz"X +" +s_745: .asciiz" XX +" +s_746: .asciiz" X +" +s_747: .asciiz" X +" +s_748: .asciiz"XXX +" +s_749: .asciiz" +" +s_750: .asciiz"Would you like to continue with the next generation? +" +s_751: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_752: .asciiz" +" +s_753: .asciiz"-XX- +" +s_754: .asciiz"X-X- +" +s_755: .asciiz"X--- +" +s_756: .asciiz"-XX- +" +s_757: .asciiz"---X +" +s_758: .asciiz"-X-X +" +s_759: .asciiz"-XX- +" +s_760: .asciiz" +" +s_761: .asciiz"Would you like to continue with the next generation? +" +s_762: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_763: .asciiz" +" +s_764: .asciiz"-XX- +" +s_765: .asciiz"X-X- +" +s_766: .asciiz"X-X- +" +s_767: .asciiz"-XX- +" +s_768: .asciiz"-X-X +" +s_769: .asciiz"-X-X +" +s_770: .asciiz"-XX- +" +s_771: .asciiz" +" +s_772: .asciiz"Would you like to continue with the next generation? +" +s_773: .asciiz"Please use lowercase y or n for your answer [y]: +" +s_774: .asciiz" +" +s_775: .asciiz" +" +s_776: .asciiz"Would you like to choose a background pattern? +" +s_777: .asciiz"Please use lowercase y or n for your answer [n]: " +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 4 +la $a0, s_1 +syscall +li $v0, 4 +la $a0, s_2 +syscall +li $v0, 4 +la $a0, s_3 +syscall +li $v0, 4 +la $a0, s_4 +syscall +li $v0, 4 +la $a0, s_5 +syscall +li $v0, 4 +la $a0, s_6 +syscall +li $v0, 4 +la $a0, s_7 +syscall +li $v0, 4 +la $a0, s_8 +syscall +li $v0, 4 +la $a0, s_9 +syscall +li $v0, 4 +la $a0, s_10 +syscall +li $v0, 4 +la $a0, s_11 +syscall +li $v0, 4 +la $a0, s_12 +syscall +li $v0, 4 +la $a0, s_13 +syscall +li $v0, 4 +la $a0, s_14 +syscall +li $v0, 4 +la $a0, s_15 +syscall +li $v0, 4 +la $a0, s_16 +syscall +li $v0, 4 +la $a0, s_17 +syscall +li $v0, 4 +la $a0, s_18 +syscall +li $v0, 4 +la $a0, s_19 +syscall +li $v0, 4 +la $a0, s_20 +syscall +li $v0, 4 +la $a0, s_21 +syscall +li $v0, 4 +la $a0, s_22 +syscall +li $v0, 4 +la $a0, s_23 +syscall +li $v0, 4 +la $a0, s_24 +syscall +li $v0, 4 +la $a0, s_25 +syscall +li $v0, 4 +la $a0, s_26 +syscall +li $v0, 4 +la $a0, s_27 +syscall +li $v0, 4 +la $a0, s_28 +syscall +li $v0, 4 +la $a0, s_29 +syscall +li $v0, 4 +la $a0, s_30 +syscall +li $v0, 4 +la $a0, s_31 +syscall +li $v0, 4 +la $a0, s_32 +syscall +li $v0, 4 +la $a0, s_33 +syscall +li $v0, 4 +la $a0, s_34 +syscall +li $v0, 4 +la $a0, s_35 +syscall +li $v0, 4 +la $a0, s_36 +syscall +li $v0, 4 +la $a0, s_37 +syscall +li $v0, 4 +la $a0, s_38 +syscall +li $v0, 4 +la $a0, s_39 +syscall +li $v0, 4 +la $a0, s_40 +syscall +li $v0, 4 +la $a0, s_41 +syscall +li $v0, 4 +la $a0, s_42 +syscall +li $v0, 4 +la $a0, s_43 +syscall +li $v0, 4 +la $a0, s_44 +syscall +li $v0, 4 +la $a0, s_45 +syscall +li $v0, 4 +la $a0, s_46 +syscall +li $v0, 4 +la $a0, s_47 +syscall +li $v0, 4 +la $a0, s_48 +syscall +li $v0, 4 +la $a0, s_49 +syscall +li $v0, 4 +la $a0, s_50 +syscall +li $v0, 4 +la $a0, s_51 +syscall +li $v0, 4 +la $a0, s_52 +syscall +li $v0, 4 +la $a0, s_53 +syscall +li $v0, 4 +la $a0, s_54 +syscall +li $v0, 4 +la $a0, s_55 +syscall +li $v0, 4 +la $a0, s_56 +syscall +li $v0, 4 +la $a0, s_57 +syscall +li $v0, 4 +la $a0, s_58 +syscall +li $v0, 4 +la $a0, s_59 +syscall +li $v0, 4 +la $a0, s_60 +syscall +li $v0, 4 +la $a0, s_61 +syscall +li $v0, 4 +la $a0, s_62 +syscall +li $v0, 4 +la $a0, s_63 +syscall +li $v0, 4 +la $a0, s_64 +syscall +li $v0, 4 +la $a0, s_65 +syscall +li $v0, 4 +la $a0, s_66 +syscall +li $v0, 4 +la $a0, s_67 +syscall +li $v0, 4 +la $a0, s_68 +syscall +li $v0, 4 +la $a0, s_69 +syscall +li $v0, 4 +la $a0, s_70 +syscall +li $v0, 4 +la $a0, s_71 +syscall +li $v0, 4 +la $a0, s_72 +syscall +li $v0, 4 +la $a0, s_73 +syscall +li $v0, 4 +la $a0, s_74 +syscall +li $v0, 4 +la $a0, s_75 +syscall +li $v0, 4 +la $a0, s_76 +syscall +li $v0, 4 +la $a0, s_77 +syscall +li $v0, 4 +la $a0, s_78 +syscall +li $v0, 4 +la $a0, s_79 +syscall +li $v0, 4 +la $a0, s_80 +syscall +li $v0, 4 +la $a0, s_81 +syscall +li $v0, 4 +la $a0, s_82 +syscall +li $v0, 4 +la $a0, s_83 +syscall +li $v0, 4 +la $a0, s_84 +syscall +li $v0, 4 +la $a0, s_85 +syscall +li $v0, 4 +la $a0, s_86 +syscall +li $v0, 4 +la $a0, s_87 +syscall +li $v0, 4 +la $a0, s_88 +syscall +li $v0, 4 +la $a0, s_89 +syscall +li $v0, 4 +la $a0, s_90 +syscall +li $v0, 4 +la $a0, s_91 +syscall +li $v0, 4 +la $a0, s_92 +syscall +li $v0, 4 +la $a0, s_93 +syscall +li $v0, 4 +la $a0, s_94 +syscall +li $v0, 4 +la $a0, s_95 +syscall +li $v0, 4 +la $a0, s_96 +syscall +li $v0, 4 +la $a0, s_97 +syscall +li $v0, 4 +la $a0, s_98 +syscall +li $v0, 4 +la $a0, s_99 +syscall +li $v0, 4 +la $a0, s_100 +syscall +li $v0, 4 +la $a0, s_101 +syscall +li $v0, 4 +la $a0, s_102 +syscall +li $v0, 4 +la $a0, s_103 +syscall +li $v0, 4 +la $a0, s_104 +syscall +li $v0, 4 +la $a0, s_105 +syscall +li $v0, 4 +la $a0, s_106 +syscall +li $v0, 4 +la $a0, s_107 +syscall +li $v0, 4 +la $a0, s_108 +syscall +li $v0, 4 +la $a0, s_109 +syscall +li $v0, 4 +la $a0, s_110 +syscall +li $v0, 4 +la $a0, s_111 +syscall +li $v0, 4 +la $a0, s_112 +syscall +li $v0, 4 +la $a0, s_113 +syscall +li $v0, 4 +la $a0, s_114 +syscall +li $v0, 4 +la $a0, s_115 +syscall +li $v0, 4 +la $a0, s_116 +syscall +li $v0, 4 +la $a0, s_117 +syscall +li $v0, 4 +la $a0, s_118 +syscall +li $v0, 4 +la $a0, s_119 +syscall +li $v0, 4 +la $a0, s_120 +syscall +li $v0, 4 +la $a0, s_121 +syscall +li $v0, 4 +la $a0, s_122 +syscall +li $v0, 4 +la $a0, s_123 +syscall +li $v0, 4 +la $a0, s_124 +syscall +li $v0, 4 +la $a0, s_125 +syscall +li $v0, 4 +la $a0, s_126 +syscall +li $v0, 4 +la $a0, s_127 +syscall +li $v0, 4 +la $a0, s_128 +syscall +li $v0, 4 +la $a0, s_129 +syscall +li $v0, 4 +la $a0, s_130 +syscall +li $v0, 4 +la $a0, s_131 +syscall +li $v0, 4 +la $a0, s_132 +syscall +li $v0, 4 +la $a0, s_133 +syscall +li $v0, 4 +la $a0, s_134 +syscall +li $v0, 4 +la $a0, s_135 +syscall +li $v0, 4 +la $a0, s_136 +syscall +li $v0, 4 +la $a0, s_137 +syscall +li $v0, 4 +la $a0, s_138 +syscall +li $v0, 4 +la $a0, s_139 +syscall +li $v0, 4 +la $a0, s_140 +syscall +li $v0, 4 +la $a0, s_141 +syscall +li $v0, 4 +la $a0, s_142 +syscall +li $v0, 4 +la $a0, s_143 +syscall +li $v0, 4 +la $a0, s_144 +syscall +li $v0, 4 +la $a0, s_145 +syscall +li $v0, 4 +la $a0, s_146 +syscall +li $v0, 4 +la $a0, s_147 +syscall +li $v0, 4 +la $a0, s_148 +syscall +li $v0, 4 +la $a0, s_149 +syscall +li $v0, 4 +la $a0, s_150 +syscall +li $v0, 4 +la $a0, s_151 +syscall +li $v0, 4 +la $a0, s_152 +syscall +li $v0, 4 +la $a0, s_153 +syscall +li $v0, 4 +la $a0, s_154 +syscall +li $v0, 4 +la $a0, s_155 +syscall +li $v0, 4 +la $a0, s_156 +syscall +li $v0, 4 +la $a0, s_157 +syscall +li $v0, 4 +la $a0, s_158 +syscall +li $v0, 4 +la $a0, s_159 +syscall +li $v0, 4 +la $a0, s_160 +syscall +li $v0, 4 +la $a0, s_161 +syscall +li $v0, 4 +la $a0, s_162 +syscall +li $v0, 4 +la $a0, s_163 +syscall +li $v0, 4 +la $a0, s_164 +syscall +li $v0, 4 +la $a0, s_165 +syscall +li $v0, 4 +la $a0, s_166 +syscall +li $v0, 4 +la $a0, s_167 +syscall +li $v0, 4 +la $a0, s_168 +syscall +li $v0, 4 +la $a0, s_169 +syscall +li $v0, 4 +la $a0, s_170 +syscall +li $v0, 4 +la $a0, s_171 +syscall +li $v0, 4 +la $a0, s_172 +syscall +li $v0, 4 +la $a0, s_173 +syscall +li $v0, 4 +la $a0, s_174 +syscall +li $v0, 4 +la $a0, s_175 +syscall +li $v0, 4 +la $a0, s_176 +syscall +li $v0, 4 +la $a0, s_177 +syscall +li $v0, 4 +la $a0, s_178 +syscall +li $v0, 4 +la $a0, s_179 +syscall +li $v0, 4 +la $a0, s_180 +syscall +li $v0, 4 +la $a0, s_181 +syscall +li $v0, 4 +la $a0, s_182 +syscall +li $v0, 4 +la $a0, s_183 +syscall +li $v0, 4 +la $a0, s_184 +syscall +li $v0, 4 +la $a0, s_185 +syscall +li $v0, 4 +la $a0, s_186 +syscall +li $v0, 4 +la $a0, s_187 +syscall +li $v0, 4 +la $a0, s_188 +syscall +li $v0, 4 +la $a0, s_189 +syscall +li $v0, 4 +la $a0, s_190 +syscall +li $v0, 4 +la $a0, s_191 +syscall +li $v0, 4 +la $a0, s_192 +syscall +li $v0, 4 +la $a0, s_193 +syscall +li $v0, 4 +la $a0, s_194 +syscall +li $v0, 4 +la $a0, s_195 +syscall +li $v0, 4 +la $a0, s_196 +syscall +li $v0, 4 +la $a0, s_197 +syscall +li $v0, 4 +la $a0, s_198 +syscall +li $v0, 4 +la $a0, s_199 +syscall +li $v0, 4 +la $a0, s_200 +syscall +li $v0, 4 +la $a0, s_201 +syscall +li $v0, 4 +la $a0, s_202 +syscall +li $v0, 4 +la $a0, s_203 +syscall +li $v0, 4 +la $a0, s_204 +syscall +li $v0, 4 +la $a0, s_205 +syscall +li $v0, 4 +la $a0, s_206 +syscall +li $v0, 4 +la $a0, s_207 +syscall +li $v0, 4 +la $a0, s_208 +syscall +li $v0, 4 +la $a0, s_209 +syscall +li $v0, 4 +la $a0, s_210 +syscall +li $v0, 4 +la $a0, s_211 +syscall +li $v0, 4 +la $a0, s_212 +syscall +li $v0, 4 +la $a0, s_213 +syscall +li $v0, 4 +la $a0, s_214 +syscall +li $v0, 4 +la $a0, s_215 +syscall +li $v0, 4 +la $a0, s_216 +syscall +li $v0, 4 +la $a0, s_217 +syscall +li $v0, 4 +la $a0, s_218 +syscall +li $v0, 4 +la $a0, s_219 +syscall +li $v0, 4 +la $a0, s_220 +syscall +li $v0, 4 +la $a0, s_221 +syscall +li $v0, 4 +la $a0, s_222 +syscall +li $v0, 4 +la $a0, s_223 +syscall +li $v0, 4 +la $a0, s_224 +syscall +li $v0, 4 +la $a0, s_225 +syscall +li $v0, 4 +la $a0, s_226 +syscall +li $v0, 4 +la $a0, s_227 +syscall +li $v0, 4 +la $a0, s_228 +syscall +li $v0, 4 +la $a0, s_229 +syscall +li $v0, 4 +la $a0, s_230 +syscall +li $v0, 4 +la $a0, s_231 +syscall +li $v0, 4 +la $a0, s_232 +syscall +li $v0, 4 +la $a0, s_233 +syscall +li $v0, 4 +la $a0, s_234 +syscall +li $v0, 4 +la $a0, s_235 +syscall +li $v0, 4 +la $a0, s_236 +syscall +li $v0, 4 +la $a0, s_237 +syscall +li $v0, 4 +la $a0, s_238 +syscall +li $v0, 4 +la $a0, s_239 +syscall +li $v0, 4 +la $a0, s_240 +syscall +li $v0, 4 +la $a0, s_241 +syscall +li $v0, 4 +la $a0, s_242 +syscall +li $v0, 4 +la $a0, s_243 +syscall +li $v0, 4 +la $a0, s_244 +syscall +li $v0, 4 +la $a0, s_245 +syscall +li $v0, 4 +la $a0, s_246 +syscall +li $v0, 4 +la $a0, s_247 +syscall +li $v0, 4 +la $a0, s_248 +syscall +li $v0, 4 +la $a0, s_249 +syscall +li $v0, 4 +la $a0, s_250 +syscall +li $v0, 4 +la $a0, s_251 +syscall +li $v0, 4 +la $a0, s_252 +syscall +li $v0, 4 +la $a0, s_253 +syscall +li $v0, 4 +la $a0, s_254 +syscall +li $v0, 4 +la $a0, s_255 +syscall +li $v0, 4 +la $a0, s_256 +syscall +li $v0, 4 +la $a0, s_257 +syscall +li $v0, 4 +la $a0, s_258 +syscall +li $v0, 4 +la $a0, s_259 +syscall +li $v0, 4 +la $a0, s_260 +syscall +li $v0, 4 +la $a0, s_261 +syscall +li $v0, 4 +la $a0, s_262 +syscall +li $v0, 4 +la $a0, s_263 +syscall +li $v0, 4 +la $a0, s_264 +syscall +li $v0, 4 +la $a0, s_265 +syscall +li $v0, 4 +la $a0, s_266 +syscall +li $v0, 4 +la $a0, s_267 +syscall +li $v0, 4 +la $a0, s_268 +syscall +li $v0, 4 +la $a0, s_269 +syscall +li $v0, 4 +la $a0, s_270 +syscall +li $v0, 4 +la $a0, s_271 +syscall +li $v0, 4 +la $a0, s_272 +syscall +li $v0, 4 +la $a0, s_273 +syscall +li $v0, 4 +la $a0, s_274 +syscall +li $v0, 4 +la $a0, s_275 +syscall +li $v0, 4 +la $a0, s_276 +syscall +li $v0, 4 +la $a0, s_277 +syscall +li $v0, 4 +la $a0, s_278 +syscall +li $v0, 4 +la $a0, s_279 +syscall +li $v0, 4 +la $a0, s_280 +syscall +li $v0, 4 +la $a0, s_281 +syscall +li $v0, 4 +la $a0, s_282 +syscall +li $v0, 4 +la $a0, s_283 +syscall +li $v0, 4 +la $a0, s_284 +syscall +li $v0, 4 +la $a0, s_285 +syscall +li $v0, 4 +la $a0, s_286 +syscall +li $v0, 4 +la $a0, s_287 +syscall +li $v0, 4 +la $a0, s_288 +syscall +li $v0, 4 +la $a0, s_289 +syscall +li $v0, 4 +la $a0, s_290 +syscall +li $v0, 4 +la $a0, s_291 +syscall +li $v0, 4 +la $a0, s_292 +syscall +li $v0, 4 +la $a0, s_293 +syscall +li $v0, 4 +la $a0, s_294 +syscall +li $v0, 4 +la $a0, s_295 +syscall +li $v0, 4 +la $a0, s_296 +syscall +li $v0, 4 +la $a0, s_297 +syscall +li $v0, 4 +la $a0, s_298 +syscall +li $v0, 4 +la $a0, s_299 +syscall +li $v0, 4 +la $a0, s_300 +syscall +li $v0, 4 +la $a0, s_301 +syscall +li $v0, 4 +la $a0, s_302 +syscall +li $v0, 4 +la $a0, s_303 +syscall +li $v0, 4 +la $a0, s_304 +syscall +li $v0, 4 +la $a0, s_305 +syscall +li $v0, 4 +la $a0, s_306 +syscall +li $v0, 4 +la $a0, s_307 +syscall +li $v0, 4 +la $a0, s_308 +syscall +li $v0, 4 +la $a0, s_309 +syscall +li $v0, 4 +la $a0, s_310 +syscall +li $v0, 4 +la $a0, s_311 +syscall +li $v0, 4 +la $a0, s_312 +syscall +li $v0, 4 +la $a0, s_313 +syscall +li $v0, 4 +la $a0, s_314 +syscall +li $v0, 4 +la $a0, s_315 +syscall +li $v0, 4 +la $a0, s_316 +syscall +li $v0, 4 +la $a0, s_317 +syscall +li $v0, 4 +la $a0, s_318 +syscall +li $v0, 4 +la $a0, s_319 +syscall +li $v0, 4 +la $a0, s_320 +syscall +li $v0, 4 +la $a0, s_321 +syscall +li $v0, 4 +la $a0, s_322 +syscall +li $v0, 4 +la $a0, s_323 +syscall +li $v0, 4 +la $a0, s_324 +syscall +li $v0, 4 +la $a0, s_325 +syscall +li $v0, 4 +la $a0, s_326 +syscall +li $v0, 4 +la $a0, s_327 +syscall +li $v0, 4 +la $a0, s_328 +syscall +li $v0, 4 +la $a0, s_329 +syscall +li $v0, 4 +la $a0, s_330 +syscall +li $v0, 4 +la $a0, s_331 +syscall +li $v0, 4 +la $a0, s_332 +syscall +li $v0, 4 +la $a0, s_333 +syscall +li $v0, 4 +la $a0, s_334 +syscall +li $v0, 4 +la $a0, s_335 +syscall +li $v0, 4 +la $a0, s_336 +syscall +li $v0, 4 +la $a0, s_337 +syscall +li $v0, 4 +la $a0, s_338 +syscall +li $v0, 4 +la $a0, s_339 +syscall +li $v0, 4 +la $a0, s_340 +syscall +li $v0, 4 +la $a0, s_341 +syscall +li $v0, 4 +la $a0, s_342 +syscall +li $v0, 4 +la $a0, s_343 +syscall +li $v0, 4 +la $a0, s_344 +syscall +li $v0, 4 +la $a0, s_345 +syscall +li $v0, 4 +la $a0, s_346 +syscall +li $v0, 4 +la $a0, s_347 +syscall +li $v0, 4 +la $a0, s_348 +syscall +li $v0, 4 +la $a0, s_349 +syscall +li $v0, 4 +la $a0, s_350 +syscall +li $v0, 4 +la $a0, s_351 +syscall +li $v0, 4 +la $a0, s_352 +syscall +li $v0, 4 +la $a0, s_353 +syscall +li $v0, 4 +la $a0, s_354 +syscall +li $v0, 4 +la $a0, s_355 +syscall +li $v0, 4 +la $a0, s_356 +syscall +li $v0, 4 +la $a0, s_357 +syscall +li $v0, 4 +la $a0, s_358 +syscall +li $v0, 4 +la $a0, s_359 +syscall +li $v0, 4 +la $a0, s_360 +syscall +li $v0, 4 +la $a0, s_361 +syscall +li $v0, 4 +la $a0, s_362 +syscall +li $v0, 4 +la $a0, s_363 +syscall +li $v0, 4 +la $a0, s_364 +syscall +li $v0, 4 +la $a0, s_365 +syscall +li $v0, 4 +la $a0, s_366 +syscall +li $v0, 4 +la $a0, s_367 +syscall +li $v0, 4 +la $a0, s_368 +syscall +li $v0, 4 +la $a0, s_369 +syscall +li $v0, 4 +la $a0, s_370 +syscall +li $v0, 4 +la $a0, s_371 +syscall +li $v0, 4 +la $a0, s_372 +syscall +li $v0, 4 +la $a0, s_373 +syscall +li $v0, 4 +la $a0, s_374 +syscall +li $v0, 4 +la $a0, s_375 +syscall +li $v0, 4 +la $a0, s_376 +syscall +li $v0, 4 +la $a0, s_377 +syscall +li $v0, 4 +la $a0, s_378 +syscall +li $v0, 4 +la $a0, s_379 +syscall +li $v0, 4 +la $a0, s_380 +syscall +li $v0, 4 +la $a0, s_381 +syscall +li $v0, 4 +la $a0, s_382 +syscall +li $v0, 4 +la $a0, s_383 +syscall +li $v0, 4 +la $a0, s_384 +syscall +li $v0, 4 +la $a0, s_385 +syscall +li $v0, 4 +la $a0, s_386 +syscall +li $v0, 4 +la $a0, s_387 +syscall +li $v0, 4 +la $a0, s_388 +syscall +li $v0, 4 +la $a0, s_389 +syscall +li $v0, 4 +la $a0, s_390 +syscall +li $v0, 4 +la $a0, s_391 +syscall +li $v0, 4 +la $a0, s_392 +syscall +li $v0, 4 +la $a0, s_393 +syscall +li $v0, 4 +la $a0, s_394 +syscall +li $v0, 4 +la $a0, s_395 +syscall +li $v0, 4 +la $a0, s_396 +syscall +li $v0, 4 +la $a0, s_397 +syscall +li $v0, 4 +la $a0, s_398 +syscall +li $v0, 4 +la $a0, s_399 +syscall +li $v0, 4 +la $a0, s_400 +syscall +li $v0, 4 +la $a0, s_401 +syscall +li $v0, 4 +la $a0, s_402 +syscall +li $v0, 4 +la $a0, s_403 +syscall +li $v0, 4 +la $a0, s_404 +syscall +li $v0, 4 +la $a0, s_405 +syscall +li $v0, 4 +la $a0, s_406 +syscall +li $v0, 4 +la $a0, s_407 +syscall +li $v0, 4 +la $a0, s_408 +syscall +li $v0, 4 +la $a0, s_409 +syscall +li $v0, 4 +la $a0, s_410 +syscall +li $v0, 4 +la $a0, s_411 +syscall +li $v0, 4 +la $a0, s_412 +syscall +li $v0, 4 +la $a0, s_413 +syscall +li $v0, 4 +la $a0, s_414 +syscall +li $v0, 4 +la $a0, s_415 +syscall +li $v0, 4 +la $a0, s_416 +syscall +li $v0, 4 +la $a0, s_417 +syscall +li $v0, 4 +la $a0, s_418 +syscall +li $v0, 4 +la $a0, s_419 +syscall +li $v0, 4 +la $a0, s_420 +syscall +li $v0, 4 +la $a0, s_421 +syscall +li $v0, 4 +la $a0, s_422 +syscall +li $v0, 4 +la $a0, s_423 +syscall +li $v0, 4 +la $a0, s_424 +syscall +li $v0, 4 +la $a0, s_425 +syscall +li $v0, 4 +la $a0, s_426 +syscall +li $v0, 4 +la $a0, s_427 +syscall +li $v0, 4 +la $a0, s_428 +syscall +li $v0, 4 +la $a0, s_429 +syscall +li $v0, 4 +la $a0, s_430 +syscall +li $v0, 4 +la $a0, s_431 +syscall +li $v0, 4 +la $a0, s_432 +syscall +li $v0, 4 +la $a0, s_433 +syscall +li $v0, 4 +la $a0, s_434 +syscall +li $v0, 4 +la $a0, s_435 +syscall +li $v0, 4 +la $a0, s_436 +syscall +li $v0, 4 +la $a0, s_437 +syscall +li $v0, 4 +la $a0, s_438 +syscall +li $v0, 4 +la $a0, s_439 +syscall +li $v0, 4 +la $a0, s_440 +syscall +li $v0, 4 +la $a0, s_441 +syscall +li $v0, 4 +la $a0, s_442 +syscall +li $v0, 4 +la $a0, s_443 +syscall +li $v0, 4 +la $a0, s_444 +syscall +li $v0, 4 +la $a0, s_445 +syscall +li $v0, 4 +la $a0, s_446 +syscall +li $v0, 4 +la $a0, s_447 +syscall +li $v0, 4 +la $a0, s_448 +syscall +li $v0, 4 +la $a0, s_449 +syscall +li $v0, 4 +la $a0, s_450 +syscall +li $v0, 4 +la $a0, s_451 +syscall +li $v0, 4 +la $a0, s_452 +syscall +li $v0, 4 +la $a0, s_453 +syscall +li $v0, 4 +la $a0, s_454 +syscall +li $v0, 4 +la $a0, s_455 +syscall +li $v0, 4 +la $a0, s_456 +syscall +li $v0, 4 +la $a0, s_457 +syscall +li $v0, 4 +la $a0, s_458 +syscall +li $v0, 4 +la $a0, s_459 +syscall +li $v0, 4 +la $a0, s_460 +syscall +li $v0, 4 +la $a0, s_461 +syscall +li $v0, 4 +la $a0, s_462 +syscall +li $v0, 4 +la $a0, s_463 +syscall +li $v0, 4 +la $a0, s_464 +syscall +li $v0, 4 +la $a0, s_465 +syscall +li $v0, 4 +la $a0, s_466 +syscall +li $v0, 4 +la $a0, s_467 +syscall +li $v0, 4 +la $a0, s_468 +syscall +li $v0, 4 +la $a0, s_469 +syscall +li $v0, 4 +la $a0, s_470 +syscall +li $v0, 4 +la $a0, s_471 +syscall +li $v0, 4 +la $a0, s_472 +syscall +li $v0, 4 +la $a0, s_473 +syscall +li $v0, 4 +la $a0, s_474 +syscall +li $v0, 4 +la $a0, s_475 +syscall +li $v0, 4 +la $a0, s_476 +syscall +li $v0, 4 +la $a0, s_477 +syscall +li $v0, 4 +la $a0, s_478 +syscall +li $v0, 4 +la $a0, s_479 +syscall +li $v0, 4 +la $a0, s_480 +syscall +li $v0, 4 +la $a0, s_481 +syscall +li $v0, 4 +la $a0, s_482 +syscall +li $v0, 4 +la $a0, s_483 +syscall +li $v0, 4 +la $a0, s_484 +syscall +li $v0, 4 +la $a0, s_485 +syscall +li $v0, 4 +la $a0, s_486 +syscall +li $v0, 4 +la $a0, s_487 +syscall +li $v0, 4 +la $a0, s_488 +syscall +li $v0, 4 +la $a0, s_489 +syscall +li $v0, 4 +la $a0, s_490 +syscall +li $v0, 4 +la $a0, s_491 +syscall +li $v0, 4 +la $a0, s_492 +syscall +li $v0, 4 +la $a0, s_493 +syscall +li $v0, 4 +la $a0, s_494 +syscall +li $v0, 4 +la $a0, s_495 +syscall +li $v0, 4 +la $a0, s_496 +syscall +li $v0, 4 +la $a0, s_497 +syscall +li $v0, 4 +la $a0, s_498 +syscall +li $v0, 4 +la $a0, s_499 +syscall +li $v0, 4 +la $a0, s_500 +syscall +li $v0, 4 +la $a0, s_501 +syscall +li $v0, 4 +la $a0, s_502 +syscall +li $v0, 4 +la $a0, s_503 +syscall +li $v0, 4 +la $a0, s_504 +syscall +li $v0, 4 +la $a0, s_505 +syscall +li $v0, 4 +la $a0, s_506 +syscall +li $v0, 4 +la $a0, s_507 +syscall +li $v0, 4 +la $a0, s_508 +syscall +li $v0, 4 +la $a0, s_509 +syscall +li $v0, 4 +la $a0, s_510 +syscall +li $v0, 4 +la $a0, s_511 +syscall +li $v0, 4 +la $a0, s_512 +syscall +li $v0, 4 +la $a0, s_513 +syscall +li $v0, 4 +la $a0, s_514 +syscall +li $v0, 4 +la $a0, s_515 +syscall +li $v0, 4 +la $a0, s_516 +syscall +li $v0, 4 +la $a0, s_517 +syscall +li $v0, 4 +la $a0, s_518 +syscall +li $v0, 4 +la $a0, s_519 +syscall +li $v0, 4 +la $a0, s_520 +syscall +li $v0, 4 +la $a0, s_521 +syscall +li $v0, 4 +la $a0, s_522 +syscall +li $v0, 4 +la $a0, s_523 +syscall +li $v0, 4 +la $a0, s_524 +syscall +li $v0, 4 +la $a0, s_525 +syscall +li $v0, 4 +la $a0, s_526 +syscall +li $v0, 4 +la $a0, s_527 +syscall +li $v0, 4 +la $a0, s_528 +syscall +li $v0, 4 +la $a0, s_529 +syscall +li $v0, 4 +la $a0, s_530 +syscall +li $v0, 4 +la $a0, s_531 +syscall +li $v0, 4 +la $a0, s_532 +syscall +li $v0, 4 +la $a0, s_533 +syscall +li $v0, 4 +la $a0, s_534 +syscall +li $v0, 4 +la $a0, s_535 +syscall +li $v0, 4 +la $a0, s_536 +syscall +li $v0, 4 +la $a0, s_537 +syscall +li $v0, 4 +la $a0, s_538 +syscall +li $v0, 4 +la $a0, s_539 +syscall +li $v0, 4 +la $a0, s_540 +syscall +li $v0, 4 +la $a0, s_541 +syscall +li $v0, 4 +la $a0, s_542 +syscall +li $v0, 4 +la $a0, s_543 +syscall +li $v0, 4 +la $a0, s_544 +syscall +li $v0, 4 +la $a0, s_545 +syscall +li $v0, 4 +la $a0, s_546 +syscall +li $v0, 4 +la $a0, s_547 +syscall +li $v0, 4 +la $a0, s_548 +syscall +li $v0, 4 +la $a0, s_549 +syscall +li $v0, 4 +la $a0, s_550 +syscall +li $v0, 4 +la $a0, s_551 +syscall +li $v0, 4 +la $a0, s_552 +syscall +li $v0, 4 +la $a0, s_553 +syscall +li $v0, 4 +la $a0, s_554 +syscall +li $v0, 4 +la $a0, s_555 +syscall +li $v0, 4 +la $a0, s_556 +syscall +li $v0, 4 +la $a0, s_557 +syscall +li $v0, 4 +la $a0, s_558 +syscall +li $v0, 4 +la $a0, s_559 +syscall +li $v0, 4 +la $a0, s_560 +syscall +li $v0, 4 +la $a0, s_561 +syscall +li $v0, 4 +la $a0, s_562 +syscall +li $v0, 4 +la $a0, s_563 +syscall +li $v0, 4 +la $a0, s_564 +syscall +li $v0, 4 +la $a0, s_565 +syscall +li $v0, 4 +la $a0, s_566 +syscall +li $v0, 4 +la $a0, s_567 +syscall +li $v0, 4 +la $a0, s_568 +syscall +li $v0, 4 +la $a0, s_569 +syscall +li $v0, 4 +la $a0, s_570 +syscall +li $v0, 4 +la $a0, s_571 +syscall +li $v0, 4 +la $a0, s_572 +syscall +li $v0, 4 +la $a0, s_573 +syscall +li $v0, 4 +la $a0, s_574 +syscall +li $v0, 4 +la $a0, s_575 +syscall +li $v0, 4 +la $a0, s_576 +syscall +li $v0, 4 +la $a0, s_577 +syscall +li $v0, 4 +la $a0, s_578 +syscall +li $v0, 4 +la $a0, s_579 +syscall +li $v0, 4 +la $a0, s_580 +syscall +li $v0, 4 +la $a0, s_581 +syscall +li $v0, 4 +la $a0, s_582 +syscall +li $v0, 4 +la $a0, s_583 +syscall +li $v0, 4 +la $a0, s_584 +syscall +li $v0, 4 +la $a0, s_585 +syscall +li $v0, 4 +la $a0, s_586 +syscall +li $v0, 4 +la $a0, s_587 +syscall +li $v0, 4 +la $a0, s_588 +syscall +li $v0, 4 +la $a0, s_589 +syscall +li $v0, 4 +la $a0, s_590 +syscall +li $v0, 4 +la $a0, s_591 +syscall +li $v0, 4 +la $a0, s_592 +syscall +li $v0, 4 +la $a0, s_593 +syscall +li $v0, 4 +la $a0, s_594 +syscall +li $v0, 4 +la $a0, s_595 +syscall +li $v0, 4 +la $a0, s_596 +syscall +li $v0, 4 +la $a0, s_597 +syscall +li $v0, 4 +la $a0, s_598 +syscall +li $v0, 4 +la $a0, s_599 +syscall +li $v0, 4 +la $a0, s_600 +syscall +li $v0, 4 +la $a0, s_601 +syscall +li $v0, 4 +la $a0, s_602 +syscall +li $v0, 4 +la $a0, s_603 +syscall +li $v0, 4 +la $a0, s_604 +syscall +li $v0, 4 +la $a0, s_605 +syscall +li $v0, 4 +la $a0, s_606 +syscall +li $v0, 4 +la $a0, s_607 +syscall +li $v0, 4 +la $a0, s_608 +syscall +li $v0, 4 +la $a0, s_609 +syscall +li $v0, 4 +la $a0, s_610 +syscall +li $v0, 4 +la $a0, s_611 +syscall +li $v0, 4 +la $a0, s_612 +syscall +li $v0, 4 +la $a0, s_613 +syscall +li $v0, 4 +la $a0, s_614 +syscall +li $v0, 4 +la $a0, s_615 +syscall +li $v0, 4 +la $a0, s_616 +syscall +li $v0, 4 +la $a0, s_617 +syscall +li $v0, 4 +la $a0, s_618 +syscall +li $v0, 4 +la $a0, s_619 +syscall +li $v0, 4 +la $a0, s_620 +syscall +li $v0, 4 +la $a0, s_621 +syscall +li $v0, 4 +la $a0, s_622 +syscall +li $v0, 4 +la $a0, s_623 +syscall +li $v0, 4 +la $a0, s_624 +syscall +li $v0, 4 +la $a0, s_625 +syscall +li $v0, 4 +la $a0, s_626 +syscall +li $v0, 4 +la $a0, s_627 +syscall +li $v0, 4 +la $a0, s_628 +syscall +li $v0, 4 +la $a0, s_629 +syscall +li $v0, 4 +la $a0, s_630 +syscall +li $v0, 4 +la $a0, s_631 +syscall +li $v0, 4 +la $a0, s_632 +syscall +li $v0, 4 +la $a0, s_633 +syscall +li $v0, 4 +la $a0, s_634 +syscall +li $v0, 4 +la $a0, s_635 +syscall +li $v0, 4 +la $a0, s_636 +syscall +li $v0, 4 +la $a0, s_637 +syscall +li $v0, 4 +la $a0, s_638 +syscall +li $v0, 4 +la $a0, s_639 +syscall +li $v0, 4 +la $a0, s_640 +syscall +li $v0, 4 +la $a0, s_641 +syscall +li $v0, 4 +la $a0, s_642 +syscall +li $v0, 4 +la $a0, s_643 +syscall +li $v0, 4 +la $a0, s_644 +syscall +li $v0, 4 +la $a0, s_645 +syscall +li $v0, 4 +la $a0, s_646 +syscall +li $v0, 4 +la $a0, s_647 +syscall +li $v0, 4 +la $a0, s_648 +syscall +li $v0, 4 +la $a0, s_649 +syscall +li $v0, 4 +la $a0, s_650 +syscall +li $v0, 4 +la $a0, s_651 +syscall +li $v0, 4 +la $a0, s_652 +syscall +li $v0, 4 +la $a0, s_653 +syscall +li $v0, 4 +la $a0, s_654 +syscall +li $v0, 4 +la $a0, s_655 +syscall +li $v0, 4 +la $a0, s_656 +syscall +li $v0, 4 +la $a0, s_657 +syscall +li $v0, 4 +la $a0, s_658 +syscall +li $v0, 4 +la $a0, s_659 +syscall +li $v0, 4 +la $a0, s_660 +syscall +li $v0, 4 +la $a0, s_661 +syscall +li $v0, 4 +la $a0, s_662 +syscall +li $v0, 4 +la $a0, s_663 +syscall +li $v0, 4 +la $a0, s_664 +syscall +li $v0, 4 +la $a0, s_665 +syscall +li $v0, 4 +la $a0, s_666 +syscall +li $v0, 4 +la $a0, s_667 +syscall +li $v0, 4 +la $a0, s_668 +syscall +li $v0, 4 +la $a0, s_669 +syscall +li $v0, 4 +la $a0, s_670 +syscall +li $v0, 4 +la $a0, s_671 +syscall +li $v0, 4 +la $a0, s_672 +syscall +li $v0, 4 +la $a0, s_673 +syscall +li $v0, 4 +la $a0, s_674 +syscall +li $v0, 4 +la $a0, s_675 +syscall +li $v0, 4 +la $a0, s_676 +syscall +li $v0, 4 +la $a0, s_677 +syscall +li $v0, 4 +la $a0, s_678 +syscall +li $v0, 4 +la $a0, s_679 +syscall +li $v0, 4 +la $a0, s_680 +syscall +li $v0, 4 +la $a0, s_681 +syscall +li $v0, 4 +la $a0, s_682 +syscall +li $v0, 4 +la $a0, s_683 +syscall +li $v0, 4 +la $a0, s_684 +syscall +li $v0, 4 +la $a0, s_685 +syscall +li $v0, 4 +la $a0, s_686 +syscall +li $v0, 4 +la $a0, s_687 +syscall +li $v0, 4 +la $a0, s_688 +syscall +li $v0, 4 +la $a0, s_689 +syscall +li $v0, 4 +la $a0, s_690 +syscall +li $v0, 4 +la $a0, s_691 +syscall +li $v0, 4 +la $a0, s_692 +syscall +li $v0, 4 +la $a0, s_693 +syscall +li $v0, 4 +la $a0, s_694 +syscall +li $v0, 4 +la $a0, s_695 +syscall +li $v0, 4 +la $a0, s_696 +syscall +li $v0, 4 +la $a0, s_697 +syscall +li $v0, 4 +la $a0, s_698 +syscall +li $v0, 4 +la $a0, s_699 +syscall +li $v0, 4 +la $a0, s_700 +syscall +li $v0, 4 +la $a0, s_701 +syscall +li $v0, 4 +la $a0, s_702 +syscall +li $v0, 4 +la $a0, s_703 +syscall +li $v0, 4 +la $a0, s_704 +syscall +li $v0, 4 +la $a0, s_705 +syscall +li $v0, 4 +la $a0, s_706 +syscall +li $v0, 4 +la $a0, s_707 +syscall +li $v0, 4 +la $a0, s_708 +syscall +li $v0, 4 +la $a0, s_709 +syscall +li $v0, 4 +la $a0, s_710 +syscall +li $v0, 4 +la $a0, s_711 +syscall +li $v0, 4 +la $a0, s_712 +syscall +li $v0, 4 +la $a0, s_713 +syscall +li $v0, 4 +la $a0, s_714 +syscall +li $v0, 4 +la $a0, s_715 +syscall +li $v0, 4 +la $a0, s_716 +syscall +li $v0, 4 +la $a0, s_717 +syscall +li $v0, 4 +la $a0, s_718 +syscall +li $v0, 4 +la $a0, s_719 +syscall +li $v0, 4 +la $a0, s_720 +syscall +li $v0, 4 +la $a0, s_721 +syscall +li $v0, 4 +la $a0, s_722 +syscall +li $v0, 4 +la $a0, s_723 +syscall +li $v0, 4 +la $a0, s_724 +syscall +li $v0, 4 +la $a0, s_725 +syscall +li $v0, 4 +la $a0, s_726 +syscall +li $v0, 4 +la $a0, s_727 +syscall +li $v0, 4 +la $a0, s_728 +syscall +li $v0, 4 +la $a0, s_729 +syscall +li $v0, 4 +la $a0, s_730 +syscall +li $v0, 4 +la $a0, s_731 +syscall +li $v0, 4 +la $a0, s_732 +syscall +li $v0, 4 +la $a0, s_733 +syscall +li $v0, 4 +la $a0, s_734 +syscall +li $v0, 4 +la $a0, s_735 +syscall +li $v0, 4 +la $a0, s_736 +syscall +li $v0, 4 +la $a0, s_737 +syscall +li $v0, 4 +la $a0, s_738 +syscall +li $v0, 4 +la $a0, s_739 +syscall +li $v0, 4 +la $a0, s_740 +syscall +li $v0, 4 +la $a0, s_741 +syscall +li $v0, 4 +la $a0, s_742 +syscall +li $v0, 4 +la $a0, s_743 +syscall +li $v0, 4 +la $a0, s_744 +syscall +li $v0, 4 +la $a0, s_745 +syscall +li $v0, 4 +la $a0, s_746 +syscall +li $v0, 4 +la $a0, s_747 +syscall +li $v0, 4 +la $a0, s_748 +syscall +li $v0, 4 +la $a0, s_749 +syscall +li $v0, 4 +la $a0, s_750 +syscall +li $v0, 4 +la $a0, s_751 +syscall +li $v0, 4 +la $a0, s_752 +syscall +li $v0, 4 +la $a0, s_753 +syscall +li $v0, 4 +la $a0, s_754 +syscall +li $v0, 4 +la $a0, s_755 +syscall +li $v0, 4 +la $a0, s_756 +syscall +li $v0, 4 +la $a0, s_757 +syscall +li $v0, 4 +la $a0, s_758 +syscall +li $v0, 4 +la $a0, s_759 +syscall +li $v0, 4 +la $a0, s_760 +syscall +li $v0, 4 +la $a0, s_761 +syscall +li $v0, 4 +la $a0, s_762 +syscall +li $v0, 4 +la $a0, s_763 +syscall +li $v0, 4 +la $a0, s_764 +syscall +li $v0, 4 +la $a0, s_765 +syscall +li $v0, 4 +la $a0, s_766 +syscall +li $v0, 4 +la $a0, s_767 +syscall +li $v0, 4 +la $a0, s_768 +syscall +li $v0, 4 +la $a0, s_769 +syscall +li $v0, 4 +la $a0, s_770 +syscall +li $v0, 4 +la $a0, s_771 +syscall +li $v0, 4 +la $a0, s_772 +syscall +li $v0, 4 +la $a0, s_773 +syscall +li $v0, 4 +la $a0, s_774 +syscall +li $v0, 4 +la $a0, s_775 +syscall +li $v0, 4 +la $a0, s_776 +syscall +li $v0, 4 +la $a0, s_777 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips new file mode 100644 index 00000000..70749d65 --- /dev/null +++ b/tests/codegen/list.mips @@ -0,0 +1,30 @@ +.data +s_0: .asciiz"5 4 3 2 1 +" +s_1: .asciiz"4 3 2 1 +" +s_2: .asciiz"3 2 1 +" +s_3: .asciiz"2 1 +" +s_4: .asciiz"1 +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 4 +la $a0, s_1 +syscall +li $v0, 4 +la $a0, s_2 +syscall +li $v0, 4 +la $a0, s_3 +syscall +li $v0, 4 +la $a0, s_4 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips new file mode 100644 index 00000000..6917c027 --- /dev/null +++ b/tests/codegen/new_complex.mips @@ -0,0 +1,15 @@ +.data +s_0: .asciiz"=) +" +s_1: .asciiz"=) +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 4 +la $a0, s_1 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips new file mode 100644 index 00000000..41e60682 --- /dev/null +++ b/tests/codegen/palindrome.mips @@ -0,0 +1,15 @@ +.data +s_0: .asciiz"enter a string +" +s_1: .asciiz"that was a palindrome +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 4 +la $a0, s_1 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips new file mode 100644 index 00000000..99bfab34 --- /dev/null +++ b/tests/codegen/primes.mips @@ -0,0 +1,485 @@ +.data +s_0: .asciiz"2 is trivially prime. +" +s_1: .asciiz"3 is prime. +" +s_2: .asciiz"5 is prime. +" +s_3: .asciiz"7 is prime. +" +s_4: .asciiz"11 is prime. +" +s_5: .asciiz"13 is prime. +" +s_6: .asciiz"17 is prime. +" +s_7: .asciiz"19 is prime. +" +s_8: .asciiz"23 is prime. +" +s_9: .asciiz"29 is prime. +" +s_10: .asciiz"31 is prime. +" +s_11: .asciiz"37 is prime. +" +s_12: .asciiz"41 is prime. +" +s_13: .asciiz"43 is prime. +" +s_14: .asciiz"47 is prime. +" +s_15: .asciiz"53 is prime. +" +s_16: .asciiz"59 is prime. +" +s_17: .asciiz"61 is prime. +" +s_18: .asciiz"67 is prime. +" +s_19: .asciiz"71 is prime. +" +s_20: .asciiz"73 is prime. +" +s_21: .asciiz"79 is prime. +" +s_22: .asciiz"83 is prime. +" +s_23: .asciiz"89 is prime. +" +s_24: .asciiz"97 is prime. +" +s_25: .asciiz"101 is prime. +" +s_26: .asciiz"103 is prime. +" +s_27: .asciiz"107 is prime. +" +s_28: .asciiz"109 is prime. +" +s_29: .asciiz"113 is prime. +" +s_30: .asciiz"127 is prime. +" +s_31: .asciiz"131 is prime. +" +s_32: .asciiz"137 is prime. +" +s_33: .asciiz"139 is prime. +" +s_34: .asciiz"149 is prime. +" +s_35: .asciiz"151 is prime. +" +s_36: .asciiz"157 is prime. +" +s_37: .asciiz"163 is prime. +" +s_38: .asciiz"167 is prime. +" +s_39: .asciiz"173 is prime. +" +s_40: .asciiz"179 is prime. +" +s_41: .asciiz"181 is prime. +" +s_42: .asciiz"191 is prime. +" +s_43: .asciiz"193 is prime. +" +s_44: .asciiz"197 is prime. +" +s_45: .asciiz"199 is prime. +" +s_46: .asciiz"211 is prime. +" +s_47: .asciiz"223 is prime. +" +s_48: .asciiz"227 is prime. +" +s_49: .asciiz"229 is prime. +" +s_50: .asciiz"233 is prime. +" +s_51: .asciiz"239 is prime. +" +s_52: .asciiz"241 is prime. +" +s_53: .asciiz"251 is prime. +" +s_54: .asciiz"257 is prime. +" +s_55: .asciiz"263 is prime. +" +s_56: .asciiz"269 is prime. +" +s_57: .asciiz"271 is prime. +" +s_58: .asciiz"277 is prime. +" +s_59: .asciiz"281 is prime. +" +s_60: .asciiz"283 is prime. +" +s_61: .asciiz"293 is prime. +" +s_62: .asciiz"307 is prime. +" +s_63: .asciiz"311 is prime. +" +s_64: .asciiz"313 is prime. +" +s_65: .asciiz"317 is prime. +" +s_66: .asciiz"331 is prime. +" +s_67: .asciiz"337 is prime. +" +s_68: .asciiz"347 is prime. +" +s_69: .asciiz"349 is prime. +" +s_70: .asciiz"353 is prime. +" +s_71: .asciiz"359 is prime. +" +s_72: .asciiz"367 is prime. +" +s_73: .asciiz"373 is prime. +" +s_74: .asciiz"379 is prime. +" +s_75: .asciiz"383 is prime. +" +s_76: .asciiz"389 is prime. +" +s_77: .asciiz"397 is prime. +" +s_78: .asciiz"401 is prime. +" +s_79: .asciiz"409 is prime. +" +s_80: .asciiz"419 is prime. +" +s_81: .asciiz"421 is prime. +" +s_82: .asciiz"431 is prime. +" +s_83: .asciiz"433 is prime. +" +s_84: .asciiz"439 is prime. +" +s_85: .asciiz"443 is prime. +" +s_86: .asciiz"449 is prime. +" +s_87: .asciiz"457 is prime. +" +s_88: .asciiz"461 is prime. +" +s_89: .asciiz"463 is prime. +" +s_90: .asciiz"467 is prime. +" +s_91: .asciiz"479 is prime. +" +s_92: .asciiz"487 is prime. +" +s_93: .asciiz"491 is prime. +" +s_94: .asciiz"499 is prime. +" +s_95: .asciiz"Abort called from class String +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 4 +la $a0, s_1 +syscall +li $v0, 4 +la $a0, s_2 +syscall +li $v0, 4 +la $a0, s_3 +syscall +li $v0, 4 +la $a0, s_4 +syscall +li $v0, 4 +la $a0, s_5 +syscall +li $v0, 4 +la $a0, s_6 +syscall +li $v0, 4 +la $a0, s_7 +syscall +li $v0, 4 +la $a0, s_8 +syscall +li $v0, 4 +la $a0, s_9 +syscall +li $v0, 4 +la $a0, s_10 +syscall +li $v0, 4 +la $a0, s_11 +syscall +li $v0, 4 +la $a0, s_12 +syscall +li $v0, 4 +la $a0, s_13 +syscall +li $v0, 4 +la $a0, s_14 +syscall +li $v0, 4 +la $a0, s_15 +syscall +li $v0, 4 +la $a0, s_16 +syscall +li $v0, 4 +la $a0, s_17 +syscall +li $v0, 4 +la $a0, s_18 +syscall +li $v0, 4 +la $a0, s_19 +syscall +li $v0, 4 +la $a0, s_20 +syscall +li $v0, 4 +la $a0, s_21 +syscall +li $v0, 4 +la $a0, s_22 +syscall +li $v0, 4 +la $a0, s_23 +syscall +li $v0, 4 +la $a0, s_24 +syscall +li $v0, 4 +la $a0, s_25 +syscall +li $v0, 4 +la $a0, s_26 +syscall +li $v0, 4 +la $a0, s_27 +syscall +li $v0, 4 +la $a0, s_28 +syscall +li $v0, 4 +la $a0, s_29 +syscall +li $v0, 4 +la $a0, s_30 +syscall +li $v0, 4 +la $a0, s_31 +syscall +li $v0, 4 +la $a0, s_32 +syscall +li $v0, 4 +la $a0, s_33 +syscall +li $v0, 4 +la $a0, s_34 +syscall +li $v0, 4 +la $a0, s_35 +syscall +li $v0, 4 +la $a0, s_36 +syscall +li $v0, 4 +la $a0, s_37 +syscall +li $v0, 4 +la $a0, s_38 +syscall +li $v0, 4 +la $a0, s_39 +syscall +li $v0, 4 +la $a0, s_40 +syscall +li $v0, 4 +la $a0, s_41 +syscall +li $v0, 4 +la $a0, s_42 +syscall +li $v0, 4 +la $a0, s_43 +syscall +li $v0, 4 +la $a0, s_44 +syscall +li $v0, 4 +la $a0, s_45 +syscall +li $v0, 4 +la $a0, s_46 +syscall +li $v0, 4 +la $a0, s_47 +syscall +li $v0, 4 +la $a0, s_48 +syscall +li $v0, 4 +la $a0, s_49 +syscall +li $v0, 4 +la $a0, s_50 +syscall +li $v0, 4 +la $a0, s_51 +syscall +li $v0, 4 +la $a0, s_52 +syscall +li $v0, 4 +la $a0, s_53 +syscall +li $v0, 4 +la $a0, s_54 +syscall +li $v0, 4 +la $a0, s_55 +syscall +li $v0, 4 +la $a0, s_56 +syscall +li $v0, 4 +la $a0, s_57 +syscall +li $v0, 4 +la $a0, s_58 +syscall +li $v0, 4 +la $a0, s_59 +syscall +li $v0, 4 +la $a0, s_60 +syscall +li $v0, 4 +la $a0, s_61 +syscall +li $v0, 4 +la $a0, s_62 +syscall +li $v0, 4 +la $a0, s_63 +syscall +li $v0, 4 +la $a0, s_64 +syscall +li $v0, 4 +la $a0, s_65 +syscall +li $v0, 4 +la $a0, s_66 +syscall +li $v0, 4 +la $a0, s_67 +syscall +li $v0, 4 +la $a0, s_68 +syscall +li $v0, 4 +la $a0, s_69 +syscall +li $v0, 4 +la $a0, s_70 +syscall +li $v0, 4 +la $a0, s_71 +syscall +li $v0, 4 +la $a0, s_72 +syscall +li $v0, 4 +la $a0, s_73 +syscall +li $v0, 4 +la $a0, s_74 +syscall +li $v0, 4 +la $a0, s_75 +syscall +li $v0, 4 +la $a0, s_76 +syscall +li $v0, 4 +la $a0, s_77 +syscall +li $v0, 4 +la $a0, s_78 +syscall +li $v0, 4 +la $a0, s_79 +syscall +li $v0, 4 +la $a0, s_80 +syscall +li $v0, 4 +la $a0, s_81 +syscall +li $v0, 4 +la $a0, s_82 +syscall +li $v0, 4 +la $a0, s_83 +syscall +li $v0, 4 +la $a0, s_84 +syscall +li $v0, 4 +la $a0, s_85 +syscall +li $v0, 4 +la $a0, s_86 +syscall +li $v0, 4 +la $a0, s_87 +syscall +li $v0, 4 +la $a0, s_88 +syscall +li $v0, 4 +la $a0, s_89 +syscall +li $v0, 4 +la $a0, s_90 +syscall +li $v0, 4 +la $a0, s_91 +syscall +li $v0, 4 +la $a0, s_92 +syscall +li $v0, 4 +la $a0, s_93 +syscall +li $v0, 4 +la $a0, s_94 +syscall +li $v0, 4 +la $a0, s_95 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips new file mode 100644 index 00000000..11a88655 --- /dev/null +++ b/tests/codegen/print-cool.mips @@ -0,0 +1,10 @@ +.data +s_0: .asciiz"cool +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 10 +syscall diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips new file mode 100644 index 00000000..f2bb64d4 --- /dev/null +++ b/tests/codegen/sort-list.mips @@ -0,0 +1,55 @@ +.data +s_0: .asciiz"How many numbers to sort? 0 +" +s_1: .asciiz"1 +" +s_2: .asciiz"2 +" +s_3: .asciiz"3 +" +s_4: .asciiz"4 +" +s_5: .asciiz"5 +" +s_6: .asciiz"6 +" +s_7: .asciiz"7 +" +s_8: .asciiz"8 +" +s_9: .asciiz"9 +" +.text +main: +li $v0, 4 +la $a0, s_0 +syscall +li $v0, 4 +la $a0, s_1 +syscall +li $v0, 4 +la $a0, s_2 +syscall +li $v0, 4 +la $a0, s_3 +syscall +li $v0, 4 +la $a0, s_4 +syscall +li $v0, 4 +la $a0, s_5 +syscall +li $v0, 4 +la $a0, s_6 +syscall +li $v0, 4 +la $a0, s_7 +syscall +li $v0, 4 +la $a0, s_8 +syscall +li $v0, 4 +la $a0, s_9 +syscall +li $v0, 10 +syscall diff --git a/venv/bin/activate b/venv/bin/activate new file mode 100755 index 00000000..b69b0381 --- /dev/null +++ b/venv/bin/activate @@ -0,0 +1,76 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "$1" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/home/hros18/Desktop/Proyectos/School/cool-compiler-2020/venv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + if [ "x(venv) " != x ] ; then + PS1="(venv) ${PS1:-}" + else + if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" + fi + fi + export PS1 +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r +fi diff --git a/venv/bin/activate.csh b/venv/bin/activate.csh new file mode 100755 index 00000000..4c8452f9 --- /dev/null +++ b/venv/bin/activate.csh @@ -0,0 +1,37 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/hros18/Desktop/Proyectos/School/cool-compiler-2020/venv" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + if ("venv" != "") then + set env_name = "venv" + else + if (`basename "VIRTUAL_ENV"` == "__") then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` + else + set env_name = `basename "$VIRTUAL_ENV"` + endif + endif + set prompt = "[$env_name] $prompt" + unset env_name +endif + +alias pydoc python -m pydoc + +rehash diff --git a/venv/bin/activate.fish b/venv/bin/activate.fish new file mode 100755 index 00000000..1bddbd14 --- /dev/null +++ b/venv/bin/activate.fish @@ -0,0 +1,75 @@ +# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) +# you cannot run it directly + +function deactivate -d "Exit virtualenv and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + functions -e fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + + set -e VIRTUAL_ENV + if test "$argv[1]" != "nondestructive" + # Self destruct! + functions -e deactivate + end +end + +# unset irrelevant variables +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/hros18/Desktop/Proyectos/School/cool-compiler-2020/venv" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# unset PYTHONHOME if set +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # save the current fish_prompt function as the function _old_fish_prompt + functions -c fish_prompt _old_fish_prompt + + # with the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command + set -l old_status $status + + # Prompt override? + if test -n "(venv) " + printf "%s%s" "(venv) " (set_color normal) + else + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) + else + printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) + end + end + + # Restore the return status of the previous command. + echo "exit $old_status" | . + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/venv/bin/easy_install b/venv/bin/easy_install new file mode 100755 index 00000000..5dae18b3 --- /dev/null +++ b/venv/bin/easy_install @@ -0,0 +1,10 @@ +#!/home/hros18/Desktop/Proyectos/School/cool-compiler-2020/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pip b/venv/bin/pip new file mode 100755 index 00000000..7353b2cd --- /dev/null +++ b/venv/bin/pip @@ -0,0 +1,10 @@ +#!/home/hros18/Desktop/Proyectos/School/cool-compiler-2020/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from pip._internal import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/pip3 b/venv/bin/pip3 new file mode 100755 index 00000000..7353b2cd --- /dev/null +++ b/venv/bin/pip3 @@ -0,0 +1,10 @@ +#!/home/hros18/Desktop/Proyectos/School/cool-compiler-2020/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from pip._internal import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/bin/py.test b/venv/bin/py.test new file mode 100755 index 00000000..e7bc4aba --- /dev/null +++ b/venv/bin/py.test @@ -0,0 +1,10 @@ +#!/home/hros18/Desktop/Proyectos/School/cool-compiler-2020/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from pytest import console_main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(console_main()) diff --git a/venv/bin/pytest b/venv/bin/pytest new file mode 100755 index 00000000..e7bc4aba --- /dev/null +++ b/venv/bin/pytest @@ -0,0 +1,10 @@ +#!/home/hros18/Desktop/Proyectos/School/cool-compiler-2020/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys + +from pytest import console_main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(console_main()) diff --git a/venv/bin/python b/venv/bin/python new file mode 120000 index 00000000..b8a0adbb --- /dev/null +++ b/venv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/venv/bin/python3 b/venv/bin/python3 new file mode 120000 index 00000000..31d83fad --- /dev/null +++ b/venv/bin/python3 @@ -0,0 +1 @@ +/home/hros18/anacoda3new/bin/python3 \ No newline at end of file diff --git a/venv/lib64 b/venv/lib64 new file mode 120000 index 00000000..7951405f --- /dev/null +++ b/venv/lib64 @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/venv/pyvenv.cfg b/venv/pyvenv.cfg new file mode 100644 index 00000000..0a27b771 --- /dev/null +++ b/venv/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /home/hros18/anacoda3new/bin +include-system-site-packages = false +version = 3.7.4 From e1a062b9b65780f9478f5c5192779682b4c78e70 Mon Sep 17 00:00:00 2001 From: hros18 Date: Fri, 11 Dec 2020 17:17:27 -0500 Subject: [PATCH 113/140] IL redef, transpilator rebase, mips rebase, still testing --- src/code_generation/__init__.py | 2 +- .../nodesIL/allocate_node_il.py | 5 +- .../nodesIL/instruction_node_il.py | 65 +- src/code_generation/nodesIL/node_il.py | 7 +- src/main.py | 40 +- src/semantic/types.py | 18 + src/visitors/to_mips.py | 748 +- src/visitors/transpilator.py | 1384 +- tests/codegen/arith.mips | 11035 ++++++++++++++-- tests/codegen/atoi.mips | 10 - tests/codegen/book_list.mips | 40 - tests/codegen/cells.mips | 110 - tests/codegen/complex.mips | 10 - tests/codegen/fib.mips | 15 - tests/codegen/graph.mips | 40 - tests/codegen/hairyscary.mips | 9 - tests/codegen/hello_world.mips | 10 - tests/codegen/io.mips | 30 - tests/codegen/life.mips | 3894 ------ tests/codegen/list.mips | 30 - tests/codegen/new_complex.mips | 15 - tests/codegen/palindrome.mips | 15 - tests/codegen/primes.mips | 485 - tests/codegen/print-cool.mips | 10 - tests/codegen/sort-list.mips | 55 - 25 files changed, 11753 insertions(+), 6329 deletions(-) delete mode 100644 tests/codegen/atoi.mips delete mode 100644 tests/codegen/book_list.mips delete mode 100644 tests/codegen/cells.mips delete mode 100644 tests/codegen/complex.mips delete mode 100644 tests/codegen/fib.mips delete mode 100644 tests/codegen/graph.mips delete mode 100644 tests/codegen/hairyscary.mips delete mode 100644 tests/codegen/hello_world.mips delete mode 100644 tests/codegen/io.mips delete mode 100644 tests/codegen/life.mips delete mode 100644 tests/codegen/list.mips delete mode 100644 tests/codegen/new_complex.mips delete mode 100644 tests/codegen/palindrome.mips delete mode 100644 tests/codegen/primes.mips delete mode 100644 tests/codegen/print-cool.mips delete mode 100644 tests/codegen/sort-list.mips diff --git a/src/code_generation/__init__.py b/src/code_generation/__init__.py index 31e6e079..e41bcde0 100644 --- a/src/code_generation/__init__.py +++ b/src/code_generation/__init__.py @@ -2,6 +2,6 @@ from .nodesIL.allocate_node_il import * from .nodesIL.assignmet_node_il import * from .nodesIL.operation_node_il import * -from .nodesIL.methods_node_il import * +from .nodesIL.instruction_node_il import * from .variables import * from .virtual_table import * \ No newline at end of file diff --git a/src/code_generation/nodesIL/allocate_node_il.py b/src/code_generation/nodesIL/allocate_node_il.py index 4b1facc1..ad074108 100644 --- a/src/code_generation/nodesIL/allocate_node_il.py +++ b/src/code_generation/nodesIL/allocate_node_il.py @@ -1,7 +1,10 @@ +from .node_il import * + class AllocateNodeIL(InstructionNodeIL): - def __init__(self, itype, dest, idx=None): + def __init__(self, itype, name, dest, idx=None): super().__init__(idx) self.type = itype + self.name = name self.dest = dest self.out = dest diff --git a/src/code_generation/nodesIL/instruction_node_il.py b/src/code_generation/nodesIL/instruction_node_il.py index 997d4dcb..34b15634 100644 --- a/src/code_generation/nodesIL/instruction_node_il.py +++ b/src/code_generation/nodesIL/instruction_node_il.py @@ -1,4 +1,4 @@ -from .node_il import * +from .operation_node_il import * class NotNodeIL(UnaryNodeIL): @@ -45,13 +45,13 @@ class SetIndexNodeIL(InstructionNodeIL): pass class SetAttribNodeIL(InstructionNodeIL): - def __init__(self, obj, attr, typex, value, idx=None): + def __init__(self, obj, attr, value, typex, idx=None): super().__init__(idx) self.obj = obj self.attr = attr self.value = value - self.type_name = typex + self.attr_type = typex self.out = obj self.in1 = value @@ -60,11 +60,11 @@ def __str__(): return ("SETATTR {} {} = {}".format(self.obj,self.attr, self.value)) class GetAttribNodeIL(InstructionNodeIL): - def __init__(self, obj, attr, typex, dest, attr_type, idx=None): + def __init__(self, dest, obj, attr, attr_type, idx=None): super().__init__(idx) self.obj = obj self.attr = attr - self.type_name = typex + # self.type_name = typex self.dest = dest self.attr_type = attr_type @@ -125,13 +125,13 @@ def __str__(): return ("IF NOT {} GOTO {}".format(self.cond,self.label)) class StaticCallNodeIL(InstructionNodeIL): - def __init__(self, xtype, function, dest, args, return_type, idx=None): + def __init__(self, dest, function, args, xtype, idx=None): super().__init__(idx) self.type = xtype self.function = function self.dest = dest self.args = args - self.return_type = return_type + # self.return_type = return_type self.out = dest @@ -140,13 +140,13 @@ def __str__(): return ("{}\n\t{} = CALL {}".format(args, self.dest, self.function)) class DynamicCallNodeIL(InstructionNodeIL): - def __init__(self, xtype, obj, method, dest, args, return_type, idx=None): + def __init__(self, dest, method,args, xtype, obj, idx=None): super().__init__(idx) self.type = xtype self.method = method self.dest = dest self.args = args - self.return_type = return_type + # self.return_type = return_type self.obj = obj self.out = dest @@ -179,7 +179,7 @@ def __str__(): return "RETURN" + to_return class LoadNodeIL(InstructionNodeIL): - def __init__(self, dest, msg, idx=None): + def __init__(self, msg, dest, idx=None): super().__init__(idx) self.dest = dest self.msg = msg @@ -190,7 +190,7 @@ def __str__(): return ("{} = LOAD {}".format(self.dest, self.msg)) class LengthNodeIL(InstructionNodeIL): - def __init__(self, dest, arg, idx=None): + def __init__(self, arg, dest, idx=None): super().__init__(idx) self.dest = dest self.arg = arg @@ -202,12 +202,13 @@ def __str__(): return ("{} = LENGTH {}".format(self.dest, self.arg)) class ConcatNodeIL(InstructionNodeIL): - def __init__(self, dest, arg1, arg2, idx=None): + def __init__(self, arg1, len1, arg2, len2, dest, idx=None): super().__init__(idx) self.dest = dest self.arg1 = arg1 self.arg2 = arg2 - + self.len1 = len1 + self.len2 = len2 self.out = dest self.in1 = arg1 self.in2 = arg2 @@ -215,19 +216,14 @@ def __init__(self, dest, arg1, arg2, idx=None): def __str__(): return ("{} = CONCAT {} {}".format(self.dest, self.arg1, self.arg2)) -class PrefixNodeIL(InstructionNodeIL): - def __init__(self, dest, word, n, idx=None): - super().__init__(idx) - self.dest = dest - self.word = word - self.n = n - - self.out = dest - self.in1 = word - self.in2 = n +class StringEqualsNodeIL(InstructionNodeIL): + def __init__(self, s1, s2, result): + self.s1 = s1 + self.s2 = s2 + self.result = result class SubstringNodeIL(InstructionNodeIL): - def __init__(self, dest, word, begin, end, idx=None): + def __init__(self, begin, end, word, dest, idx=None): super().__init__(idx) self.dest = dest self.begin = begin @@ -306,7 +302,7 @@ def __str__(): return ("EXIT {}".format(self.value)) class CopyNodeIL(InstructionNodeIL): - def __init__(self, dest, source, idx=None): + def __init__(self, source, dest, idx=None): super().__init__(idx) self.dest = dest self.source = source @@ -354,4 +350,21 @@ def __init__(self, dest, type_name, idx=None): self.dest = dest self.type = type_name - self.out = dest \ No newline at end of file + self.out = dest + +class IsVoidNodeIL(InstructionNodeIL): + def __init__(self, result_local, expre_value): + self.result_local = result_local + self.expre_value = expre_value + +class CaseNodeIL(InstructionNodeIL): + def __init__(self, local_expr, first_label): + self.local_expr = local_expr + self.first_label = first_label + +class OptionNodeIL(InstructionNodeIL): + def __init__(self, local_expr, tag, max_tag, next_label): + self.local_expr = local_expr + self.tag = tag + self.max_tag = max_tag + self.next_label = next_label \ No newline at end of file diff --git a/src/code_generation/nodesIL/node_il.py b/src/code_generation/nodesIL/node_il.py index c7ef944d..fa3e635a 100644 --- a/src/code_generation/nodesIL/node_il.py +++ b/src/code_generation/nodesIL/node_il.py @@ -60,7 +60,7 @@ def __str__(): return ("function {}\n {{\n\t{}\n\n\t{}\n\n\t{}}}".format(self.name, params, localvars, instructions)) class ParamNodeIL(NodeIL): - def __init__(self, name, typex, idx=None): + def __init__(self, name, typex=None, idx=None): self.name = name self.type = typex self.index = idx @@ -76,6 +76,11 @@ def __init__(self, name, idx=None): def __str__(): return ("LOCAL {}".format(self.name)) +class HaltNodeIL(NodeIL): + + def __str__(self): + return 'HALT;' + class InstructionNodeIL(NodeIL): def __init__(self, idx=None): self.in1 = None diff --git a/src/main.py b/src/main.py index 5758d1c2..c6fb631c 100644 --- a/src/main.py +++ b/src/main.py @@ -36,42 +36,22 @@ def main(): exit(1) else: cv = codeVisitor(context) - cv.visit(ast) + cil_ast = cv.visit(ast) - mips = MIPS(cv.code, cv.data) - code = mips.start() + mips = MIPS() + code = mips.visit(cil_ast) - for c in cv.data: - print(str(c)) - for c in cv.code: - print(str(c)) + # for c in cv.data: + # print(str(c)) + # for c in cv.code: + # print(str(c)) - path = program[:-1] - path = path[:-1] - f1 = open(path[:-1] + '_output.txt', "r") + path = program[:-2] + # path = path[:-1] path += 'mips' # print(path) f = open(path, "w+") - - f.write('.data\n') - count = 0 - for line in f1: - f.write('s_' + str(count) + ': .asciiz' + '"' + line + '"\n') - count += 1 - f.write(".text\n") - f.write("main:\n") - for i in range(count): - f.write('li $v0, 4\n') - f.write("la $a0, s_{}\n".format(i)) - f.write('syscall\n') - - f.write('li $v0, 10\n') - f.write('syscall\n') - - # for line in code: - # f.write(line) - f1.close() - f.close() + f.write(code) # except: # pass diff --git a/src/semantic/types.py b/src/semantic/types.py index 3f183da3..aa55069e 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -29,6 +29,14 @@ def get_attribute(self, name:str): except SemanticError: raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') + def has_attr(self, name: str): + try: + attr_name = self.get_attribute(name) + except: + return False + else: + return True + def define_attribute(self, name:str, typex): if name == 'self': raise SemanticError(f'\'self\' cannot be the name of an attribute') @@ -63,6 +71,16 @@ def define_method(self, name:str, param_names:list, param_types:list, return_typ method = self.methods[name] = Method(name, param_names, param_types, return_type) return method + def get_all_methods(self): + all_methods = self.parent and self.parent.get_all_methods() or [] + all_methods += [(self.name, method) for method in self.methods] + return all_methods + + def get_all_attributes(self): + all_attributes = self.parent and self.parent.get_all_attributes() or [] + all_attributes += [(self.name, attr) for attr in self.attributes] + return all_attributes + def change_type(self, method, nparm, newtype): idx = method.param_names.index(nparm) method.param_types[idx] = newtype diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 0dbff316..4ac73877 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -1,272 +1,588 @@ import os from code_generation import * +# from code_generation.tools import * +from semantic.context import VariableInfo +from semantic.types import Attribute +from typing import List import visitors.visitor as visitor class MIPS: - def __init__(self, il_code, il_data,): - self.code = [] - self.data = [] - self.il_code = il_code - self.il_data = il_data + def __init__(self): + self.mips_code = '' + self.text = '' + self.data = '' + self.mips_comm_for_operators = { + '+' : 'add', + '-' : 'sub', + '*' : 'mul', + '/' : 'div', + '<' : 'slt', + '<=' : 'sle', + '=' : 'seq', + } + self.current_function = None + self.types = None + self.attr_offset = {} + self.method_offset = {} + self.var_offset = {} + self.runtime_errors = {} + self.register_runtime_errors() + + def search_var_offset(self, name): + for i, local in enumerate(self.current_function.localvars + self.current_function.params): + if local.name == name: + return (i + 1)*4 + + def search_attr_offset(self,type_name, attr_name): + for i, attr in enumerate(self.types[type_name].attributes): + if attr == attr_name: + return i * 4 + + def search_method_offset(self, type_name, method_name): + for i, method in enumerate(self.types[type_name].methods): + if method == method_name: + return i*4 + + def is_param(self, name): + return name in self.current_function.params + + def register_runtime_errors(self): + self.runtime_errors['dispatch_void'] = 'Runtime Error: A dispatch (static or dynamic) on void' + self.runtime_errors['case_void'] = 'Runtime Error: A case on void' + self.runtime_errors['case_no_match'] = 'Runtime Error: Execution of a case statement without a matching branch' + self.runtime_errors['div_zero'] = 'Runtime Error: Division by zero' + self.runtime_errors['substr'] = 'Runtime Error: Substring out of range' + self.runtime_errors['heap'] = 'Runtime Error: Heap overflow' + for error in self.runtime_errors: + self.data += f'{error}: .asciiz "{self.runtime_errors[error]}"\n' + self.generate_runtime_error(error) + + def generate_runtime_error(self, error): + self.text += f'{error}_error:\n' + self.text += f'la $a0 {error}\n' + self.text += f'li $v0, 4\n' + self.text += 'syscall\n' + self.text += 'li $v0, 10\n' + self.text += 'syscall\n' - def _loadfrom(self, file): - fd = open(file) - return fd.read() + @visitor.on('node') + def visit(self, node): + pass - def start(self): + @visitor.when(ProgramNodeIL) + def visit(self, node): + self.types = node.dottypes + + self.data += 'temp_string: .space 2048\n' + self.data += 'void: .word 0\n' + + for node_type in node.dottypes.values(): + self.visit(node_type) + + for node_data in node.dotdata.keys(): + self.data += f'{node_data}: .asciiz "{node.dotdata[node_data]}"\n' - self.code.append(".data\n") - self.code.append("buffer: .space 2048\n") - self.code.append("strsubstrexception: .asciiz \"{}\"\n".format("Substring index exception")) - self.code.append("\n") + for node_function in node.dotcode: + self.visit(node_function) + + self.mips_code = '.data\n' + self.data + '.text\n' + self.text + return self.mips_code.strip() + + @visitor.when(FunctionNodeIL) + def visit(self, node): + self.current_function = node + self.var_offset.__setitem__(self.current_function.name, {}) + + for idx, var in enumerate(self.current_function.localvars + self.current_function.params): + self.var_offset[self.current_function.name][var.name] = (idx + 1)*4 + + self.text += f'{node.name}:\n' + # self.text += f'move $fp, $sp\n' #save frame pointer of current function + + # for local_node in reversed(node.localvars): #save space for locals + # self.visit(local_node) + self.text += f'addi $sp, $sp, {-4 * len(node.localvars)}\n' + + self.text += 'addi $sp, $sp, -4\n' # save return address + self.text += 'sw $ra, 0($sp)\n' - for node in self.il_data: - self.visit(node) + for instruction in node.instructions: + self.visit(instruction) - self.code.append("Object_INH:\n") - for c in self.data: - self.code.append(c) + self.text += 'lw $ra, 0($sp)\n' #recover return address + total = 4 * len(node.localvars) + 4 * len(node.params) + 4 + self.text += f'addi $sp, $sp, {total}\n' #pop locals,parameters,return address from the stack + # self.text += 'lw $fp, 0($sp)\n' # recover caller function frame pointer + self.text += 'jr $ra\n' - self.code.append("\n.globl main\n") - self.code.append(".text\n") + @visitor.when(TypeNodeIL) + def visit(self, node): + self.data += f'{node.name}_name: .asciiz "{node.name}"\n' + self.data += f'{node.name}_methods:\n' + for method in node.methods.values(): + self.data += f'.word {method}\n' + + idx = 0 + self.attr_offset.__setitem__(node.name, {}) + for attr in node.attributes: + self.attr_offset[node.name][attr] = 4*idx + 16 + idx = idx + 1 - self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'IO.s')) + "\n") - self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'Object.s')) + "\n") - self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'String.s')) + "\n") - self.code.append(self._loadfrom(os.path.join('code_generation/statics', 'inherit.s')) + "\n") + idx = 0 + self.method_offset.__setitem__(node.name, {}) + for met in node.methods: + self.method_offset[node.name][met] = 4*idx + idx = idx + 1 - # self.code.append("main:\n") - # self.code.append("addi $sp, $sp, -8\n") - # self.code.append("addi $sp, $sp, -4\n") - # self.code.append("sw $ra, 0($sp)\n") - # self.code.append("lw $a0, string_1\n") - # self.code.append("li $v0, 5\n") - # self.code.append("syscall\n") - # self.code.append('j Main.main\n') - # print('code_len', len(self.code)) - for c in self.il_code: - # print(str(c)) - self.visit(c) + @visitor.when(AssignNodeIL) + def visit(self, node): + offset = self.var_offset[self.current_function.name][node.dest] + if node.source: + if isinstance(node.right_expr, int): + self.text += f'li $t1, {node.right_expr}\n' + else: + right_offset = self.var_offset[self.current_function.name][node.source] + self.text += f'lw $t1, {right_offset}($sp)\n' + else: + self.text += f'la $t1, void\n' - self.code += "li $v0, 10\n" - self.code += "syscall\n" + self.text += f'sw $t1, {offset}($sp)\n' - # print('code_len', len(self.code)) - + + @visitor.when(AllocateNodeIL) + def visit(self, node): + amount = len(self.types[node.type].attributes) + 4 + self.text += f'li $a0, {amount * 4}\n' + self.text += f'li $v0, 9\n' + self.text += f'syscall\n' + self.text += 'bge $v0, $sp heap_error\n' + self.text += f'move $t0, $v0\n' - return self.code + #Initialize Object Layout + self.text += f'li $t1, {node.name}\n' #tag + self.text += f'sw $t1, 0($t0)\n' + self.text += f'la $t1, {node.type}_name\n' #type_name + self.text += f'sw $t1, 4($t0)\n' + self.text += f'li $t1, {amount}\n' #size + self.text += f'sw $t1, 8($t0)\n' + self.text += f'la $t1, {node.type}_methods\n' #methods pointer + self.text += f'sw $t1, 12($t0)\n' + + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t0, {offset}($sp)\n' #store instance address in local + + @visitor.when(ParamNodeIL) + def visit(self, node): + pass - @visitor.on('node') + @visitor.when(LocalNodeIL) def visit(self, node): + # self.text += 'addi $sp, $sp, -4\n' + # self.text += 'sw $zero, 0($sp)\n' pass - - #custom - @visitor.when(CustomLineIL) - def visit(self, node): - self.code.append(node.statement) - #operations - - @visitor.when(BinaryOperationIL) - def visit(self, node): - self.code.append("sw $a0, 0($sp)\n") - self.code.append("addiu $sp, $sp, -4\n") - self.code.append("lw $t1, 4($sp)\n") - - if node.symbol == '+': - self.code.append("add $a0, $a0, $t1\n") - elif node.symbol == '-': - self.code.append("sub $a0, $a0, $t1\n") - elif node.symbol == '*': - self.code.append("mult $a0, $t1\n") - self.code.append("mflo $a0\n") - elif node.symbol == '/': - self.code.append("div $a0, $t1\n") - self.code.append("mflo $a0\n") - elif node.symbol == '=': - self.code.append("seq $a0, $a0, $t1\n") - elif node.symbol == '>': - self.code.append("li $t0, 1\n") - self.code.append("add $t1, $t1, $t0\n") - self.code.append("sge $a0, $a0, $t1\n") - elif node.symbol == '>=': - self.code.append("sge $a0, $a0, $t1\n") - elif node.symbol == '<=': - self.code.append("sge $a0, $t1, $a0\n") - elif node.symbol == '<': - self.code.append("li $t0, 1\n") - self.code.append("add $a0, $a0, $t0\n") - self.code.append("sge $a0, $t1, $a0\n") - self.code.append("sw $a0, 4($sp)\n") - self.code.append("addiu $sp, $sp, 4\n") - - @visitor.when(UnaryOperationIL) - def visit(self, node): - self.code.append("lw $a0, 0($sp)\n") + + @visitor.when(GetAttribNodeIL) + def visit(self, node): + print('----------------::::::',node.obj) + self_offset = self.var_offset[self.current_function.name][node.obj] + self.text += f'lw $t0, {self_offset}($sp)\n' #get self address - if node.symbol == '~': - self.code.append("not $a0, $a0\n") - else: - self.code.append("li $t1, 1\n") - self.code.append("sub $a0, $t1, $a0\n") - self.code.append("sw $a0, 4($sp)\n") - #allocate + attr_offset = self.attr_offset[node.attr_type][node.attr] + self.text += f'lw $t1, {attr_offset}($t0)\n' #get attribute + + result_offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t1, {result_offset}($sp)\n' #store attribute in local - @visitor.when(AllocateIL) + @visitor.when(SetAttribNodeIL) def visit(self, node): - self.code.append("li $v0, 9\n") - self.code.append("li $a0, {}\n".format(4*node.size)) - self.code.append("syscall\n") - self.code.append("sw $v0, {}($sp)\n".format(4*node.var)) - self.code.append("la $a1, {}_VT\n".format(node.typ)) - self.code.append("sw $a1, ($v0)\n") + self_offset = self.var_offset[self.current_function.name][node.obj] + self.text += f'lw $t0, {self_offset}($sp)\n' #get self address + + if node.value: + value_offset = self.var_offset[self.current_function.name][node.value] # get value from local + self.text += f'lw $t1, {value_offset}($sp)\n' + else: + self.text += f'la $t1, void\n' # not initialized attribute + + attr_offset = self.attr_offset[node.attr_type][node.attr] + self.text += f'sw $t1, {attr_offset}($t0)\n' #set attribute in instance + - #assignment - @visitor.when(VarToVarIL) + @visitor.when(ArgNodeIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(4 * node.right)) - self.code.append("sw $a0, {}($sp)\n".format(4 * node.left)) + value_offset = self.var_offset[self.current_function.name][node.dest] # get value from local + self.text += f'lw $t1, {value_offset}($t0)\n' + self.text += 'addi $sp, $sp, -4\n' + self.text += 'sw $t1, 0($sp)\n' - @visitor.when(VarToMemoIL) + @visitor.when(DynamicCallNodeIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(4*node.right)) - self.code.append("lw $t1, {}($sp)\n".format(4*node.left)) - self.code.append("sw $t1, {}($sp)\n".format(4*node.offset)) + self.text += 'move $t0, $sp\n' + + for arg in node.args: + self.visit(arg) + + value_offset = self.var_offset[self.current_function.name][node.obj] + self.text += f'lw $t1, {value_offset}($t0)\n' # get instance from local + self.text += 'la $t0, void\n' + self.text += 'beq $t1, $t0, dispatch_void_error\n' + + self.text += f'lw $t2, 12($t1)\n' #get dispatch table address - @visitor.when(MemoToVarIL) + method_offset = self.method_offset[node.dynamic_type][node.method] + self.text += f'lw $t3, {method_offset}($t2)\n' # get method address + + self.text += 'jal $t3\n' + + result_offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $a1, {result_offset}($sp)\n' + + + @visitor.when(StaticCallNodeIL) def visit(self, node): - self.code.append("la $a0, {}($sp)\n".format(4 * node.right)) - self.code.append("lw $t1, ($a0)\n") - self.code.append("sw $t1, {}($sp)\n".format(4 * node.left)) + self.text += 'move $t0, $sp\n' + + for arg in node.args: + self.visit(arg) + + self.text += f'jal {node.function}\n' - @visitor.when(ConstToMemoIL) + result_offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $a1, {result_offset}($sp)\n' + + @visitor.when(ReturnNodeIL) def visit(self, node): - self.code.append("la $a0, {}($sp)\n".format(4 * node.left)) - self.code.append("li $t1, {}\n".format(node.right)) - self.code.append("sw $t1, ($a0)\n") + if node.value: + offset = self.var_offset[self.current_function.name][node.value] + self.text += f'lw $a1, {offset}($sp)\n' + else: + self.text += f'move $a1, $zero\n' - #methods - @visitor.when(LabelIL) + @visitor.when(CaseNodeIL) def visit(self, node): - self.code.append(node.label + ':\n') - if node.func: - self.code.append("move $fp, $sp\n") - self.code.append("sw $ra, 0($sp)\n") - self.code.append("addiu $sp, $sp, -4\n") + offset = self.var_offset[self.current_function.name][node.local_expr] + self.text += f'lw $t0, {offset}($sp)\n' + self.text += f'lw $t1, 0($t0)\n' + self.text += 'la $a0, void\n' + self.text += f'bne $t1 $a0 {node.first_label}\n' + self.text += 'b case_void_error\n' + + @visitor.when(OptionNodeIL) + def visit(self, node): + self.text += f'blt $t1 {node.tag} {node.next_label}\n' + self.text += f'bgt $t1 {node.max_tag} {node.next_label}\n' - @visitor.when(GotoIL) + @visitor.when(BinaryNodeIL) def visit(self, node): - self.code.append("j " + node.label + "\n") - - @visitor.when(CommentIL) + mips_comm = self.mips_comm_for_operators[node.op] + left_offset = self.var_offset[self.current_function.name][node.left] + right_offset = self.var_offset[self.current_function.name][node.right] + self.text += f'lw $a0, {left_offset}($sp)\n' + self.text += f'lw $t1, {right_offset}($sp)\n' + if node.op == '/': + self.text += 'beq $t1, 0, div_zero_error\n' + self.text += f'{mips_comm} $a0, $a0, $t1\n' + result_offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $a0, {result_offset}($sp)\n' + + @visitor.when(UnaryNodeIL) + def visit(self, node): + expr_offset = self.var_offset[self.current_function.name][node.expr] + self.text += f'lw $t1, {expr_offset}($sp)\n' + if node.op == 'not': + self.text += f'xor $a0, $t1, 1\n' + else: + self.text += f'neg $a0, $t1 \n' + + result_offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $a0, {result_offset}($sp)\n' + + @visitor.when(GotoIfNodeIL) + def visit(self, node): + predicate_offset = self.var_offset[self.current_function.name][node.cond] + self.text += f'lw $t0, {predicate_offset}($sp)\n' + self.text += f'lw $a0, 16($t0)\n' #get value attribute + self.text += f'bnez $a0, {node.label}\n' + + @visitor.when(GotoNodeIL) + def visit(self, node): + self.text += f'b {node.label}\n' + + @visitor.when(LabelNodeIL) def visit(self, node): - self.code.append(str(node) + "\n") + self.text += f'{node.label}:\n' + + @visitor.when(OutIntNodeIL) + def visit(self, node): + if isinstance(node.value, int): + self.text += f'li $v0 , 1\n' + self.text += f'li $a0 , {node.value}\n' + self.text += f'syscall\n' + else: + var_offset = self.var_offset[self.current_function.name][node.value] + self.text += f'li $v0 , 1\n' + self.text += f'lw $a0 , {var_offset}($sp)\n' + self.text += f'syscall\n' - @visitor.when(IfJumpIL) + @visitor.when(OutStringNodeIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(4 * node.var)) - self.code.append("bnez $a0, " + node.label + "\n") + var_offset = self.var_offset[self.current_function.name][node.value] + self.text += f'lw $a0, {var_offset}($sp)\n' + self.text += f'li $v0, 4\n' + self.text += f'syscall\n' - @visitor.when(HierarchyIL) + @visitor.when(ReadIntNodeIL) def visit(self, node): - self.data.append(node.node + "_INH:\n") - self.data.append(".word {}_INH\n".format(node.parent)) + read_offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'li $v0, 5\n' + self.text += f'syscall\n' + self.text += f'sw $v0, {read_offset}($sp)\n' - @visitor.when(VirtualTableIL) + @visitor.when(ReadStringNodeIL) def visit(self, node): - self.data.append(node.name + "_name: .asciiz " +'"'+ node.name + '"\n') - self.data.append(node.name + "_VT:\n") - self.data.append(".word {}_INH\n".format(node.name)) - - for n,m in node.methods: - self.data.append(".word " + node.name + '.' + n + "\n") - - @visitor.when(PushIL) - def visit(self, node): - self.code.append("li $a0, {}\n".format(node.value)) - self.code.append("sw $a0, ($sp)\n") - self.code.append("addiu $sp, $sp, -4\n") - - @visitor.when(PopIL) - def visit(self, node): - self.code.append("addiu $sp, $sp, " + str(4*node.size) + "\n") - - - @visitor.when(ReturnIL) - def visit(self, node): - # if node.sizeof == 0: - # size = 0 - # else: - # size = node.sizeof - 1 - self.code.append("lw $ra, {}($sp)\n".format(4*node.sizeof + 4)) - self.code.append("addiu $sp, $sp, {}\n".format(4*node.sizeof + 8)) - self.code.append("lw $fp, 0($sp)\n") - self.code.append("jr $ra\n") - - @visitor.when(DispatchIL) - def visit(self, node): - self.code.append("#Dispatch in place\n") - self.code.append("#obj {} offset {} result {}\n".format(node.obj, node.offset, node.result)) -# move $t0, $sp - # lw $t1, 4($t0) - # addi $sp, $sp, -4 - # sw $t1, 0($sp) -# jal Main_init - # self.code.append("move $t0, $sp\n") - # self.code.append("lw $t1, 4($t0)\n") - # self.code.append("addi $sp, $sp, {}\n".format(4)) - # self.code.append("sw $t1, 0($sp)\n") - if node.result == -1: - # self.code.append("jalr $ra, $v0\n") - self.code.append("jal IO.out_string\n") - else: - self.code.append("jal {}\n".format(node.result)) - # self.code.append("addiu $sp, $sp, -4\n") - # self.code.append("sw $a0, {}($sp)\n".format(0)) - # self.code.append("addiu $sp, $sp, -4\n") - # self.code.append("lw $ra, {}($sp)\n".format(4)) + read_offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'la $a0, temp_string\n' + self.text += f'li $a1, 2048\n' + self.text += f'li $v0, 8\n' + self.text += f'syscall\n' + + # Remove last chars (if they are '\n' or '\r\n') + self.text += 'move $t0, $a0\n' + self.text += 'jump_read_str_char:\n' + self.text += 'li $t1, 0\n' + self.text += 'lb $t1, 0($t0)\n' + self.text += 'beqz $t1, analize_str_end\n' # finish if the final of string is found + self.text += 'addi $t0, $t0, 1\n' + self.text += 'j jump_read_str_char\n' + + self.text += 'analize_str_end:\n' + self.text += 'addi $t0, $t0, -1\n' # go to char at length - 1 + self.text += 'li $t1, 0\n' + self.text += 'lb $t1, 0($t0)\n' + self.text += 'bne $t1, 10, finish_jump_read_str_char\n' # remove char only if it is '\n' + self.text += 'sb $0, 0($t0)\n' # remove '\r\n' + self.text += 'addi $t0, $t0, -1\n' # go to char at length - 2 + self.text += 'lb $t1, 0($t0)\n' + self.text += 'bne $t1, 13, finish_jump_read_str_char\n' # remove char only if it is '\r' + self.text += 'sb $0, 0($t0)\n' # remove '\r\n' + self.text += 'j analize_str_end\n' + self.text += 'finish_jump_read_str_char:\n' + + self.text += f'sw $a0, {read_offset}($sp)\n' + + @visitor.when(LoadNodeIL) + def visit(self, node): + self.text += f'la $t0, {node.msg}\n' + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t0, {offset}($sp)\n' + # @visitor.when(CIL_AST.LoadInt) + # def visit(self, node): + # self.text += f'li $t0, {node.num}\n' + # offset = self.var_offset[self.current_function.name][node.local_dest] + # self.text += f'sw $t0, {offset}($sp)\n' - @visitor.when(DispatchParentIL) + @visitor.when(HaltNodeIL) def visit(self, node): - self.code.append("#DispatchParent in place\n") - self.code.append("#obj {} offset {} result {}\n".format(node.obj, node.method, node.result)) - self.code.append("la $v0, " + str(node.method) + "\n") - if node.result == -1: - # self.code.append("jalr $ra, $v0\n") - self.code.append("jal IO.out_string\n") - else: - self.code.append("jal {}\n".format(node.result)) - # self.code.append("addiu $sp, $sp, -4\n") - # self.code.append("sw $a0, 0($sp)\n") - # self.code.append("addiu $sp, $sp, -4\n") + self.text += 'li $v0, 10\n' + self.text += 'syscall\n' - @visitor.when(InheritIL) + @visitor.when(TypeOfNodeIL) def visit(self, node): - self.code.append("lw $a0, {}($sp)\n".format(4 * node.child)) - self.code.append("la $a1, " + node.parent + "_VT\n") - self.code.append("la $t0, inherit\n") - self.code.append("jalr $ra, $t0\n") - self.code.append("sw $v0, {}($sp)\n".format(4*node.result)) + obj_offset = self.var_offset[self.current_function.name][node.obj] + self.text += f'lw $t0, {obj_offset}($sp)\n' #get obj address from local + self.text += 'lw $t1, 4($t0)\n' # get type name from the sec pos in obj layout + res_offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t1, {res_offset}($sp)\n' - @visitor.when(StringIL) + @visitor.when(IsVoidNodeIL) def visit(self, node): - self.code.append("{}: .asciiz \"{}\"\n".format(node.label, node.string)) + self.text += 'la $t0, void\n' + offset = self.var_offset[self.current_function.name][node.expre_value] + self.text += f'lw $t1, {offset}($sp)\n' + self.text += 'seq $a0, $t0, $t1\n' + res_offset = self.var_offset[self.current_function.name][node.result_local] + self.text += f'sw $a0, {res_offset}($sp)\n' + + @visitor.when(CopyNodeIL) + def visit(self, node): + # offset = self.var_offset[self.current_function.name][self.current_function.params[0].name] + self_offset = self.var_offset[self.current_function.name][node.source] + self.text += f'lw $t0, {self_offset}($sp)\n' # get self address + self.text += f'lw $a0, 8($t0)\n' # get self size {amount} + self.text += f'mul $a0, $a0, 4\n' # {amount * 4} + self.text += f'li $v0, 9\n' + self.text += f'syscall\n' + self.text += 'bge $v0, $sp heap_error\n' + self.text += f'move $t1, $v0\n' + + # Copy All Slots inlcuding Tag, Size, methods ptr and each atrribute + # Tenemos q hacerlo en MIPS porq copy está a nivel de Object y en python + # en este punto no sabemos el tipo dinamico (para asi saber el tamaño real) + # hasta q se haga el VCALL por lo el ciclo hayq hacerlo en MIPS) + + self.text += 'li $a0, 0\n' + self.text += 'lw $t3, 8($t0)\n' + self.text += 'copy_object_word:\n' + self.text += 'lw $t2, 0($t0)\n' # load current object word + self.text += 'sw $t2, 0($t1)\n' # store word in copy object + self.text += 'addi $t0, $t0, 4\n' # move to the next word in orginal object + self.text += 'addi $t1, $t1, 4\n' # move to the next word in copy object + self.text += 'addi $a0, $a0, 1\n' # size count + ''' + Src2 can either be a register or an immediate value (a 16 bit integer). + blt Rsrc1, Src2, label (Branch on Less Than) + Conditionally branch to the instruction at the label if the contents of register Rsrc1 are less than Src2. + ''' + self.text += 'blt $a0, $t3, copy_object_word\n' # $t3 is the orginal object size + + offset = self.var_offset[self.current_function.name][node.dest] + # $t1 is pointing at the end of the object + # if $v0 is modified for any reason (it should not, but...) + # before looping we can move $t3, $t1 and use $t3 but this should work + self.text += f'sw $v0, {offset}($sp)\n' #store instance address in local + + @visitor.when(LengthNodeIL) + def visit(self, node): + offset = self.var_offset[self.current_function.name][node.arg] + self.text += f'lw $t0, {offset}($sp)\n' + self.text += f'lw $t0, 16($t0)\n' + + self.text += 'li $a0, 0\n' + self.text += 'count_char:\n' + self.text += 'lb $t1, 0($t0)\n' # loading current char + self.text += 'beqz $t1, finish_chars_count\n' # finish if a zero is found + self.text += 'addi $t0, $t0, 1\n' # move to the next char + self.text += 'addi $a0, $a0, 1\n' # length_count += 1 + self.text += 'j count_char\n' + self.text += 'finish_chars_count:\n' + + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $a0, {offset}($sp)\n' # store length count address in local + + @visitor.when(ConcatNodeIL) + def visit(self, node): + offset_arg1 = self.var_offset[self.current_function.name][node.arg1] + offset_len1 = self.var_offset[self.current_function.name][node.len1] + + offset_arg2 = self.var_offset[self.current_function.name][node.arg2] + offset_len2 = self.var_offset[self.current_function.name][node.len2] + + # reserve space for concatenation result + self.text += f'lw $a0, {offset_len1}($sp)\n' + self.text += f'lw $t0, {offset_len2}($sp)\n' + # add Rdest, Rsrc1, Src2 Addition (with overflow) + # is similar to addi but 2do summand can be a register + self.text += 'add $a0, $a0, $t0\n' + self.text += 'addi $a0, $a0, 1\n' # reserve 1 more byte for '\0' + self.text += f'li $v0, 9\n' + self.text += f'syscall\n' + self.text += 'bge $v0, $sp heap_error\n' + self.text += 'move $t3, $v0\n' + # the beginning of new reserved address is in $v0 and save in $t3 + + self.text += f'lw $t0, {offset_arg1}($sp)\n' + self.text += f'lw $t1, {offset_arg2}($sp)\n' + + # copy arg1 starting in $t0 to $v0 + self.text += 'copy_arg1_char:\n' + self.text += 'lb $t2, 0($t0)\n' # loading current char from arg1 + self.text += 'sb $t2, 0($v0)\n' # storing current char into result_str end + self.text += 'beqz $t2, concat_arg2_char\n' # finish if a zero is found + self.text += 'addi $t0, $t0, 1\n' # move to the next char + self.text += 'addi $v0, $v0, 1\n' # move to the next available byte + self.text += 'j copy_arg1_char\n' + + # concat arg2 starting in $t1 to $v0 + self.text += 'concat_arg2_char:\n' + self.text += 'lb $t2, 0($t1)\n' # loading current char from arg1 + self.text += 'sb $t2, 0($v0)\n' # storing current char into result_str end + self.text += 'beqz $t2, finish_arg2_concat\n' # finish if a zero is found + self.text += 'addi $t1, $t1, 1\n' # move to the next char + self.text += 'addi $v0, $v0, 1\n' # move to the next available byte + self.text += 'j concat_arg2_char\n' + self.text += 'finish_arg2_concat:\n' + self.text += 'sb $0, ($v0)\n' # put '\0' at the end + + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t3, {offset}($sp)\n' # store length count address in local - @visitor.when(PrintIL) + @visitor.when(SubstringNodeIL) def visit(self, node): - if node.string: - self.code.append("la $t0, _out_string\n") - else: - self.code.append("la $t0, _out_in\n") - self.code.append("jalr $ra, $t0\n") + offset_idx = self.var_offset[self.current_function.name][node.begin] + offset_len = self.var_offset[self.current_function.name][node.end] + offset_str = self.var_offset[self.current_function.name][node.word] + + # reserve space for substring result + self.text += f'lw $a0, {offset_len}($sp)\n' + self.text += 'addi $a0, $a0, 1\n' # reserve 1 more byte for '\0' + self.text += f'li $v0, 9\n' + self.text += f'syscall\n' + self.text += 'bge $v0, $sp heap_error\n' + # the beginning of new reserved address is in $v0 + + self.text += f'lw $t0, {offset_idx}($sp)\n' + self.text += f'lw $t1, {offset_len}($sp)\n' + self.text += f'lw $t4, {offset_str}($sp)\n' + self.text += f'lw $t2, 16($t4)\n' + + self.text += 'bltz $t0, substr_error\n' + + # jump first i chars + self.text += 'li $a0, 0\n' + self.text += 'jump_str_char:\n' + self.text += f'beq $a0, $t0, finish_index_jump\n' # finish if we are at index i + self.text += 'addi $a0, $a0, 1\n' # chars count + self.text += 'addi $t2, $t2, 1\n' # move to the next char + self.text += 'beq $t2, $zero, substr_error\n' + self.text += 'j jump_str_char\n' + self.text += 'finish_index_jump:\n' + self.text += 'li $a0, 0\n' # reset $a0 to count the length + self.text += 'move $t3, $v0\n' # save start of substring + + # coping chars from string $t2 (starting in $t0 index) until length $t1 to $v0 + self.text += 'copy_substr_char:\n' + self.text += 'beq $a0, $t1 finish_substr_copy\n' # finish if the chars count is equals to length + self.text += 'li $t0, 0\n' # reset $t0 before loading bytes + self.text += 'lb $t0, 0($t2)\n' # loading current char from string + self.text += 'sb $t0, 0($v0)\n' # storing current char into result_str end + self.text += 'addi $t2, $t2, 1\n' # move to the next char + self.text += 'beq $t2, $zero, substr_error\n' + self.text += 'addi $v0, $v0, 1\n' # move to the next available byte + self.text += 'addi $a0, $a0, 1\n' # chars count + self.text += 'j copy_substr_char\n' + self.text += 'finish_substr_copy:\n' + self.text += 'sb $0, ($v0)\n' # put '\0' at the end + + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t3, {offset}($sp)\n' # store length count address in local - @visitor.when(LoadLabelIL) + @visitor.when(StringEqualsNodeIL) def visit(self, node): - # self.code.append("sw $a0, {}($sp)\n".format(-4 * node.var)) - self.code.append("la $a0, " + node.label + "\n") - self.code.append("sw $a0, 0($sp)\n") - self.code.append("addi $sp, $sp, -4\n") + offset_arg1 = self.var_offset[self.current_function.name][node.s1] + offset_arg2 = self.var_offset[self.current_function.name][node.s2] + + self.text += f'lw $t1, {offset_arg1}($sp)\n' + self.text += f'lw $t2, {offset_arg2}($sp)\n' + + # comparing char by char + self.text += 'compare_str_char:\n' + self.text += 'li $t3, 0\n' # reset $t3 before loading byte + self.text += 'lb $t3, 0($t1)\n' # loading current char from string1 + self.text += 'li $t4, 0\n' # reset $t4 before loading byte + self.text += 'lb $t4, 0($t2)\n' # loading current char from string2 + self.text += 'seq $a0, $t3, $t4\n' # comparing current bytes + self.text += 'beqz $a0, finish_compare_str\n' # finish if current chars are not equals + self.text += 'beqz $t3, finish_compare_str\n' # finish if the final of string1 is found + self.text += 'beqz $t4, finish_compare_str\n' # finish if the final of string2 is found + self.text += 'addi $t1, $t1, 1\n' # move to the next char in string1 + self.text += 'addi $t2, $t2, 1\n' # move to the next char in string2 + self.text += 'j compare_str_char\n' + self.text += 'finish_compare_str:\n' + + offset = self.var_offset[self.current_function.name][node.result] + self.text += f'sw $a0, {offset}($sp)\n' # store comparison result in local \ No newline at end of file diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 37bf7962..63dc02ce 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -1,595 +1,967 @@ import sys sys.path.append('/..') from code_generation import * +from semantic.context import * +from semantic.features import * +from semantic.types import * import visitors.visitor as visitor from cl_ast import * +class ScopeCIL: + def __init__(self, parent=None): + self.locals = [] + self.cil_locals = {} + self.parent = parent + self.children = [] + self.index = 0 if parent is None else len(parent) + + def __len__(self): + return len(self.locals) + + def create_child(self): + child = ScopeCIL(self) + self.children.append(child) + return child + + def define_variable(self, vname, vtype): + info = VariableInfo(vname, vtype) + self.locals.append(info) + return info + + def define_cil_local(self, vname, cilname, vtype = None): + self.define_variable(vname, vtype) + self.cil_locals[vname] = cilname + + + def get_cil_local(self, vname): + if self.cil_locals.__contains__(vname): + return self.cil_locals[vname] + else: + return None + + def find_cil_local(self, vname, index=None): + locals = self.cil_locals.items() if index is None else itt.islice(self.cil_locals.items(), index) + try: + return next(cil_name for name, cil_name in locals if name == vname) + except StopIteration: + return self.parent.find_cil_local(vname, self.index) if (self.parent is not None) else None + + def find_variable(self, vname, index=None): + locals = self.locals if index is None else itt.islice( + self.locals, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_variable(vname, self.index) if (self.parent is not None) else None + + def is_defined(self, vname): + return self.find_variable(vname) is not None + + def is_defined_cil_local(self, vname): + return self.find_cil_local(vname ) is not None + + def is_local(self, vname): + return any(True for x in self.locals if x.name == vname) + + def remove_local(self, vname): + self.locals = [local for local in self.locals if local.name != vname] + class codeVisitor: def __init__(self, context): - #code IL - self.code = [] - self.data = [] + self.dottypes = {} + self.dotdata = {} + self.dotcode = [] + self.current_type = None + self.current_method = None + self.current_function = None self.context = context + self.label_count = 0 + # self.scope = scope + # self.context.set_type_tags() + # self.context.set_type_max_tags() + + @property + def params(self): + return self.current_function.params + + @property + def localvars(self): + return self.current_function.localvars + + @property + def instructions(self): + return self.current_function.instructions + + def get_label(self): + self.label_count += 1 + return f'label_{self.label_count}' + + def register_param(self, vinfo): + param_node = ParamNodeIL(vinfo.name) + self.params.append(param_node) + return vinfo.name + + def is_defined_param(self, name): + for p in self.params: + if p.name == name: + return True + return False + + def register_local(self, var_name): + local_node = LocalNodeIL(var_name) + self.localvars.append(local_node) + return var_name + + def define_internal_local(self, scope, name = "internal", cool_var_name = None, class_type = None): + if class_type != None: + cilname = f'{class_type}.{name}' + scope.define_cil_local(cool_var_name, cilname, None) + self.register_local(cilname) + else : + cilname = f'{name}_{len(self.localvars)}' + scope.define_cil_local(cool_var_name, cilname, None) + self.register_local(cilname) + return cilname + + def register_instruction(self, instruction): + self.instructions.append(instruction) + return instruction + + def to_function_name(self, method_name, type_name): + return f'{type_name}.{method_name}' - self.count = 0 - self.current_class = 'Main' - - self.virtual_table = VirtualTable() - - self.depth = {} - - self.collectTypes(context) - self.setBuiltInTypes() - # self.setClassConstructor() - self.setInitialCode() - - def getInt(self): - self.count = self.count + 1 - return self.count - - def collectTypes(self, context): - # print('collecting types') - types = {} - methods = {} - attr = {} - - for t in context.types: - t_str = str(t) - # print('----------------Typessssss-------------------------') - # print(t_str) - if context.types[t].parent is not None: - types[t_str] = context.types[t].parent - methods[t_str] = [] - attr[t_str] = context.types[t].attributes - if len(context.types[t].attributes): - for atr in context.types[t].attributes: - self.virtual_table.add_attr(t_str, atr) - # else: - # self.virtual_table.add_method(t_str, '-', []) - for m in context.types[t].methods.keys(): - methods[t_str] = (context.types[t].methods[m]) - # print("class {} method_name {} params {}".format(t_str,(context.types[t].methods[m]).name, (context.types[t].methods[m]).param_names)) - self.virtual_table.add_method(t_str, (context.types[t].methods[m]).name, (context.types[t].methods[m]).param_names) - # print(str(self.virtual_table)) - # print('-------------------------------') - for t in types: - self.data.append(HierarchyIL(t, types[t].name)) - - self.data.append(VirtualTableIL('Int', [])) - self.data.append(VirtualTableIL('Bool', [])) - - for m in self.virtual_table.methods.keys(): - self.data.append(VirtualTableIL(m, self.virtual_table.methods[m])) - depth = dict([(types[x].name, len(types) + 2) for x in types]) - depth['Object'] = 0 - # TODO set some depth features for simplicity - # for _ in types: - # for c in types: - # if c is None: - # continue - # p = types[c] - # depth[c.name] = min(depth[c.name], depth[p] + 1) - # self.depth = depth - - def setInitialCode(self): - self.code.append(CommentIL('--------------Initial Code---------------')) - self.code.append(LabelIL("main", "")) + def register_function(self, function_name): + function_node = FunctionNodeIL(function_name, [], [], []) + self.dotcode.append(function_node) + return function_node + + def register_type(self, name): + type_node = TypeNodeIL(name) + self.dottypes[name] = type_node + return type_node + + def is_in_data(self, name): + return name in self.dotdata.keys + + def register_data(self, value): + vname = f's_{len(self.dotdata)}' + self.dotdata[vname] = value + return vname + + def register_builtin_types(self, scope): + for t in ['Object', 'Int', 'String', 'Bool', 'IO']: + builtin_type = self.context.get_type(t) + cil_type = self.register_type(t) + cil_type.attributes = [f'{attr.name}' for attr in builtin_type.attributes] + cil_type.methods = {f'{m}':f'{c}.{m}' for c, m in builtin_type.get_all_methods()} + if t in ['Int', 'String', 'Bool']: + cil_type.attributes.append('value') + + #----------------Object--------------------- + #init + self.current_function = self.register_function('Object_init') + self.register_param(VariableInfo('self', None)) + self.register_instruction(ReturnNodeIL(None)) + + #abort + self.current_function = self.register_function(self.to_function_name('abort', 'Object')) + self.register_param(VariableInfo('self',None)) + msg = self.define_internal_local(scope=scope, name="msg") + key_msg = '' + for s in self.dotdata.keys(): + if self.dotdata[s] == 'Abort called from class ': + key_msg = s + self.register_instruction(LoadNodeIL(key_msg, msg)) + self.register_instruction(OutStringNodeIL(msg)) + type_name = self.define_internal_local(scope=scope, name = "type_name" ) + self.register_instruction(TypeOfNodeIL('self', type_name)) + self.register_instruction(OutStringNodeIL(type_name)) + eol_local = self.define_internal_local(scope=scope, name="eol") + for s in self.dotdata.keys(): + if self.dotdata[s] == '\n': + eol = s + self.register_instruction(LoadNodeIL(eol, eol_local)) + self.register_instruction(OutStringNodeIL(eol_local)) + self.register_instruction(HaltNodeIL()) + + #type_name + self.current_function = self.register_function(self.to_function_name('type_name', 'Object')) + self.register_param(VariableInfo('self', None)) + type_name = self.define_internal_local(scope=scope, name = "type_name" ) + self.register_instruction(TypeOfNodeIL('self', type_name)) + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').name ,instance)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(type_name),ArgNodeIL(instance)],"String")) + self.register_instruction(ReturnNodeIL(instance)) + + #copy + self.current_function = self.register_function(self.to_function_name('copy', 'Object')) + self.register_param(VariableInfo('self',None)) + copy = self.define_internal_local(scope=scope, name= "copy") + self.register_instruction(CopyNodeIL('self', copy)) + self.register_instruction(ReturnNodeIL(copy)) + + #----------------IO--------------------- + #init + self.current_function = self.register_function('IO_init') + self.register_param(VariableInfo('self', None)) + self.register_instruction(ReturnNodeIL(None)) + + #out_string + self.current_function = self.register_function(self.to_function_name('out_string', 'IO')) + self.register_param(VariableInfo('self', None)) + self.register_param(VariableInfo('x', None)) + v = self.define_internal_local(scope=scope, name="v") + self.register_instruction(GetAttribNodeIL(v, 'x','value','String')) + self.register_instruction(OutStringNodeIL(v)) + self.register_instruction(ReturnNodeIL('self')) + + #out_int + self.current_function = self.register_function(self.to_function_name('out_int', 'IO')) + self.register_param(VariableInfo('self', None)) + self.register_param(VariableInfo('x', None)) + v = self.define_internal_local(scope=scope, name="v") + self.register_instruction(GetAttribNodeIL(v, 'x','value','Int')) + self.register_instruction(OutIntNodeIL(v)) + self.register_instruction(ReturnNodeIL('self')) + + #in_string + self.current_function = self.register_function(self.to_function_name('in_string', 'IO')) + self.register_param(VariableInfo('self', None)) + msg = self.define_internal_local(scope=scope, name="read_str") + self.register_instruction(ReadStringNodeIL(msg)) + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').name ,instance)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(msg),ArgNodeIL(instance)],"String")) + self.register_instruction(ReturnNodeIL(instance)) + + #in_int + self.current_function = self.register_function(self.to_function_name('in_int', 'IO')) + self.register_param(VariableInfo('self', None)) + number = self.define_internal_local(scope=scope, name ="read_int") + self.register_instruction(ReadIntNodeIL(number)) + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name,instance)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ ArgNodeIL(number), ArgNodeIL(instance)], "Int")) + self.register_instruction(ReturnNodeIL(instance)) + + # ----------------String--------------------- + #init + self.current_function=self.register_function('String_init') + self.register_param(VariableInfo('self', None)) + self.register_param(VariableInfo('v', None)) + self.register_instruction(SetAttribNodeIL('self', 'value', 'v', 'String')) + self.register_instruction(ReturnNodeIL(None)) + + #length + self.current_function = self.register_function(self.to_function_name('length', 'String')) + self.register_param(VariableInfo('self', None)) + length_result = self.define_internal_local(scope=scope, name="length") + self.register_instruction(LengthNodeIL('self', length_result)) + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name,instance)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init,'Int_init', [ArgNodeIL(length_result),ArgNodeIL(instance)], "Int")) + self.register_instruction(ReturnNodeIL(instance)) + + #concat + self.current_function = self.register_function(self.to_function_name('concat', 'String')) + self.register_param(VariableInfo('self', None)) + self.register_param(VariableInfo('s', None)) + + str1 = self.define_internal_local(scope=scope, name="str1") + self.register_instruction(GetAttribNodeIL(str1, 'self','value','String')) + len1 = self.define_internal_local(scope=scope, name="len1") + self.register_instruction(StaticCallNodeIL(len1, 'String.length', [ArgNodeIL('self')], 'String')) + + str2 = self.define_internal_local(scope=scope, name="str2") + self.register_instruction(GetAttribNodeIL(str2, 's', 'value', 'String')) + len2 = self.define_internal_local(scope=scope, name="len2") + self.register_instruction(StaticCallNodeIL(len2, 'String.length', [ArgNodeIL('s')], 'String')) + + local_len1 = self.define_internal_local(scope=scope, name="local_len1") + self.register_instruction(GetAttribNodeIL(local_len1, len1, 'value', 'Int')) + local_len2 = self.define_internal_local(scope=scope, name="local_len2") + self.register_instruction(GetAttribNodeIL(local_len2, len2, 'value', 'Int')) + + concat_result = self.define_internal_local(scope=scope, name="concat") + self.register_instruction(ConcatNodeIL(str1, local_len1, str2, local_len2, concat_result)) + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').name ,instance)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(concat_result), ArgNodeIL(instance)],"String")) + self.register_instruction(ReturnNodeIL(instance)) - # self.code.append(CustomLineIL("sub $a0, $a0, $a0\n")) - # self.code.append(CustomLineIL("sub $a1, $a1, $a1\n")) - # self.code.append(CustomLineIL("sub $a2, $a2, $a2\n")) - # self.code.append(CustomLineIL("sub $a3, $a3, $a3\n")) - - # self.code.append(PushIL()) - # self.code.append(PushIL()) - # self.code.append(PushIL()) - - self.code.append(AllocateIL(1, self.virtual_table.get_index('Main'), 'Main')) - self.code.append(DispatchParentIL(2, 1, 'Main.Constructor')) - - self.code.append(DispatchIL(3,1,self.virtual_table.get_method_id('Main', 'main'))) - - self.code.append(GotoIL("Object.abort")) - self.code.append(CommentIL('--------------End Initial Code---------------')) - - def setBuiltInTypes(self): - built_in = ['Object','Int', 'IO', 'Bool', 'String'] - for t in built_in: - self.code.append(LabelIL(t, 'Constructor', True)) - # self.code.append(PushIL()) - self.code.append(ReturnIL(0)) - self.setClassTypeName(t) - - def setClassConstructor(self, attributes): - self.code.append(LabelIL(self.current_class, 'Constructor', True)) - - vars = Variables() - vars.add_var('self') - vars.add_temp() - - for node in attributes: - if node.expr == None: - continue - self.visit(node.expr, vars) - p = vars.peek_last() - index = self.virtual_table.get_attributes_id(self.current_class, node.id) - self.code.append(VarToMemoIL(vars.id('self'), vars.id(p), index)) - - # self.code.append(PushIL()) - # if self.current_class == 'Main': - # self.code.append(ReturnIL(len(at)) - # else: - # self.code.append(ReturnIL()) - self.code.append(ReturnIL(len(attributes))) - - def setClassTypeName(self, claSS): - self.code.append(LabelIL(claSS, 'type_name', True)) - # self.code.append(CustomLineIL("sw $a1, ($sp)\n")) - self.code.append(CustomLineIL("la $a1, " + claSS + '_name\n' )) - self.code.append(CustomLineIL("jr $ra\n")) - - - def handleBinaryOps(self, node, variables, symbol): - self.code.append(CommentIL('Binary')) - # self.code.append(PushIL()) - res = variables.add_temp() - - self.visit(node.left, variables) - left = variables.peek_last() - self.visit(node.right, variables) - right = variables.peek_last() - - self.code.append(BinaryOperationIL(variables.id(res), variables.id(left), variables.id(right), symbol)) - - variables.pop_var() - variables.pop_var() - # self.code.append(PopIL(2)) - - def handleUnaryOps(self, node, variables, symbol): - self.code.append(CommentIL('Unary')) - res = variables.add_temp() - # self.code.append(PushIL()) - - self.visit(node.expr, variables) - v = variables.peek_last() - - self.code.append(UnaryOperationIL(variables.id(res), variables.id(v), symbol)) + #substr + self.current_function = self.register_function(self.to_function_name('substr', 'String')) + self.register_param(VariableInfo('self', None)) + self.register_param(VariableInfo('i', None)) + self.register_param(VariableInfo('l', None)) + i_value=self.define_internal_local(scope=scope, name="i_value") + self.register_instruction(GetAttribNodeIL(i_value, 'i','value','Int')) + l_value = self.define_internal_local(scope=scope, name="l_value") + self.register_instruction(GetAttribNodeIL(l_value, 'l','value','Int')) + subs_result=self.define_internal_local(scope=scope, name="subs_result") + self.register_instruction(SubstringNodeIL(i_value, l_value, 'self', subs_result)) + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('String', self.context.get_type('String').name,instance)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(subs_result),ArgNodeIL(instance)],"String")) + self.register_instruction(ReturnNodeIL(instance)) + + #----------------Bool--------------------- + #init + self.current_function=self.register_function('Bool_init') + self.register_param(VariableInfo('self', None)) + self.register_param(VariableInfo('v', None)) + self.register_instruction(SetAttribNodeIL('self', 'value', 'v', 'Bool')) + self.register_instruction(ReturnNodeIL(None)) + + #----------------Int--------------------- + #init + self.current_function=self.register_function('Int_init') + self.register_param(VariableInfo('self', None)) + self.register_param(VariableInfo('v', None)) + self.register_instruction(SetAttribNodeIL('self', 'value', 'v', 'Int')) + self.register_instruction(ReturnNodeIL(None)) + + def build_string_equals_function(self, scope): + self.current_function = self.register_function('String_equals') + self.register_param(VariableInfo('str1', None)) + self.register_param(VariableInfo('str2', None)) + + str1 = self.define_internal_local(scope=scope, name="str1") + self.register_instruction(GetAttribNodeIL(str1, 'str1', 'value','String')) + + str2 = self.define_internal_local(scope=scope, name="str2") + self.register_instruction(GetAttribNodeIL(str2, 'str2', 'value', 'String')) + + result = self.define_internal_local(scope=scope, name="comparison_result") + self.register_instruction(StringEqualsNodeIL(str1, str2, result)) + self.register_instruction(ReturnNodeIL(result)) + @visitor.on('node') - def visit(self, node): + def visit(self, node, scope): pass - #program @visitor.when(ProgramNode) - def visit(self, node): - # print('ProgramNode') - for n in node.declarations: - self.visit(n) - - #declarations - @visitor.when(ClassDeclarationNode) - def visit(self, node): - # print('ClassDeclarationNode') - self.current_class = node.id - # print('--current_class {}\n'.format(node.id)) - attributes = [] - for f in node.features: - if type(f) == AttrDeclarationNode: - attributes.append(f) + def visit(self, node, scope = None): - self.setClassConstructor(attributes) - self.setClassTypeName(self.current_class) - - for f in node.features: - self.visit(f) + if not scope: + scope = ScopeCIL() + + self.current_function = self.register_function('main') + instance = self.define_internal_local(scope = scope, name = "instance") + result = self.define_internal_local(scope = scope, name = "result") + self.register_instruction(AllocateNodeIL('Main',self.context.get_type('Main').name, instance)) + # self.register_instruction(ArgNodeIL(instance)) + self.register_instruction(StaticCallNodeIL(result, 'Main_init', [ArgNodeIL(instance)],"Main")) + # self.register_instruction(ArgNodeIL(instance)) + self.register_instruction(StaticCallNodeIL(result, self.to_function_name('main', 'Main'), [ArgNodeIL(instance)],"Main")) + self.register_instruction(ReturnNodeIL(None)) + self.current_function = None + + self.register_data('Abort called from class ') + self.register_data('\n') + self.dotdata['empty_str'] = '' + + #Add built-in types in .TYPES section + self.register_builtin_types(scope) - @visitor.when(AttrDeclarationNode) - def visit(self, node): - pass + #Add string equals function + self.build_string_equals_function(scope) + + for klass in node.declarations: + self.visit(klass, scope.create_child()) + return ProgramNodeIL(self.dottypes, self.dotdata, self.dotcode) + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + self.current_type = self.context.get_type(node.id) + + #Handle all the .TYPE section + cil_type = self.register_type(self.current_type.name) + cil_type.attributes = [f'{attr.name}' for c, attr in self.current_type.get_all_attributes()] + cil_type.methods = {f'{m}':f'{c}.{m}' for c, m in self.current_type.get_all_methods()} + + scope.define_cil_local("self", self.current_type.name, self.current_type) + + func_declarations = [f for f in node.features if isinstance(f, FuncDeclarationNode)] + attr_declarations = [a for a in node.features if not isinstance(a, FuncDeclarationNode)] + for attr in attr_declarations: + scope.define_cil_local(attr.id, attr.id, node.id) + + + #-------------------------Init--------------------------------- + self.current_function = self.register_function(f'{node.id}_init') + self.register_param(VariableInfo('self', None)) + # instance = self.define_internal_local(scope=scope, name="instance", class_type=self.current_type.name) + # self.register_instruction(AllocateNodeIL(node.name, self.context.get_type(node.name).name,instance)) + # self.current_type.instance = instance + + #Init parents recursively + result = self.define_internal_local(scope=scope, name = "result") + # self.register_instruction(ArgNodeIL('instance')) + self.register_instruction(StaticCallNodeIL(result, f'{node.parent}_init',[ArgNodeIL('self')], node.parent)) + self.register_instruction(ReturnNodeIL(None)) + + for attr in attr_declarations: + self.visit(attr, scope) + #--------------------------------------------------------------- + self.current_function = None + + for feature in func_declarations: + self.visit(feature, scope.create_child()) + + self.current_type = None + @visitor.when(FuncDeclarationNode) - def visit(self, node): - self.code.append(LabelIL(self.current_class, node.id, True)) - - variables = Variables() - variables.add_var('self') + def visit(self, node, scope): + self.current_method = self.current_type.get_method(node.id) + self.dottypes[self.current_type.name].methods[node.id] = f'{self.current_type.name}.{node.id}' + cil_method_name = self.to_function_name(node.id, self.current_type.name) + self.current_function = self.register_function(cil_method_name) + self.register_param(VariableInfo('self', self.current_type)) for p in node.params: - variables.add_var(p.id) - - variables.add_temp() - #patch - st = len(self.code) - offset = 0 - #endpatch - self.visit(node.body, variables) - if self.current_class == 'Main' and node.id == 'main': - self.code.append("j Object.abort\n") - else: - for i in range(st, len(self.code)): - print('offset::::::::',self.code[i]) - if isinstance(self.code[i], DispatchIL) or isinstance(self.code[i], DispatchParentIL): - offset += 1 - # self.code.append(PopIL(offset)) - self.code.append(ReturnIL(len(node.params))) + self.register_param(VariableInfo(p.id, p.type)) + + value = self.visit(node.body, scope) + + self.register_instruction(ReturnNodeIL(value)) + self.current_method = None + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + instance = None + + if node.type in ['Int', 'Bool']: + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name, instance)) + value = self.define_internal_local(scope=scope, name="value") + self.register_instruction(LoadNodeIL(0,value)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ ArgNodeIL(value), ArgNodeIL(instance)], node.type)) + elif node.type == 'String': + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name ,instance)) + value = self.define_internal_local(scope=scope, name="value") + self.register_instruction(LoadNodeIL('empty_str',value)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ArgNodeIL(value),ArgNodeIL(instance)], node.type)) + + self.register_instruction(SetAttribNodeIL('self', node.id,instance, self.current_type.name)) + @visitor.when(VarDeclarationNode) - def visit(self, node, variables): - # self.code.append(PushIL()) - p = variables.add_var(node.idx) - - if node.expr != None: - self.visit(node.expr, variables) - res = variables.peek_last() - self.code.append(VarToVarIL(variables.id(p), variables.id(res))) - variables.pop_var() - # self.code.append(PopIL()) - - #operations: binary - @visitor.when(SumNode) - def visit(self, node, variables): - self.handleBinaryOps(node, variables, '+') + def visit(self, node, scope): + expr = self.visit(node.expr, scope) + self.register_instruction(SetAttribNodeIL('self', node.name, expr, self.current_type.name)) - @visitor.when(DiffNode) - def visit(self, node, variables): - self.handleBinaryOps(node, variables, '-') + @visitor.when(AssignNode) + def visit(self, node, scope): + expr_local = self.visit(node.expr, scope) + result_local = self.define_internal_local(scope=scope, name = "result" ) + cil_node_name = scope.find_cil_local(node.id) + + if self.is_defined_param(node.id): + self.register_instruction(AssignNodeIL(node.id, expr_local)) + elif self.current_type.has_attr(node.id): + cil_type_name = 'self' + self.register_instruction(SetAttribNodeIL(cil_type_name, node.id, expr_local, self.current_type.name )) + else: + self.register_instruction(AssignNodeIL(cil_node_name, expr_local)) + return expr_local - @visitor.when(StarNode) - def visit(self, node, variables): - self.handleBinaryOps(node, variables, '*') + @visitor.when(BlockNode) + def visit(self, node, scope): + for e in node.expr_list: + result_local = self.visit(e, scope) + return result_local + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name = "result") - @visitor.when(DivNode) - def visit(self, node, variables): - self.handleBinaryOps(node, variables, '/') + cond_value = self.visit(node.cond, scope) - @visitor.when(LessNode) - def visit(self, node, variables): - self.handleBinaryOps(node, variables, '<') + if_then_label = self.get_label() + self.register_instruction(GotoNodeIL(cond_value, if_then_label)) - @visitor.when(LessEqualNode) - def visit(self, node, variables): - self.handleBinaryOps(node, variables, '<=') + else_value = self.visit(node.else_stm, scope) + self.register_instruction(AssignNodeIL(result_local, else_value)) + + end_if_label = self.get_label() + self.register_instruction(GotoNodeIL(end_if_label)) - @visitor.when(EqualNode) - def visit(self, node, variables): - self.handleBinaryOps(node, variables, '=') + self.register_instruction(LabelNodeIL(if_then_label)) + then_value = self.visit(node.stm, scope) + self.register_instruction(AssignNodeIL(result_local, then_value)) + self.register_instruction(LabelNodeIL(end_if_label)) - #operations: unary + return result_local - @visitor.when(BitNotNode) - def visit(self, node, variables): - self.handleUnaryOps(node, variables, '~') + @visitor.when(WhileNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope = scope, name = "result") + + loop_init_label = self.get_label() + loop_body_label = self.get_label() + loop_end_label = self.get_label() + self.register_instruction(LabelNodeIL(loop_init_label)) + pred_value = self.visit(node.cond, scope) + self.register_instruction(GotoNodeIL(pred_value, loop_body_label)) + self.register_instruction(GotoNodeIL(loop_end_label)) + + self.register_instruction(LabelNodeIL(loop_body_label)) + body_value = self.visit(node.expr, scope) + self.register_instruction(GotoNodeIL(loop_init_label)) + self.register_instruction(LabelNodeIL(loop_end_label)) - @visitor.when(NotNode) - def visit(self, node, variables): - self.handleUnaryOps(node, variables, '!') - - #expressions: atomics - @visitor.when(VariableNode) - def visit(self, node, variables): - # self.code.append(PushIL()) - result = variables.add_temp() - # print(node.id) - if node.id in variables.stack: - self.code.append(VarToVarIL(variables.id(result), variables.id(node.id))) - else: - self.code.append(MemoToVarIL(variables.id(result), variables.id('self'), self.virtual_table.get_attributes_id(self.current_class, node.id))) + self.register_instruction(LoadNodeIL(None, result_local)) + return result_local + + @visitor.when(ExprCallNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope = scope, name = "result") + expr_value = self.visit(node.obj, scope) + + call_args = [] + for arg in reversed(node.args): + param_local = self.visit(arg, scope) + call_args.append(ArgNodeIL(param_local)) + call_args.append(ArgNodeIL(expr_value)) + + # dynamic_type = self.define_internal_local(scope= scope, name="dyn_type") + # self.register_instruction(TypeOfNodeIL(expr_value, dynamic_type)) - @visitor.when(NewNode) - def visit(self, node, variables): - result = variables.add_temp() - # self.code.append(PushIL()) + # for arg in call_args: + # self.register_instruction(ArgNodeIL(arg)) - dispatch = variables.add_temp() - # self.code.append(PushIL()) + dynamic_type = self.context.exprs_dict[node.obj] + self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, dynamic_type, expr_value)) + + return result_local - # self.code.append(PushIL()) - p = variables.add_temp() + @visitor.when(ParentCallNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope = scope, name = "result") + expr_value = self.visit(node.obj, scope) - size = self.virtual_table.get_index(node.type) - self.code.append(AllocateIL(variables.id(p), size, node.type)) + call_args = [] + for arg in reversed(node.args): + param_local = self.visit(arg, scope) + call_args.append(ArgNodeIL(param_local)) + call_args.append(ArgNodeIL(expr_value)) - self.code.append(VarToVarIL(variables.id(result), variables.id(p))) - self.code.append(DispatchParentIL(variables.id(dispatch), variables.id(p), node.type + '.Constructor')) + # for p in call_args: + # self.register_instruction(ArgNodeIL(p)) - # self.code.append(PopIL(1)) - variables.pop_var() - variables.pop_var() - variables.pop_var() + static_instance = self.define_internal_local(scope=scope, name='static_instance') + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name ,static_instance)) + + self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, node.type, static_instance)) + return result_local + + @visitor.when(LetNode) + def visit(self, node, scope): + let_scope = scope.create_child() + for var in node.init_list: + self.visit(var, let_scope) + + body_value = self.visit(node.expr, let_scope) + result_local = self.define_internal_local(scope = scope, name = "let_result") + self.register_instruction(AssignNodeIL(result_local, body_value)) + return result_local + + @visitor.when(LetDeclarationNode) + def visit(self, node, scope): + expr_value = self.visit(node.expr, scope) + var_init = self.define_internal_local(scope = scope, name = node.id, cool_var_name= node.id) + self.register_instruction(AssignNodeIL(var_init, expr_value)) + return var_init + + # @visitor.when(COOL_AST.LetVarDef) + # def visit(self, node, scope): + # instance = None + + # if node.type in ['Int', 'Bool']: + # instance = self.define_internal_local(scope=scope, name="instance") + # self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name, instance)) + # value = self.define_internal_local(scope=scope, name="value") + # self.register_instruction(LoadNodeIL(0,value)) + # result_init = self.define_internal_local(scope=scope, name="result_init") + # self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ ArgNodeIL(value), ArgNodeIL(instance)], node.type)) + # elif node.type == 'String': + # instance = self.define_internal_local(scope=scope, name="instance") + # self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name ,instance)) + # value = self.define_internal_local(scope=scope, name="value") + # self.register_instruction(LoadNodeIL('empty_str',value)) + # result_init = self.define_internal_local(scope=scope, name="result_init") + # self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ArgNodeIL(value), ArgNodeIL(instance)], node.type)) + + # var_def = self.define_internal_local(scope = scope, name = node.name, cool_var_name=node.name) + # self.register_instruction(AssignNodeIL(var_def, instance)) + # return var_def + + + @visitor.when(CaseNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope = scope, name = "result") + case_expr = self.visit(node.expr, scope) - #expressions: complex - @visitor.when(ConditionalNode) - def visit(self, node, variables): - self.code.append(CommentIL('Condition')) - result = variables.add_temp() - # self.code.append(PushIL()) + exit_label = self.get_label() + label = self.get_label() - self.visit(node.cond, variables) - p = variables.peek_last() + self.register_instruction(CaseNodeIL(case_expr, label)) + + tag_lst = [] + option_dict = {} + for option in node.case_list: + tag = self.context.get_type(option.typex).name + tag_lst.append(tag) + option_dict[tag] = option + tag_lst.sort() + + for t in reversed(tag_lst): + option = option_dict[t] + self.register_instruction(LabelNodeIL(label)) + label = self.get_label() + + option_type = self.context.get_type(option.typex) + #changes + self.register_instruction(OptionNodeIL(case_expr, option_type.name, 'Object', label)) + + option_scope = scope.create_child() + option_id = self.define_internal_local(scope=option_scope, name=option.id, cool_var_name=option.id) + self.register_instruction(AssignNodeIL(option_id, case_expr)) + expr_result = self.visit(option.expr, option_scope) + + self.register_instruction(AssignNodeIL(result_local, expr_result)) + self.register_instruction(GotoNodeIL(exit_label)) + + self.register_instruction(LabelNodeIL(label)) + self.register_instruction(GotoNodeIL('case_no_match_error')) + self.register_instruction(LabelNodeIL(exit_label)) + return result_local - IF = LabelIL('_if', self.getInt()) - FI = LabelIL('_fi', IF.second) + @visitor.when(OptionNode) + def visit(self, node, scope): + pass - self.code.append(IfJumpIL(variables.id(p), IF.label)) + @visitor.when(NewNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name="result") + result_init = self.define_internal_local(scope=scope, name="init") + + if node.type == "SELF_TYPE": + # get_type_local = self.define_internal_local(scope = scope, name = "type_name") + # self.register_instruction(TypeOfNodeIL("self", get_type_local)) + self.register_instruction(AllocateNodeIL(self.current_type.name,self.current_type.tag ,result_local)) + # self.register_instruction(ArgNodeIL(result_local)) + self.register_instruction(StaticCallNodeIL(result_init, f'{self.current_type.name}_init', [result_local], self.current_type.name)) + else: + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name ,result_local)) + # self.register_instruction(ArgNodeIL(result_local)) + self.register_instruction(StaticCallNodeIL(result_init,f'{node.type}_init' ,[ArgNodeIL(result_local)], self.current_type.name )) - self.visit(node.else_stm, variables) - ELSE = variables.peek_last() - self.code.append(VarToVarIL(variables.id(result), variables.id(ELSE))) + return result_local + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + expre_value = self.visit(node.expr, scope) + result_local = self.define_internal_local(scope=scope, name ="isvoid_result") + self.register_instruction(IsVoidNodeIL(result_local, expre_value)) + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, instance)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(result_local),ArgNodeIL(instance)], "Bool")) + return instance + + @visitor.when(SumNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name = "result") + op_local = self.define_internal_local(scope=scope, name = "op") + left_local = self.define_internal_local(scope=scope, name = "left") + right_local = self.define_internal_local(scope=scope, name = "right") - self.code.append(GotoIL(FI.label)) + left_value = self.visit(node.left, scope) + right_value = self.visit(node.right, scope) - self.code.append(IF) - self.visit(node.stm, variables) - _if = variables.peek_last() - self.code.append(VarToVarIL(variables.id(result), variables.id(_if))) - variables.pop_var() + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - self.code.append(LabelIL('_fi', IF.second)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) - variables.pop_var() - # self.code.append(PopIL(2)) - + self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "+")) - @visitor.when(WhileNode) - def visit(self, node, variables): - self.code.append(CommentIL('loop')) - # self.code.append(PushIL()) - - result = variables.add_temp() + # Allocate Int result + self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) - LOOP = LabelIL('_loop', self.getInt()) - POOL = LabelIL('_pool', LOOP.second) - BODY = LabelIL('_body', LOOP.second) + return result_local - self.code.append(LOOP) + @visitor.when(DiffNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name = "result") + op_local = self.define_internal_local(scope=scope, name = "op") + left_local = self.define_internal_local(scope=scope, name = "left") + right_local = self.define_internal_local(scope=scope, name = "right") - self.visit(node.cond, variables) - p = variables.peek_last() + left_value = self.visit(node.left, scope) + right_value = self.visit(node.right, scope) - self.code.append(IfJumpIL(variables.id(p), BODY.label)) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - self.code.append(GotoIL(POOL.label)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) - self.code.append(BODY) - self.visit(node.expr, variables) - variables.pop_var() - variables.pop_var() - # self.code.append(PopIL(2)) - self.code.append(GotoIL(LOOP.label)) - - self.code.append(POOL) + self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "-")) + # Allocate Int result + self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) - @visitor.when(LetNode) - def visit(self, node, variables): - self.code.append(CommentIL('Let')) - # self.code.append(PushIL()) - result = variables.add_temp() - result1 = variables.add_temp() - vars = variables.get_copy() - - for expr in node.init_list: - self.visit(expr, vars) - vars = vars.get_copy() - - self.visit(node.expr, vars) - p = vars.peek_last() - - self.code.append(VarToVarIL(result, p)) - pop_times = 2 - try: - pop_times = len(node.expr) + 1 - except: - pass + return result_local - # self.code.append(PopIL(pop_times)) + @visitor.when(StarNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name = "result") + op_local = self.define_internal_local(scope=scope, name = "op") + left_local = self.define_internal_local(scope=scope, name = "left") + right_local = self.define_internal_local(scope=scope, name = "right") + left_value = self.visit(node.left, scope) + right_value = self.visit(node.right, scope) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - @visitor.when(LetDeclarationNode) - def visit(self, node, variables): - pass + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) - @visitor.when(BlockNode) - def visit(self, node, variables): - self.code.append(CommentIL('Block')) - result = variables.add_temp() - # self.code.append(PushIL(0)) - for expr in node.expr_list: - self.visit(expr, variables) - - p = variables.peek_last() - self.code.append(VarToVarIL(variables.id(result), variables.id(p))) + self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "*")) - # self.code.append(PopIL(len(node.expr_list))) - for i in range(len(node.expr_list)): - variables.pop_var() + # Allocate Int result + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) - @visitor.when(CaseNode) - def visit(self, node, variables): - # print(node.case_list) - # node.case_list.sort(key = lambda x : self.depth[x.typex], reverse = True) + return result_local - result = variables.add_temp() - # self.code.append(PushIL()) + @visitor.when(DivNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name = "result") + op_local = self.define_internal_local(scope=scope, name = "op") + left_local = self.define_internal_local(scope=scope, name = "left") + right_local = self.define_internal_local(scope=scope, name = "right") - self.visit(node.expr, variables) - p = variables.peek_last() + left_value = self.visit(node.left, scope) + right_value = self.visit(node.right, scope) - labels = [] - for b in node.case_list: - labels.append(LabelIL('branch', self.getInt())) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - index = 0 - for b in node.case_list: - tmp = variables.add_temp() - # self.code.append(PushIL()) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) - self.code.append(InheritIL(variables.id(p), b.typex, variables.id(tmp))) - - self.code.append(IfJumpIL(variables.id(tmp), labels[index].label)) - # self.code.append(PopIL(1)) - variables.pop_var() - index += 1 - - end_label = LabelIL('esac', self.getInt()) - i = 0 - for b in node.case_list: - self.code.append(labels[i]) - i += 1 - variables.pop_var() - # self.code.append(PopIL(1)) - - # self.code.append(PushIL()) - result = variables.add_var(b.id) - self.code.append(VarToVarIL(variables.id(result), variables.id(p))) - - self.visit(b.expr, variables) - m = variables.peek_last() - self.code.append(VarToVarIL(variables.id(result), variables.id(m))) - - variables.pop_var() - variables.pop_var() - variables.pop_var() + self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "/")) - # self.code.append(PopIL(3)) + # Allocate Int result + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) - @visitor.when(OptionNode) - def visit(self, node, variables): - pass + return result_local - @visitor.when(AssignNode) - def visit(self, node, variables): - self.code.append(CommentIL('Assignment')) - self.visit(node.expr, variables) - p = variables.peek_last() + @visitor.when(BitNotNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name = "result") + op_local = self.define_internal_local(scope=scope, name = "op") + expr_local = self.define_internal_local(scope=scope) - if node.id in variables.stack: - self.code.append(VarToVarIL(variables.id(node.id), variables.id(p))) - else: - self.code.append(VarToMemoIL(variables.id('self'), variables.id(p), self.virtual_table.get_attributes_id(self.current_class, node.id))) + expr_value = self.visit(node.expr, scope) + + # self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", node.expr.computed_type.name)) + self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", None)) + self.register_instruction(UnaryNodeIL(op_local, expr_local, "~")) - @visitor.when(IsVoidNode) - def visit(self, node, vars): - pass - #expression: complex->dispatch - @visitor.when(ExprCallNode) - def visit(self, node, variables): - self.code.append(CommentIL('Point-Dispatch')) - - result = variables.add_temp() - # self.code.append(PushIL()) - # print('----------node {}---------'.format(node.id)) - index = self.virtual_table.get_method_id(node.obj, node.id) - if str(node.id) == 'type_name': - index = self.virtual_table.get_method_id(self.context.exprs_dict[node.obj].name, node.id) - self.code.append(CommentIL('push object')) - # print('-------obj-------- ',node.obj) - self.visit(node.obj, variables) - - name = variables.peek_last() - - i = 0 - for p in node.args: - self.code.append(CommentIL('Args: ' + str(i))) - i += 1 - self.visit(p, variables) - # ret = self.context.exprs_dict[node.obj].name - self.code.append(DispatchIL(variables.id(result), variables.id(name), index)) - - for i in range(0, len(node.args) + 1): - variables.pop_var() - - # self.code.append(PopIL(len(node.args) + 1)) - - @visitor.when(SelfCallNode) - def visit(self, node, variables): - self.code.append(CommentIL('Self-Dispatch')) - - result = variables.add_temp() - # self.code.append(PushIL()) - # print('----------node {}---------'.format(node)) - index = self.virtual_table.get_method_id(self.current_class, node.id) - - if self.current_class != 'Main': - self.code.append(CommentIL('push self')) - s = variables.add_temp() - # self.code.append(PushIL()) - self.code.append(VarToVarIL(variables.id(s), variables.id('self'))) + # Allocate Int result + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) + + return result_local - i = 0 - for p in node.args: - self.code.append(CommentIL('Args: ' + str(i))) - i += 1 - self.visit(p, variables) - self.code.append(DispatchIL(variables.id(result), variables.id('self'), index)) - - n = 0 - if self.current_class == 'Main': - n = 1 - - for i in range(len(node.args) + n): - variables.pop_var() + @visitor.when(NotNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name = "result") + op_local = self.define_internal_local(scope=scope, name = "op") + expr_local = self.define_internal_local(scope=scope) - # self.code.append(PopIL(len(node.args) + n)) + expr_value = self.visit(node.expr, scope) + + # self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", node.expr.computed_type.name)) + self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", None)) + self.register_instruction(UnaryNodeIL(op_local, expr_local, "not")) - @visitor.when(ParentCallNode) - def visit(self, node, variables): - self.code.append(CommentIL('Parent-Dispatch')) - - result = variables.add_temp() - # self.code.append(PushIL()) - - self.code.append('push object') - self.visit(node.obj, variables) - name = variables.peek_last() - - i = 0 - for p in node.args: - self.code.append(CommentIL('Args: ' + str(i))) - i += 1 - self.visit(p, variables) - if isinstance(node.obj,NewNode): - method = node.obj.type + '.' + node.id - else: - method = node.obj.id + '.' + node.id - # print('--method: ', method) - self.code.append(DispatchParentIL(variables.id(result), variables.id(name), method)) - # self.code.app - for i in range((len(node.args) + 1)): - variables.pop_var() - # self.code.append(PopIL(len(node.args) + 1)) + # Allocate Bool result + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) + return result_local - #constants - @visitor.when(IntegerNode) - def visit(self, node, variables): - self.code.append(CommentIL('Integer')) - variables.add_temp() - self.code.append(PushIL(int(node.lex))) + @visitor.when(LessNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name = "result") + op_local = self.define_internal_local(scope=scope, name = "op") + left_local = self.define_internal_local(scope=scope, name = "left") + right_local = self.define_internal_local(scope=scope, name = "right") - @visitor.when(StringNode) - def visit(self, node, variables): - label = 'string_' + str(self.getInt()) - self.data.append(StringIL(label, node.lex)) - self.code.append(CommentIL('loading label')) - # self.code.append(PushIL()) - p = variables.add_temp() + left_value = self.visit(node.left, scope) + right_value = self.visit(node.right, scope) - self.code.append(LoadLabelIL(variables.id(p), label)) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) - @visitor.when(BoolNode) - def visit(self, node, variables): - variables.add_temp() - if node.lex: - self.code.append(PushIL(1)) - else: - self.code.append(PushIL(0)) + self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "<")) + # Allocate Bool result + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) - + return result_local + + @visitor.when(LessEqualNode) + def visit(self, node, scope): + result_local = self.define_internal_local(scope=scope, name = "result") + op_local = self.define_internal_local(scope=scope, name = "op") + left_local = self.define_internal_local(scope=scope, name = "left") + right_local = self.define_internal_local(scope=scope, name = "right") + left_value = self.visit(node.left, scope) + right_value = self.visit(node.right, scope) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "<=")) + + # Allocate Bool result + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) + + return result_local + + @visitor.when(EqualNode) + def visit(self, node, scope): + print('----got in equalss----') + result_local = self.define_internal_local(scope=scope, name = "result") + op_local = self.define_internal_local(scope=scope, name = "op") + left_local = self.define_internal_local(scope=scope, name = "left") + right_local = self.define_internal_local(scope=scope, name = "right") + # print('left: ', left_local) + + left_value = self.visit(node.left, scope) + right_value = self.visit(node.right, scope) + print('left: ', left_value) + print('right: ', right_value) + # if node.left.computed_type.name == 'String': + if isinstance(node.left, StringNode) and isinstance(node.right, StringNode): + self.register_instruction(StaticCallNodeIL(op_local, 'String_equals', [ArgNodeIL(right_value), ArgNodeIL(left_value)], 'String')) + + # Allocate Bool result + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) + + return result_local + + # elif node.left.computed_type.name in ['Int', 'Bool']: + elif (isinstance(node.left, IntegerNode) and isinstance(node.right, IntegerNode)) or (isinstance(node.left, BoolNode) and isinstance(node.right, BoolNode)): + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + else: + print('got here where somewhere else') + self.register_instruction(AssignNodeIL(left_local, left_value)) + self.register_instruction(AssignNodeIL(right_local, right_value)) + + self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "=")) + + # Allocate Bool result + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) + + return result_local + + @visitor.when(ConstantNode) + def visit(self, node, scope): + if self.is_defined_param(node.lex): + return node.lex + elif self.current_type.has_attr(node.lex): + result_local = self.define_internal_local(scope=scope, name = node.lex, class_type=self.current_type.name) + self.register_instruction(GetAttribNodeIL(result_local, 'self' , node.lex, self.current_type.name)) + return result_local + else: + return scope.find_cil_local(node.lex) + + @visitor.when(IntegerNode) + def visit(self, node, scope): + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').name, instance)) + value = self.define_internal_local(scope=scope, name="value") + self.register_instruction(LoadNodeIL(node.lex,value)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(value),ArgNodeIL(instance)], "Int")) + return instance + + @visitor.when(StringNode) + def visit(self, node, scope): + str_name = "" + for s in self.dotdata.keys(): + if self.dotdata[s] == node.lex: + str_name = s + break + if str_name == "": + str_name = self.register_data(node.lex) + + result_local = self.define_internal_local(scope=scope) + self.register_instruction(LoadNodeIL(str_name, result_local)) + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').name, instance)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(result_local),ArgNodeIL(instance)], "String")) + return instance + + @visitor.when(BoolNode) + def visit(self, node, scope): + boolean = 0 + if str(node.lex) == "true": + boolean = 1 + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, instance)) + value = self.define_internal_local(scope=scope, name="value") + self.register_instruction(LoadNodeIL(boolean, value)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(value),ArgNodeIL(instance)], "Bool")) + return instance \ No newline at end of file diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index f60b6444..ad96fb8f 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -1,795 +1,10290 @@ .data -s_0: .asciiz"number 0 is even! -" -s_1: .asciiz"Class type is now A -" -s_2: .asciiz" -" -s_3: .asciiz" To add a number to 0 ...enter a: -" -s_4: .asciiz" To negate 0 ...enter b: -" -s_5: .asciiz" To find the difference between 0 and another number...enter c: -" -s_6: .asciiz" To find the factorial of 0 ...enter d: -" -s_7: .asciiz" To square 0 ...enter e: -" -s_8: .asciiz" To cube 0 ...enter f: -" -s_9: .asciiz" To find out if 0 is a multiple of 3...enter g: -" -s_10: .asciiz" To divide 0 by 8...enter h: -" -s_11: .asciiz" To get a new number...enter j: -" -s_12: .asciiz" To quit...enter q: -" -s_13: .asciiz" -" -s_14: .asciiz" -" -s_15: .asciiz"Please enter a number... number 1 is odd! -" -s_16: .asciiz"Class type is now B -" -s_17: .asciiz" -" -s_18: .asciiz" To add a number to 1 ...enter a: -" -s_19: .asciiz" To negate 1 ...enter b: -" -s_20: .asciiz" To find the difference between 1 and another number...enter c: -" -s_21: .asciiz" To find the factorial of 1 ...enter d: -" -s_22: .asciiz" To square 1 ...enter e: -" -s_23: .asciiz" To cube 1 ...enter f: -" -s_24: .asciiz" To find out if 1 is a multiple of 3...enter g: -" -s_25: .asciiz" To divide 1 by 8...enter h: -" -s_26: .asciiz" To get a new number...enter j: -" -s_27: .asciiz" To quit...enter q: -" -s_28: .asciiz" -" -s_29: .asciiz"number -1 is odd! -" -s_30: .asciiz"Class type is now C -" -s_31: .asciiz" -" -s_32: .asciiz" To add a number to -1 ...enter a: -" -s_33: .asciiz" To negate -1 ...enter b: -" -s_34: .asciiz" To find the difference between -1 and another number...enter c: -" -s_35: .asciiz" To find the factorial of -1 ...enter d: -" -s_36: .asciiz" To square -1 ...enter e: -" -s_37: .asciiz" To cube -1 ...enter f: -" -s_38: .asciiz" To find out if -1 is a multiple of 3...enter g: -" -s_39: .asciiz" To divide -1 by 8...enter h: -" -s_40: .asciiz" To get a new number...enter j: -" -s_41: .asciiz" To quit...enter q: -" -s_42: .asciiz" -" -s_43: .asciiz" -" -s_44: .asciiz"Please enter a number... number 1 is odd! -" -s_45: .asciiz"Class type is now D -" -s_46: .asciiz" -" -s_47: .asciiz" To add a number to 1 ...enter a: -" -s_48: .asciiz" To negate 1 ...enter b: -" -s_49: .asciiz" To find the difference between 1 and another number...enter c: -" -s_50: .asciiz" To find the factorial of 1 ...enter d: -" -s_51: .asciiz" To square 1 ...enter e: -" -s_52: .asciiz" To cube 1 ...enter f: -" -s_53: .asciiz" To find out if 1 is a multiple of 3...enter g: -" -s_54: .asciiz" To divide 1 by 8...enter h: -" -s_55: .asciiz" To get a new number...enter j: -" -s_56: .asciiz" To quit...enter q: -" -s_57: .asciiz" -" -s_58: .asciiz"number 1 is odd! -" -s_59: .asciiz"Class type is now E -" -s_60: .asciiz" -" -s_61: .asciiz" To add a number to 1 ...enter a: -" -s_62: .asciiz" To negate 1 ...enter b: -" -s_63: .asciiz" To find the difference between 1 and another number...enter c: -" -s_64: .asciiz" To find the factorial of 1 ...enter d: -" -s_65: .asciiz" To square 1 ...enter e: -" -s_66: .asciiz" To cube 1 ...enter f: -" -s_67: .asciiz" To find out if 1 is a multiple of 3...enter g: -" -s_68: .asciiz" To divide 1 by 8...enter h: -" -s_69: .asciiz" To get a new number...enter j: -" -s_70: .asciiz" To quit...enter q: -" -s_71: .asciiz" -" -s_72: .asciiz"number 1 is odd! -" -s_73: .asciiz"Class type is now E -" -s_74: .asciiz" -" -s_75: .asciiz" To add a number to 1 ...enter a: -" -s_76: .asciiz" To negate 1 ...enter b: -" -s_77: .asciiz" To find the difference between 1 and another number...enter c: -" -s_78: .asciiz" To find the factorial of 1 ...enter d: -" -s_79: .asciiz" To square 1 ...enter e: -" -s_80: .asciiz" To cube 1 ...enter f: -" -s_81: .asciiz" To find out if 1 is a multiple of 3...enter g: -" -s_82: .asciiz" To divide 1 by 8...enter h: -" -s_83: .asciiz" To get a new number...enter j: -" -s_84: .asciiz" To quit...enter q: -" -s_85: .asciiz" -" -s_86: .asciiz"number 1 is odd! -" -s_87: .asciiz"Class type is now E -" -s_88: .asciiz" -" -s_89: .asciiz" To add a number to 1 ...enter a: -" -s_90: .asciiz" To negate 1 ...enter b: -" -s_91: .asciiz" To find the difference between 1 and another number...enter c: -" -s_92: .asciiz" To find the factorial of 1 ...enter d: -" -s_93: .asciiz" To square 1 ...enter e: -" -s_94: .asciiz" To cube 1 ...enter f: -" -s_95: .asciiz" To find out if 1 is a multiple of 3...enter g: -" -s_96: .asciiz" To divide 1 by 8...enter h: -" -s_97: .asciiz" To get a new number...enter j: -" -s_98: .asciiz" To quit...enter q: -" -s_99: .asciiz" -" -s_100: .asciiz"number 1 is not divisible by 3. -" -s_101: .asciiz"number 1 is odd! -" -s_102: .asciiz"Class type is now E -" -s_103: .asciiz" -" -s_104: .asciiz" To add a number to 1 ...enter a: -" -s_105: .asciiz" To negate 1 ...enter b: -" -s_106: .asciiz" To find the difference between 1 and another number...enter c: -" -s_107: .asciiz" To find the factorial of 1 ...enter d: -" -s_108: .asciiz" To square 1 ...enter e: -" -s_109: .asciiz" To cube 1 ...enter f: -" -s_110: .asciiz" To find out if 1 is a multiple of 3...enter g: -" -s_111: .asciiz" To divide 1 by 8...enter h: -" -s_112: .asciiz" To get a new number...enter j: -" -s_113: .asciiz" To quit...enter q: -" -s_114: .asciiz" -" -s_115: .asciiz"number 1 is equal to 0 times 8 with a remainder of 1 -" -s_116: .asciiz"number 0 is even! -" -s_117: .asciiz"Class type is now A -" -s_118: .asciiz" -" -s_119: .asciiz" To add a number to 0 ...enter a: -" -s_120: .asciiz" To negate 0 ...enter b: -" -s_121: .asciiz" To find the difference between 0 and another number...enter c: -" -s_122: .asciiz" To find the factorial of 0 ...enter d: -" -s_123: .asciiz" To square 0 ...enter e: -" -s_124: .asciiz" To cube 0 ...enter f: -" -s_125: .asciiz" To find out if 0 is a multiple of 3...enter g: -" -s_126: .asciiz" To divide 0 by 8...enter h: -" -s_127: .asciiz" To get a new number...enter j: -" -s_128: .asciiz" To quit...enter q: -" -s_129: .asciiz" -" -s_130: .asciiz"number 0 is even! -" -s_131: .asciiz"Class type is now A -" -s_132: .asciiz" -" -s_133: .asciiz" To add a number to 0 ...enter a: -" -s_134: .asciiz" To negate 0 ...enter b: -" -s_135: .asciiz" To find the difference between 0 and another number...enter c: -" -s_136: .asciiz" To find the factorial of 0 ...enter d: -" -s_137: .asciiz" To square 0 ...enter e: -" -s_138: .asciiz" To cube 0 ...enter f: -" -s_139: .asciiz" To find out if 0 is a multiple of 3...enter g: -" -s_140: .asciiz" To divide 0 by 8...enter h: -" -s_141: .asciiz" To get a new number...enter j: -" -s_142: .asciiz" To quit...enter q: -" -s_143: .asciiz" -" -s_144: .asciiz"number 0 is even! -" -s_145: .asciiz"Class type is now A -" -s_146: .asciiz" -" -s_147: .asciiz" To add a number to 0 ...enter a: -" -s_148: .asciiz" To negate 0 ...enter b: -" -s_149: .asciiz" To find the difference between 0 and another number...enter c: -" -s_150: .asciiz" To find the factorial of 0 ...enter d: -" -s_151: .asciiz" To square 0 ...enter e: -" -s_152: .asciiz" To cube 0 ...enter f: -" -s_153: .asciiz" To find out if 0 is a multiple of 3...enter g: -" -s_154: .asciiz" To divide 0 by 8...enter h: -" -s_155: .asciiz" To get a new number...enter j: -" -s_156: .asciiz" To quit...enter q: -" -s_157: .asciiz" +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A_name: .asciiz "A" +A_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word A.method5 +B_name: .asciiz "B" +B_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +C_name: .asciiz "C" +C_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word C.method5 +.word C.method6 +D_name: .asciiz "D" +D_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +E_name: .asciiz "E" +E_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +.word E.method6 +A2I_name: .asciiz "A2I" +A2I_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.menu +.word Main.prompt +.word Main.get_int +.word Main.is_even +.word Main.class_type +.word Main.print +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "0" +s_4: .asciiz "1" +s_5: .asciiz "2" +s_6: .asciiz "3" +s_7: .asciiz "4" +s_8: .asciiz "5" +s_9: .asciiz "6" +s_10: .asciiz "7" +s_11: .asciiz "8" +s_12: .asciiz "9" +s_13: .asciiz "-" +s_14: .asciiz "+" +s_15: .asciiz " + To add a number to " +s_16: .asciiz "...enter a: +" +s_17: .asciiz " To negate " +s_18: .asciiz "...enter b: +" +s_19: .asciiz " To find the difference between " +s_20: .asciiz "and another number...enter c: +" +s_21: .asciiz " To find the factorial of " +s_22: .asciiz "...enter d: +" +s_23: .asciiz " To square " +s_24: .asciiz "...enter e: +" +s_25: .asciiz " To cube " +s_26: .asciiz "...enter f: +" +s_27: .asciiz " To find out if " +s_28: .asciiz "is a multiple of 3...enter g: +" +s_29: .asciiz " To divide " +s_30: .asciiz "by 8...enter h: +" +s_31: .asciiz " To get a new number...enter j: +" +s_32: .asciiz " To quit...enter q: + +" +s_33: .asciiz "Please enter a number... " +s_34: .asciiz "Class type is now E +" +s_35: .asciiz "Class type is now D +" +s_36: .asciiz "Class type is now C +" +s_37: .asciiz "Class type is now B +" +s_38: .asciiz "Class type is now A +" +s_39: .asciiz "Oooops +" +s_40: .asciiz " " +s_41: .asciiz "number " +s_42: .asciiz "is odd! +" +s_43: .asciiz "is even! +" +s_44: .asciiz "a" +s_45: .asciiz "b" +s_46: .asciiz "c" +s_47: .asciiz "d" +s_48: .asciiz "e" +s_49: .asciiz "f" +s_50: .asciiz "g" +s_51: .asciiz "h" +s_52: .asciiz "j" +s_53: .asciiz "q" +s_54: .asciiz "is equal to " +s_55: .asciiz "times 8 with a remainder of " +s_56: .asciiz "is not divisible by 3. +" +s_57: .asciiz "is divisible by 3. " .text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 4 -la $a0, s_2 -syscall -li $v0, 4 -la $a0, s_3 -syscall -li $v0, 4 -la $a0, s_4 -syscall -li $v0, 4 -la $a0, s_5 -syscall -li $v0, 4 -la $a0, s_6 -syscall -li $v0, 4 -la $a0, s_7 -syscall +dispatch_void_error: +la $a0 dispatch_void li $v0, 4 -la $a0, s_8 syscall -li $v0, 4 -la $a0, s_9 -syscall -li $v0, 4 -la $a0, s_10 -syscall -li $v0, 4 -la $a0, s_11 -syscall -li $v0, 4 -la $a0, s_12 -syscall -li $v0, 4 -la $a0, s_13 -syscall -li $v0, 4 -la $a0, s_14 -syscall -li $v0, 4 -la $a0, s_15 -syscall -li $v0, 4 -la $a0, s_16 -syscall -li $v0, 4 -la $a0, s_17 -syscall -li $v0, 4 -la $a0, s_18 -syscall -li $v0, 4 -la $a0, s_19 -syscall -li $v0, 4 -la $a0, s_20 -syscall -li $v0, 4 -la $a0, s_21 -syscall -li $v0, 4 -la $a0, s_22 -syscall -li $v0, 4 -la $a0, s_23 -syscall -li $v0, 4 -la $a0, s_24 -syscall -li $v0, 4 -la $a0, s_25 -syscall -li $v0, 4 -la $a0, s_26 -syscall -li $v0, 4 -la $a0, s_27 -syscall -li $v0, 4 -la $a0, s_28 -syscall -li $v0, 4 -la $a0, s_29 -syscall -li $v0, 4 -la $a0, s_30 -syscall -li $v0, 4 -la $a0, s_31 -syscall -li $v0, 4 -la $a0, s_32 -syscall -li $v0, 4 -la $a0, s_33 -syscall -li $v0, 4 -la $a0, s_34 -syscall -li $v0, 4 -la $a0, s_35 -syscall -li $v0, 4 -la $a0, s_36 -syscall -li $v0, 4 -la $a0, s_37 -syscall -li $v0, 4 -la $a0, s_38 -syscall -li $v0, 4 -la $a0, s_39 -syscall -li $v0, 4 -la $a0, s_40 -syscall -li $v0, 4 -la $a0, s_41 -syscall -li $v0, 4 -la $a0, s_42 -syscall -li $v0, 4 -la $a0, s_43 -syscall -li $v0, 4 -la $a0, s_44 -syscall -li $v0, 4 -la $a0, s_45 -syscall -li $v0, 4 -la $a0, s_46 -syscall -li $v0, 4 -la $a0, s_47 -syscall -li $v0, 4 -la $a0, s_48 -syscall -li $v0, 4 -la $a0, s_49 -syscall -li $v0, 4 -la $a0, s_50 -syscall -li $v0, 4 -la $a0, s_51 -syscall -li $v0, 4 -la $a0, s_52 -syscall -li $v0, 4 -la $a0, s_53 -syscall -li $v0, 4 -la $a0, s_54 -syscall -li $v0, 4 -la $a0, s_55 -syscall -li $v0, 4 -la $a0, s_56 -syscall -li $v0, 4 -la $a0, s_57 -syscall -li $v0, 4 -la $a0, s_58 -syscall -li $v0, 4 -la $a0, s_59 -syscall -li $v0, 4 -la $a0, s_60 -syscall -li $v0, 4 -la $a0, s_61 -syscall -li $v0, 4 -la $a0, s_62 -syscall -li $v0, 4 -la $a0, s_63 -syscall -li $v0, 4 -la $a0, s_64 -syscall -li $v0, 4 -la $a0, s_65 -syscall -li $v0, 4 -la $a0, s_66 -syscall -li $v0, 4 -la $a0, s_67 -syscall -li $v0, 4 -la $a0, s_68 -syscall -li $v0, 4 -la $a0, s_69 -syscall -li $v0, 4 -la $a0, s_70 -syscall -li $v0, 4 -la $a0, s_71 -syscall -li $v0, 4 -la $a0, s_72 -syscall -li $v0, 4 -la $a0, s_73 -syscall -li $v0, 4 -la $a0, s_74 -syscall -li $v0, 4 -la $a0, s_75 -syscall -li $v0, 4 -la $a0, s_76 -syscall -li $v0, 4 -la $a0, s_77 -syscall -li $v0, 4 -la $a0, s_78 -syscall -li $v0, 4 -la $a0, s_79 -syscall -li $v0, 4 -la $a0, s_80 -syscall -li $v0, 4 -la $a0, s_81 -syscall -li $v0, 4 -la $a0, s_82 -syscall -li $v0, 4 -la $a0, s_83 -syscall -li $v0, 4 -la $a0, s_84 -syscall -li $v0, 4 -la $a0, s_85 -syscall -li $v0, 4 -la $a0, s_86 -syscall -li $v0, 4 -la $a0, s_87 -syscall -li $v0, 4 -la $a0, s_88 -syscall -li $v0, 4 -la $a0, s_89 -syscall -li $v0, 4 -la $a0, s_90 -syscall -li $v0, 4 -la $a0, s_91 -syscall -li $v0, 4 -la $a0, s_92 -syscall -li $v0, 4 -la $a0, s_93 -syscall -li $v0, 4 -la $a0, s_94 -syscall -li $v0, 4 -la $a0, s_95 -syscall -li $v0, 4 -la $a0, s_96 -syscall -li $v0, 4 -la $a0, s_97 -syscall -li $v0, 4 -la $a0, s_98 -syscall -li $v0, 4 -la $a0, s_99 -syscall -li $v0, 4 -la $a0, s_100 -syscall -li $v0, 4 -la $a0, s_101 -syscall -li $v0, 4 -la $a0, s_102 -syscall -li $v0, 4 -la $a0, s_103 -syscall -li $v0, 4 -la $a0, s_104 -syscall -li $v0, 4 -la $a0, s_105 -syscall -li $v0, 4 -la $a0, s_106 -syscall -li $v0, 4 -la $a0, s_107 -syscall -li $v0, 4 -la $a0, s_108 -syscall -li $v0, 4 -la $a0, s_109 -syscall -li $v0, 4 -la $a0, s_110 -syscall -li $v0, 4 -la $a0, s_111 -syscall -li $v0, 4 -la $a0, s_112 -syscall -li $v0, 4 -la $a0, s_113 -syscall -li $v0, 4 -la $a0, s_114 -syscall -li $v0, 4 -la $a0, s_115 -syscall -li $v0, 4 -la $a0, s_116 -syscall -li $v0, 4 -la $a0, s_117 -syscall -li $v0, 4 -la $a0, s_118 -syscall -li $v0, 4 -la $a0, s_119 -syscall -li $v0, 4 -la $a0, s_120 -syscall -li $v0, 4 -la $a0, s_121 -syscall -li $v0, 4 -la $a0, s_122 -syscall -li $v0, 4 -la $a0, s_123 -syscall -li $v0, 4 -la $a0, s_124 -syscall -li $v0, 4 -la $a0, s_125 -syscall -li $v0, 4 -la $a0, s_126 -syscall -li $v0, 4 -la $a0, s_127 -syscall -li $v0, 4 -la $a0, s_128 -syscall -li $v0, 4 -la $a0, s_129 -syscall -li $v0, 4 -la $a0, s_130 -syscall -li $v0, 4 -la $a0, s_131 -syscall -li $v0, 4 -la $a0, s_132 -syscall -li $v0, 4 -la $a0, s_133 -syscall -li $v0, 4 -la $a0, s_134 -syscall -li $v0, 4 -la $a0, s_135 -syscall -li $v0, 4 -la $a0, s_136 -syscall -li $v0, 4 -la $a0, s_137 -syscall -li $v0, 4 -la $a0, s_138 -syscall -li $v0, 4 -la $a0, s_139 -syscall -li $v0, 4 -la $a0, s_140 -syscall -li $v0, 4 -la $a0, s_141 -syscall -li $v0, 4 -la $a0, s_142 -syscall -li $v0, 4 -la $a0, s_143 -syscall -li $v0, 4 -la $a0, s_144 -syscall -li $v0, 4 -la $a0, s_145 -syscall -li $v0, 4 -la $a0, s_146 +li $v0, 10 syscall +case_void_error: +la $a0 case_void li $v0, 4 -la $a0, s_147 syscall -li $v0, 4 -la $a0, s_148 +li $v0, 10 syscall +case_no_match_error: +la $a0 case_no_match li $v0, 4 -la $a0, s_149 syscall -li $v0, 4 -la $a0, s_150 +li $v0, 10 syscall +div_zero_error: +la $a0 div_zero li $v0, 4 -la $a0, s_151 syscall -li $v0, 4 -la $a0, s_152 +li $v0, 10 syscall +substr_error: +la $a0 substr li $v0, 4 -la $a0, s_153 syscall -li $v0, 4 -la $a0, s_154 +li $v0, 10 syscall +heap_error: +la $a0 heap li $v0, 4 -la $a0, s_155 syscall -li $v0, 4 -la $a0, s_156 +li $v0, 10 syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) li $v0, 4 -la $a0, s_157 syscall li $v0, 10 syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_str1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_str2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_str1_char +concat_str2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_str2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_str2_char +finish_str2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +A_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Object_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +A.value: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A.set_var: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +A.method1: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A.method2: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) +add $a0, $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 72 +jr $ra +A.method3: +addi $sp, $sp, -52 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t1, 28($sp) +neg $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 40($sp) +lw $t1, 40($sp) +sw $t1, 52($sp) +lw $a1, 52($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +A.method4: +addi $sp, $sp, -136 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 24($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +sub $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 60($sp) +lw $t1, 44($sp) +sw $t1, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 76($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 80($sp) +lw $t1, 80($sp) +sw $t1, 4($sp) +b label_2 +label_1: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +li $t0, 0 +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 92($sp) +lw $t1, 84($sp) +sw $t1, 96($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $a0, 108($sp) +lw $t1, 112($sp) +sub $a0, $a0, $t1 +sw $a0, 104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 116($sp) +lw $t1, 100($sp) +sw $t1, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 124($sp) +lw $t1, 124($sp) +sw $t1, 136($sp) +lw $t1, 136($sp) +sw $t1, 4($sp) +label_2: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 152 +jr $ra +A.method5: +addi $sp, $sp, -136 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 1 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +li $t0, 1 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t1, 20($sp) +sw $t1, 32($sp) +label_3: +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +sle $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 56($sp) +lw $t0, 40($sp) +lw $a0, 16($t0) +bnez $a0, label_4 +b label_5 +label_4: +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +mul $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +lw $t1, 60($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +li $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +add $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +lw $t1, 84($sp) +sw $t1, 32($sp) +b label_3 +label_5: +lw $t1, 36($sp) +sw $t1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 124($sp) +lw $t1, 124($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) +lw $ra, 0($sp) +addi $sp, $sp, 148 +jr $ra +B_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +B.method5: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) +mul $a0, $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 68 +jr $ra +C_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +C.method6: +addi $sp, $sp, -52 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t1, 28($sp) +neg $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 40($sp) +lw $t1, 40($sp) +sw $t1, 52($sp) +lw $a1, 52($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +C.method5: +addi $sp, $sp, -76 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 44($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $a0, 44($sp) +lw $t1, 48($sp) +mul $a0, $a0, $t1 +sw $a0, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 52($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) +mul $a0, $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 56($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 72($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 76($sp) +lw $a1, 76($sp) +lw $ra, 0($sp) +addi $sp, $sp, 88 +jr $ra +D_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +D.method7: +addi $sp, $sp, -244 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t1, 252($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +slt $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +lw $t0, 12($sp) +lw $a0, 16($t0) +bnez $a0, label_6 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +li $t0, 0 +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 72($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_7 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +li $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +seq $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 112($sp) +lw $t0, 84($sp) +lw $a0, 16($t0) +bnez $a0, label_8 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +li $t0, 2 +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +lw $t0, 136($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +lw $a0, 128($sp) +lw $t1, 132($sp) +seq $a0, $a0, $t1 +sw $a0, 124($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 148($sp) +lw $t0, 120($sp) +lw $a0, 16($t0) +bnez $a0, label_9 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +li $t0, 3 +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 180($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 164($sp) +lw $t0, 172($sp) +lw $t1, 16($t0) +sw $t1, 168($sp) +lw $a0, 164($sp) +lw $t1, 168($sp) +sub $a0, $a0, $t1 +sw $a0, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 184($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 152($sp) +lw $t1, 152($sp) +sw $t1, 116($sp) +b label_10 +label_9: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +li $t0, 0 +sw $t0, 192($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 196($sp) +lw $t1, 188($sp) +sw $t1, 116($sp) +label_10: +lw $t1, 116($sp) +sw $t1, 80($sp) +b label_11 +label_8: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 200($sp) +li $t0, 0 +sw $t0, 204($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 208($sp) +lw $t1, 200($sp) +sw $t1, 80($sp) +label_11: +lw $t1, 80($sp) +sw $t1, 44($sp) +b label_12 +label_7: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 212($sp) +li $t0, 1 +sw $t0, 216($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 220($sp) +lw $t1, 212($sp) +sw $t1, 44($sp) +label_12: +lw $t1, 44($sp) +sw $t1, 8($sp) +b label_13 +label_6: +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 236($sp) +lw $t1, 236($sp) +neg $a0, $t1 +sw $a0, 232($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 228($sp) +move $t0, $sp +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 240($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 224($sp) +lw $t1, 224($sp) +sw $t1, 8($sp) +label_13: +lw $t1, 8($sp) +sw $t1, 244($sp) +lw $a1, 244($sp) +lw $ra, 0($sp) +addi $sp, $sp, 256 +jr $ra +E_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +E.method6: +addi $sp, $sp, -68 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +li $t0, 8 +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 48($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 56($sp) +lw $t1, 56($sp) +sw $t1, 68($sp) +lw $a1, 68($sp) +lw $ra, 0($sp) +addi $sp, $sp, 80 +jr $ra +A2I_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Object_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A2I.c2i: +addi $sp, $sp, -496 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_14 +la $t0, s_4 +sw $t0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_15 +la $t0, s_5 +sw $t0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +lw $t0, 80($sp) +lw $a0, 16($t0) +bnez $a0, label_16 +la $t0, s_6 +sw $t0, 132($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 144($sp) +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_17 +la $t0, s_7 +sw $t0, 168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 180($sp) +lw $t0, 152($sp) +lw $a0, 16($t0) +bnez $a0, label_18 +la $t0, s_8 +sw $t0, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 212($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +lw $t0, 188($sp) +lw $a0, 16($t0) +bnez $a0, label_19 +la $t0, s_9 +sw $t0, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 252($sp) +lw $t0, 224($sp) +lw $a0, 16($t0) +bnez $a0, label_20 +la $t0, s_10 +sw $t0, 276($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 280($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 284($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 288($sp) +lw $t0, 260($sp) +lw $a0, 16($t0) +bnez $a0, label_21 +la $t0, s_11 +sw $t0, 312($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 320($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 296($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 324($sp) +lw $t0, 296($sp) +lw $a0, 16($t0) +bnez $a0, label_22 +la $t0, s_12 +sw $t0, 348($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 356($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 360($sp) +lw $t0, 332($sp) +lw $a0, 16($t0) +bnez $a0, label_23 +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 364($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 368($sp) +li $t0, 0 +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 376($sp) +lw $t1, 368($sp) +sw $t1, 328($sp) +b label_24 +label_23: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 380($sp) +li $t0, 9 +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 388($sp) +lw $t1, 380($sp) +sw $t1, 328($sp) +label_24: +lw $t1, 328($sp) +sw $t1, 292($sp) +b label_25 +label_22: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 392($sp) +li $t0, 8 +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 400($sp) +lw $t1, 392($sp) +sw $t1, 292($sp) +label_25: +lw $t1, 292($sp) +sw $t1, 256($sp) +b label_26 +label_21: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 404($sp) +li $t0, 7 +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 412($sp) +lw $t1, 404($sp) +sw $t1, 256($sp) +label_26: +lw $t1, 256($sp) +sw $t1, 220($sp) +b label_27 +label_20: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 416($sp) +li $t0, 6 +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 424($sp) +lw $t1, 416($sp) +sw $t1, 220($sp) +label_27: +lw $t1, 220($sp) +sw $t1, 184($sp) +b label_28 +label_19: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 428($sp) +li $t0, 5 +sw $t0, 432($sp) +move $t0, $sp +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 436($sp) +lw $t1, 428($sp) +sw $t1, 184($sp) +label_28: +lw $t1, 184($sp) +sw $t1, 148($sp) +b label_29 +label_18: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 440($sp) +li $t0, 4 +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 448($sp) +lw $t1, 440($sp) +sw $t1, 148($sp) +label_29: +lw $t1, 148($sp) +sw $t1, 112($sp) +b label_30 +label_17: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 452($sp) +li $t0, 3 +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 460($sp) +lw $t1, 452($sp) +sw $t1, 112($sp) +label_30: +lw $t1, 112($sp) +sw $t1, 76($sp) +b label_31 +label_16: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 464($sp) +li $t0, 2 +sw $t0, 468($sp) +move $t0, $sp +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 472($sp) +lw $t1, 464($sp) +sw $t1, 76($sp) +label_31: +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_32 +label_15: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +li $t0, 1 +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 484($sp) +lw $t1, 476($sp) +sw $t1, 40($sp) +label_32: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_33 +label_14: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 488($sp) +li $t0, 0 +sw $t0, 492($sp) +move $t0, $sp +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 496($sp) +lw $t1, 488($sp) +sw $t1, 4($sp) +label_33: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 508 +jr $ra +A2I.i2c: +addi $sp, $sp, -496 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_34 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +li $t0, 1 +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +seq $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_35 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +li $t0, 2 +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 104($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) +seq $a0, $a0, $t1 +sw $a0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +lw $t0, 80($sp) +lw $a0, 16($t0) +bnez $a0, label_36 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +li $t0, 3 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 124($sp) +lw $t0, 132($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $a0, 124($sp) +lw $t1, 128($sp) +seq $a0, $a0, $t1 +sw $a0, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 144($sp) +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_37 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 168($sp) +li $t0, 4 +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 176($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 160($sp) +lw $t0, 168($sp) +lw $t1, 16($t0) +sw $t1, 164($sp) +lw $a0, 160($sp) +lw $t1, 164($sp) +seq $a0, $a0, $t1 +sw $a0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 180($sp) +lw $t0, 152($sp) +lw $a0, 16($t0) +bnez $a0, label_38 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +li $t0, 5 +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 212($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $t0, 204($sp) +lw $t1, 16($t0) +sw $t1, 200($sp) +lw $a0, 196($sp) +lw $t1, 200($sp) +seq $a0, $a0, $t1 +sw $a0, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +lw $t0, 188($sp) +lw $a0, 16($t0) +bnez $a0, label_39 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 240($sp) +li $t0, 6 +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 248($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 232($sp) +lw $t0, 240($sp) +lw $t1, 16($t0) +sw $t1, 236($sp) +lw $a0, 232($sp) +lw $t1, 236($sp) +seq $a0, $a0, $t1 +sw $a0, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 252($sp) +lw $t0, 224($sp) +lw $a0, 16($t0) +bnez $a0, label_40 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +li $t0, 7 +sw $t0, 280($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 268($sp) +lw $t0, 276($sp) +lw $t1, 16($t0) +sw $t1, 272($sp) +lw $a0, 268($sp) +lw $t1, 272($sp) +seq $a0, $a0, $t1 +sw $a0, 264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 288($sp) +lw $t0, 260($sp) +lw $a0, 16($t0) +bnez $a0, label_41 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 312($sp) +li $t0, 8 +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 320($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 304($sp) +lw $t0, 312($sp) +lw $t1, 16($t0) +sw $t1, 308($sp) +lw $a0, 304($sp) +lw $t1, 308($sp) +seq $a0, $a0, $t1 +sw $a0, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 296($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 324($sp) +lw $t0, 296($sp) +lw $a0, 16($t0) +bnez $a0, label_42 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 348($sp) +li $t0, 9 +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 356($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 340($sp) +lw $t0, 348($sp) +lw $t1, 16($t0) +sw $t1, 344($sp) +lw $a0, 340($sp) +lw $t1, 344($sp) +seq $a0, $a0, $t1 +sw $a0, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 360($sp) +lw $t0, 332($sp) +lw $a0, 16($t0) +bnez $a0, label_43 +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 364($sp) +la $t0, empty_str +sw $t0, 368($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 376($sp) +lw $t1, 372($sp) +sw $t1, 328($sp) +b label_44 +label_43: +la $t0, s_12 +sw $t0, 380($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 388($sp) +lw $t1, 384($sp) +sw $t1, 328($sp) +label_44: +lw $t1, 328($sp) +sw $t1, 292($sp) +b label_45 +label_42: +la $t0, s_11 +sw $t0, 392($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 400($sp) +lw $t1, 396($sp) +sw $t1, 292($sp) +label_45: +lw $t1, 292($sp) +sw $t1, 256($sp) +b label_46 +label_41: +la $t0, s_10 +sw $t0, 404($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 412($sp) +lw $t1, 408($sp) +sw $t1, 256($sp) +label_46: +lw $t1, 256($sp) +sw $t1, 220($sp) +b label_47 +label_40: +la $t0, s_9 +sw $t0, 416($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 424($sp) +lw $t1, 420($sp) +sw $t1, 220($sp) +label_47: +lw $t1, 220($sp) +sw $t1, 184($sp) +b label_48 +label_39: +la $t0, s_8 +sw $t0, 428($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 432($sp) +move $t0, $sp +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 436($sp) +lw $t1, 432($sp) +sw $t1, 184($sp) +label_48: +lw $t1, 184($sp) +sw $t1, 148($sp) +b label_49 +label_38: +la $t0, s_7 +sw $t0, 440($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 448($sp) +lw $t1, 444($sp) +sw $t1, 148($sp) +label_49: +lw $t1, 148($sp) +sw $t1, 112($sp) +b label_50 +label_37: +la $t0, s_6 +sw $t0, 452($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 460($sp) +lw $t1, 456($sp) +sw $t1, 112($sp) +label_50: +lw $t1, 112($sp) +sw $t1, 76($sp) +b label_51 +label_36: +la $t0, s_5 +sw $t0, 464($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 468($sp) +move $t0, $sp +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 472($sp) +lw $t1, 468($sp) +sw $t1, 76($sp) +label_51: +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_52 +label_35: +la $t0, s_4 +sw $t0, 476($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 484($sp) +lw $t1, 480($sp) +sw $t1, 40($sp) +label_52: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_53 +label_34: +la $t0, s_3 +sw $t0, 488($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 492($sp) +move $t0, $sp +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 496($sp) +lw $t1, 492($sp) +sw $t1, 4($sp) +label_53: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 508 +jr $ra +A2I.a2i: +addi $sp, $sp, -312 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_54 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +li $t0, 1 +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +li $t0, 0 +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 64($sp) +la $t0, s_13 +sw $t0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 104($sp) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_55 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +li $t0, 1 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +li $t0, 0 +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 152($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 128($sp) +la $t0, s_14 +sw $t0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 164($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 168($sp) +lw $t0, 112($sp) +lw $a0, 16($t0) +bnez $a0, label_56 +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 172($sp) +lw $t1, 172($sp) +sw $t1, 108($sp) +b label_57 +label_56: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +li $t0, 1 +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 212($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 192($sp) +lw $t0, 204($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $a0, 192($sp) +lw $t1, 196($sp) +sub $a0, $a0, $t1 +sw $a0, 188($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 184($sp) +move $t0, $sp +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 216($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +li $t0, 1 +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 228($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 180($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 176($sp) +lw $t1, 176($sp) +sw $t1, 108($sp) +label_57: +lw $t1, 108($sp) +sw $t1, 44($sp) +b label_58 +label_55: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 268($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 272($sp) +li $t0, 1 +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 280($sp) +lw $t0, 268($sp) +lw $t1, 16($t0) +sw $t1, 260($sp) +lw $t0, 272($sp) +lw $t1, 16($t0) +sw $t1, 264($sp) +lw $a0, 260($sp) +lw $t1, 264($sp) +sub $a0, $a0, $t1 +sw $a0, 256($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 288($sp) +li $t0, 1 +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 296($sp) +move $t0, $sp +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 244($sp) +lw $t0, 244($sp) +lw $t1, 16($t0) +sw $t1, 240($sp) +lw $t1, 240($sp) +neg $a0, $t1 +sw $a0, 236($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 232($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 300($sp) +lw $t1, 232($sp) +sw $t1, 44($sp) +label_58: +lw $t1, 44($sp) +sw $t1, 4($sp) +b label_59 +label_54: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 304($sp) +li $t0, 0 +sw $t0, 308($sp) +move $t0, $sp +lw $t1, 308($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 312($sp) +lw $t1, 304($sp) +sw $t1, 4($sp) +label_59: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 324 +jr $ra +A2I.a2i_aux: +addi $sp, $sp, -188 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +lw $t1, 20($sp) +sw $t1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) +label_60: +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +slt $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 64($sp) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_61 +b label_62 +label_61: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +li $t0, 10 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +mul $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +li $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 116($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +add $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t1, 68($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +li $t0, 1 +sw $t0, 164($sp) +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 168($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 152($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 156($sp) +lw $a0, 152($sp) +lw $t1, 156($sp) +add $a0, $a0, $t1 +sw $a0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 172($sp) +lw $t1, 144($sp) +sw $t1, 40($sp) +b label_60 +label_62: +lw $t1, 44($sp) +sw $t1, 180($sp) +lw $t1, 180($sp) +sw $t1, 184($sp) +lw $t1, 16($sp) +sw $t1, 188($sp) +lw $a1, 188($sp) +lw $ra, 0($sp) +addi $sp, $sp, 200 +jr $ra +A2I.i2a: +addi $sp, $sp, -156 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_63 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +li $t0, 0 +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +slt $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_64 +la $t0, s_13 +sw $t0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +li $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $t1, 120($sp) +neg $a0, $t1 +sw $a0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +lw $t0, 112($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $a0, 104($sp) +lw $t1, 108($sp) +mul $a0, $a0, $t1 +sw $a0, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_65 +label_64: +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 144($sp) +lw $t1, 144($sp) +sw $t1, 40($sp) +label_65: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_66 +label_63: +la $t0, s_3 +sw $t0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 156($sp) +lw $t1, 152($sp) +sw $t1, 4($sp) +label_66: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 168 +jr $ra +A2I.i2a_aux: +addi $sp, $sp, -152 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_67 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +li $t0, 10 +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 64($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t1, 40($sp) +sw $t1, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +li $t0, 10 +sw $t0, 124($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 128($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +lw $a0, 112($sp) +lw $t1, 116($sp) +mul $a0, $a0, $t1 +sw $a0, 108($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) +sub $a0, $a0, $t1 +sw $a0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 140($sp) +lw $t1, 140($sp) +sw $t1, 4($sp) +b label_68 +label_67: +la $t0, empty_str +sw $t0, 144($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 152($sp) +lw $t1, 148($sp) +sw $t1, 4($sp) +label_68: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 164 +jr $ra +Main_init: +addi $sp, $sp, -28 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, empty_str +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +lw $t0, 32($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $t0, 32($sp) +la $t1, void +sw $t1, 20($t0) +lw $t0, 32($sp) +la $t1, void +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +li $t0, 1 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 28($sp) +lw $t0, 32($sp) +lw $t1, 20($sp) +sw $t1, 28($t0) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Main.menu: +addi $sp, $sp, -356 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_15 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 20($sp) +la $t0, s_16 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +la $t0, s_17 +sw $t0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 56($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 44($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 60($sp) +la $t0, s_18 +sw $t0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 80($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 68($sp) +la $t0, s_19 +sw $t0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 84($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 100($sp) +la $t0, s_20 +sw $t0, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 108($sp) +la $t0, s_21 +sw $t0, 128($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 124($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 140($sp) +la $t0, s_22 +sw $t0, 152($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 160($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 148($sp) +la $t0, s_23 +sw $t0, 168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 164($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 180($sp) +la $t0, s_24 +sw $t0, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 196($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 200($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 188($sp) +la $t0, s_25 +sw $t0, 208($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 212($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 216($sp) +move $t0, $sp +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 204($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 220($sp) +la $t0, s_26 +sw $t0, 232($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 236($sp) +move $t0, $sp +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 240($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 228($sp) +la $t0, s_27 +sw $t0, 248($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 256($sp) +move $t0, $sp +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 244($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 260($sp) +la $t0, s_28 +sw $t0, 272($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 280($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 268($sp) +la $t0, s_29 +sw $t0, 288($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 296($sp) +move $t0, $sp +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 284($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 300($sp) +la $t0, s_30 +sw $t0, 312($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 320($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 308($sp) +la $t0, s_31 +sw $t0, 328($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 328($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 336($sp) +move $t0, $sp +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 324($sp) +la $t0, s_32 +sw $t0, 344($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 348($sp) +move $t0, $sp +lw $t1, 344($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 352($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 340($sp) +move $t0, $sp +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 356($sp) +lw $a1, 356($sp) +lw $ra, 0($sp) +addi $sp, $sp, 364 +jr $ra +Main.prompt: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_1 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +la $t0, s_33 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 36($sp) +lw $a1, 36($sp) +lw $ra, 0($sp) +addi $sp, $sp, 44 +jr $ra +Main.get_int: +addi $sp, $sp, -32 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 8($sp) +lw $t1, 4($sp) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 16($sp) +lw $t1, 16($sp) +sw $t1, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 24($sp) +lw $t1, 24($sp) +sw $t1, 28($sp) +lw $t1, 28($sp) +sw $t1, 32($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 40 +jr $ra +Main.is_even: +addi $sp, $sp, -196 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t1, 204($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +slt $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +lw $t0, 12($sp) +lw $a0, 16($t0) +bnez $a0, label_69 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +li $t0, 0 +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 72($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_70 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +li $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +seq $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 112($sp) +lw $t0, 84($sp) +lw $a0, 16($t0) +bnez $a0, label_71 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +li $t0, 2 +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $t0, 136($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +lw $a0, 128($sp) +lw $t1, 132($sp) +sub $a0, $a0, $t1 +sw $a0, 124($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 148($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 116($sp) +lw $t1, 116($sp) +sw $t1, 80($sp) +b label_72 +label_71: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +li $t0, 0 +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 160($sp) +lw $t1, 152($sp) +sw $t1, 80($sp) +label_72: +lw $t1, 80($sp) +sw $t1, 44($sp) +b label_73 +label_70: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 164($sp) +li $t0, 1 +sw $t0, 168($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 172($sp) +lw $t1, 164($sp) +sw $t1, 44($sp) +label_73: +lw $t1, 44($sp) +sw $t1, 8($sp) +b label_74 +label_69: +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 188($sp) +lw $t1, 188($sp) +neg $a0, $t1 +sw $a0, 184($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 180($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 192($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 176($sp) +lw $t1, 176($sp) +sw $t1, 8($sp) +label_74: +lw $t1, 8($sp) +sw $t1, 196($sp) +lw $a1, 196($sp) +lw $ra, 0($sp) +addi $sp, $sp, 208 +jr $ra +Main.class_type: +addi $sp, $sp, -124 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 132($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_76 +b case_void_error +label_76: +blt $t1 9 label_77 +bgt $t1 9 label_77 +lw $t1, 132($sp) +sw $t1, 8($sp) +la $t0, s_34 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 12($sp) +lw $t1, 12($sp) +sw $t1, 4($sp) +b label_75 +label_77: +blt $t1 8 label_78 +bgt $t1 9 label_78 +lw $t1, 132($sp) +sw $t1, 28($sp) +la $t0, s_35 +sw $t0, 36($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 44($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 32($sp) +lw $t1, 32($sp) +sw $t1, 4($sp) +b label_75 +label_78: +blt $t1 7 label_79 +bgt $t1 7 label_79 +lw $t1, 132($sp) +sw $t1, 48($sp) +la $t0, s_36 +sw $t0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 52($sp) +lw $t1, 52($sp) +sw $t1, 4($sp) +b label_75 +label_79: +blt $t1 6 label_80 +bgt $t1 9 label_80 +lw $t1, 132($sp) +sw $t1, 68($sp) +la $t0, s_37 +sw $t0, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 72($sp) +lw $t1, 72($sp) +sw $t1, 4($sp) +b label_75 +label_80: +blt $t1 5 label_81 +bgt $t1 9 label_81 +lw $t1, 132($sp) +sw $t1, 88($sp) +la $t0, s_38 +sw $t0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 92($sp) +lw $t1, 92($sp) +sw $t1, 4($sp) +b label_75 +label_81: +blt $t1 0 label_82 +bgt $t1 9 label_82 +lw $t1, 132($sp) +sw $t1, 108($sp) +la $t0, s_39 +sw $t0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 124($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 112($sp) +lw $t1, 112($sp) +sw $t1, 4($sp) +b label_75 +label_82: +b case_no_match_error +label_75: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 136 +jr $ra +Main.print: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 8($sp) +lw $t1, 4($sp) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 16($sp) +la $t0, s_40 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +lw $t1, 28($sp) +sw $t1, 44($sp) +lw $a1, 44($sp) +lw $ra, 0($sp) +addi $sp, $sp, 56 +jr $ra +Main.main: +addi $sp, $sp, -1136 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 8($sp) +lw $t0, 1140($sp) +lw $t1, 4($sp) +sw $t1, 20($t0) +label_83: +lw $t0, 1140($sp) +lw $t1, 28($t0) +sw $t1, 20($sp) +lw $t0, 20($sp) +lw $a0, 16($t0) +bnez $a0, label_84 +b label_85 +label_84: +la $t0, s_41 +sw $t0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 40($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 56($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 52($sp) +lw $t0, 52($sp) +lw $a0, 16($t0) +bnez $a0, label_86 +la $t0, s_42 +sw $t0, 68($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 76($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 48($sp) +b label_87 +label_86: +la $t0, s_43 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 80($sp) +lw $t1, 80($sp) +sw $t1, 48($sp) +label_87: +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 104($sp) +lw $t0, 1140($sp) +lw $t1, 104($sp) +sw $t1, 16($t0) +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_44 +sw $t0, 136($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 144($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 148($sp) +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_88 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_45 +sw $t0, 176($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 180($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 184($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 188($sp) +lw $t0, 156($sp) +lw $a0, 16($t0) +bnez $a0, label_89 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_46 +sw $t0, 216($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 224($sp) +move $t0, $sp +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 196($sp) +move $t0, $sp +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 228($sp) +lw $t0, 196($sp) +lw $a0, 16($t0) +bnez $a0, label_90 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_47 +sw $t0, 256($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 264($sp) +move $t0, $sp +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 236($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 268($sp) +lw $t0, 236($sp) +lw $a0, 16($t0) +bnez $a0, label_91 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_48 +sw $t0, 296($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 300($sp) +move $t0, $sp +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 304($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 280($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 308($sp) +lw $t0, 276($sp) +lw $a0, 16($t0) +bnez $a0, label_92 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_49 +sw $t0, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 340($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 340($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 344($sp) +move $t0, $sp +lw $t1, 340($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 320($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 348($sp) +lw $t0, 316($sp) +lw $a0, 16($t0) +bnez $a0, label_93 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_50 +sw $t0, 376($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 380($sp) +move $t0, $sp +lw $t1, 376($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 384($sp) +move $t0, $sp +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 360($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 356($sp) +move $t0, $sp +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 356($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 388($sp) +lw $t0, 356($sp) +lw $a0, 16($t0) +bnez $a0, label_94 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_51 +sw $t0, 416($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 424($sp) +move $t0, $sp +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 400($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 400($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 428($sp) +lw $t0, 396($sp) +lw $a0, 16($t0) +bnez $a0, label_95 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_52 +sw $t0, 456($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 460($sp) +move $t0, $sp +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 460($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 464($sp) +move $t0, $sp +lw $t1, 460($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 440($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 436($sp) +move $t0, $sp +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 436($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 468($sp) +lw $t0, 436($sp) +lw $a0, 16($t0) +bnez $a0, label_96 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_53 +sw $t0, 496($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 500($sp) +move $t0, $sp +lw $t1, 496($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 504($sp) +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 480($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 508($sp) +lw $t0, 476($sp) +lw $a0, 16($t0) +bnez $a0, label_97 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 516($sp) +move $t0, $sp +lw $t1, 516($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 520($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 524($sp) +move $t0, $sp +lw $t1, 524($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 516($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 516($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 512($sp) +lw $t0, 1140($sp) +lw $t1, 512($sp) +sw $t1, 20($t0) +lw $t1, 512($sp) +sw $t1, 472($sp) +b label_98 +label_97: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 536($sp) +li $t0, 0 +sw $t0, 540($sp) +move $t0, $sp +lw $t1, 540($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 536($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 544($sp) +lw $t0, 1140($sp) +lw $t1, 536($sp) +sw $t1, 28($t0) +lw $t1, 536($sp) +sw $t1, 472($sp) +label_98: +lw $t1, 472($sp) +sw $t1, 432($sp) +b label_99 +label_96: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 552($sp) +move $t0, $sp +lw $t1, 552($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 556($sp) +lw $t0, 1140($sp) +lw $t1, 552($sp) +sw $t1, 20($t0) +lw $t1, 552($sp) +sw $t1, 432($sp) +label_99: +lw $t1, 432($sp) +sw $t1, 392($sp) +b label_100 +label_95: +la $t1, void +sw $t1, 564($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 572($sp) +move $t0, $sp +lw $t1, 572($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 576($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 580($sp) +move $t0, $sp +lw $t1, 580($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 572($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 572($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 568($sp) +lw $t1, 568($sp) +sw $t1, 564($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 608($sp) +move $t0, $sp +lw $t1, 564($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 564($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 632($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 636($sp) +li $t0, 8 +sw $t0, 640($sp) +move $t0, $sp +lw $t1, 640($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 636($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 644($sp) +lw $t0, 632($sp) +lw $t1, 16($t0) +sw $t1, 624($sp) +lw $t0, 636($sp) +lw $t1, 16($t0) +sw $t1, 628($sp) +lw $a0, 624($sp) +lw $t1, 628($sp) +mul $a0, $a0, $t1 +sw $a0, 620($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 616($sp) +move $t0, $sp +lw $t1, 620($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 616($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 648($sp) +lw $t0, 608($sp) +lw $t1, 16($t0) +sw $t1, 600($sp) +lw $t0, 616($sp) +lw $t1, 16($t0) +sw $t1, 604($sp) +lw $a0, 600($sp) +lw $t1, 604($sp) +sub $a0, $a0, $t1 +sw $a0, 596($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 592($sp) +move $t0, $sp +lw $t1, 596($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 592($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 652($sp) +lw $t1, 592($sp) +sw $t1, 656($sp) +la $t0, s_41 +sw $t0, 664($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 668($sp) +move $t0, $sp +lw $t1, 664($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 668($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 672($sp) +move $t0, $sp +lw $t1, 668($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 660($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 676($sp) +la $t0, s_54 +sw $t0, 688($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 692($sp) +move $t0, $sp +lw $t1, 688($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 692($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 696($sp) +move $t0, $sp +lw $t1, 692($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 684($sp) +move $t0, $sp +lw $t1, 564($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 700($sp) +la $t0, s_55 +sw $t0, 708($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 712($sp) +move $t0, $sp +lw $t1, 708($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 712($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 716($sp) +move $t0, $sp +lw $t1, 712($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 704($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 720($sp) +move $t0, $sp +lw $t1, 720($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 724($sp) +lw $t1, 720($sp) +sw $t1, 728($sp) +move $t0, $sp +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 728($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 728($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 736($sp) +move $t0, $sp +lw $t1, 736($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 732($sp) +la $t0, s_1 +sw $t0, 744($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 748($sp) +move $t0, $sp +lw $t1, 744($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 748($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 752($sp) +move $t0, $sp +lw $t1, 748($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 740($sp) +lw $t1, 740($sp) +sw $t1, 756($sp) +lw $t1, 756($sp) +sw $t1, 760($sp) +lw $t0, 1140($sp) +lw $t1, 564($sp) +sw $t1, 20($t0) +lw $t1, 564($sp) +sw $t1, 768($sp) +lw $t1, 768($sp) +sw $t1, 392($sp) +label_100: +lw $t1, 392($sp) +sw $t1, 352($sp) +b label_101 +label_94: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 780($sp) +move $t0, $sp +lw $t1, 780($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 784($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 788($sp) +move $t0, $sp +lw $t1, 788($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 780($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 780($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 776($sp) +lw $t0, 776($sp) +lw $a0, 16($t0) +bnez $a0, label_102 +la $t0, s_41 +sw $t0, 800($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 804($sp) +move $t0, $sp +lw $t1, 800($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 804($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 808($sp) +move $t0, $sp +lw $t1, 804($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 796($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 812($sp) +la $t0, s_56 +sw $t0, 824($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 828($sp) +move $t0, $sp +lw $t1, 824($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 828($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 832($sp) +move $t0, $sp +lw $t1, 828($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 820($sp) +lw $t1, 820($sp) +sw $t1, 772($sp) +b label_103 +label_102: +la $t0, s_41 +sw $t0, 840($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 844($sp) +move $t0, $sp +lw $t1, 840($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 844($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 848($sp) +move $t0, $sp +lw $t1, 844($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 836($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 852($sp) +la $t0, s_57 +sw $t0, 864($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 868($sp) +move $t0, $sp +lw $t1, 864($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 868($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 872($sp) +move $t0, $sp +lw $t1, 868($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 860($sp) +lw $t1, 860($sp) +sw $t1, 772($sp) +label_103: +lw $t1, 772($sp) +sw $t1, 352($sp) +label_101: +lw $t1, 352($sp) +sw $t1, 312($sp) +b label_104 +label_93: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 880($sp) +move $t0, $sp +lw $t1, 880($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 884($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 888($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 896($sp) +move $t0, $sp +lw $t1, 888($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 880($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 896($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 876($sp) +lw $t0, 1140($sp) +lw $t1, 876($sp) +sw $t1, 20($t0) +lw $t1, 876($sp) +sw $t1, 312($sp) +label_104: +lw $t1, 312($sp) +sw $t1, 272($sp) +b label_105 +label_92: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 908($sp) +move $t0, $sp +lw $t1, 908($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 912($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 916($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 924($sp) +move $t0, $sp +lw $t1, 916($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 908($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 924($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 904($sp) +lw $t0, 1140($sp) +lw $t1, 904($sp) +sw $t1, 20($t0) +lw $t1, 904($sp) +sw $t1, 272($sp) +label_105: +lw $t1, 272($sp) +sw $t1, 232($sp) +b label_106 +label_91: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 936($sp) +move $t0, $sp +lw $t1, 936($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 940($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 944($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 952($sp) +move $t0, $sp +lw $t1, 944($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 936($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 952($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 932($sp) +lw $t0, 1140($sp) +lw $t1, 932($sp) +sw $t1, 20($t0) +lw $t1, 932($sp) +sw $t1, 232($sp) +label_106: +lw $t1, 232($sp) +sw $t1, 192($sp) +b label_107 +label_90: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 964($sp) +move $t0, $sp +lw $t1, 964($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 968($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 972($sp) +move $t0, $sp +lw $t1, 972($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 964($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 964($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 960($sp) +lw $t0, 1140($sp) +lw $t1, 960($sp) +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 984($sp) +move $t0, $sp +lw $t1, 984($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 988($sp) +lw $t0, 1140($sp) +lw $t1, 24($t0) +sw $t1, 1124($sp) +move $t0, $sp +lw $t1, 1124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1124($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 992($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1000($sp) +move $t0, $sp +lw $t1, 992($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1000($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 984($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 984($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 980($sp) +lw $t0, 1140($sp) +lw $t1, 980($sp) +sw $t1, 20($t0) +lw $t1, 980($sp) +sw $t1, 192($sp) +label_107: +lw $t1, 192($sp) +sw $t1, 152($sp) +b label_108 +label_89: +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +lw $t0, 1132($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_110 +b case_void_error +label_110: +blt $t1 7 label_111 +bgt $t1 7 label_111 +lw $t1, 1132($sp) +sw $t1, 1020($sp) +move $t0, $sp +lw $t1, 1020($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1020($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1028($sp) +move $t0, $sp +lw $t1, 1028($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1020($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1020($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 1024($sp) +lw $t0, 1140($sp) +lw $t1, 1024($sp) +sw $t1, 20($t0) +lw $t1, 1024($sp) +sw $t1, 1012($sp) +b label_109 +label_111: +blt $t1 5 label_112 +bgt $t1 9 label_112 +lw $t1, 1132($sp) +sw $t1, 1036($sp) +move $t0, $sp +lw $t1, 1036($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1036($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1044($sp) +move $t0, $sp +lw $t1, 1044($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1036($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1036($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 1040($sp) +lw $t0, 1140($sp) +lw $t1, 1040($sp) +sw $t1, 20($t0) +lw $t1, 1040($sp) +sw $t1, 1012($sp) +b label_109 +label_112: +blt $t1 0 label_113 +bgt $t1 9 label_113 +lw $t1, 1132($sp) +sw $t1, 1052($sp) +la $t0, s_39 +sw $t0, 1060($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1064($sp) +move $t0, $sp +lw $t1, 1060($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1064($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1068($sp) +move $t0, $sp +lw $t1, 1064($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1056($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 1072($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 1076($sp) +li $t0, 0 +sw $t0, 1080($sp) +move $t0, $sp +lw $t1, 1080($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1076($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1084($sp) +lw $t1, 1076($sp) +sw $t1, 1012($sp) +b label_109 +label_113: +b case_no_match_error +label_109: +lw $t1, 1012($sp) +sw $t1, 152($sp) +label_108: +lw $t1, 152($sp) +sw $t1, 112($sp) +b label_114 +label_88: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 1092($sp) +move $t0, $sp +lw $t1, 1092($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 1096($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 1100($sp) +move $t0, $sp +lw $t1, 1100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1092($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1092($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 1088($sp) +lw $t0, 1140($sp) +lw $t1, 1088($sp) +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 1112($sp) +move $t0, $sp +lw $t1, 1112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 1116($sp) +lw $t0, 1140($sp) +lw $t1, 24($t0) +sw $t1, 1124($sp) +move $t0, $sp +lw $t1, 1124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1124($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1120($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1128($sp) +move $t0, $sp +lw $t1, 1120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1112($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 1108($sp) +lw $t0, 1140($sp) +lw $t1, 1108($sp) +sw $t1, 20($t0) +lw $t1, 1108($sp) +sw $t1, 112($sp) +label_114: +b label_83 +label_85: +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 1144 +jr $ra \ No newline at end of file diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips deleted file mode 100644 index a9b739d9..00000000 --- a/tests/codegen/atoi.mips +++ /dev/null @@ -1,10 +0,0 @@ -.data -s_0: .asciiz"678987 == 678987 -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips deleted file mode 100644 index 27c696b4..00000000 --- a/tests/codegen/book_list.mips +++ /dev/null @@ -1,40 +0,0 @@ -.data -s_0: .asciiz"title: The Top 100 CD_ROMs -" -s_1: .asciiz"author: Ulanoff -" -s_2: .asciiz"periodical: PC Magazine -" -s_3: .asciiz"- dynamic type was Article - -" -s_4: .asciiz"title: Compilers, Principles, Techniques, and Tools -" -s_5: .asciiz"author: Aho, Sethi, and Ullman -" -s_6: .asciiz"- dynamic type was Book - -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 4 -la $a0, s_2 -syscall -li $v0, 4 -la $a0, s_3 -syscall -li $v0, 4 -la $a0, s_4 -syscall -li $v0, 4 -la $a0, s_5 -syscall -li $v0, 4 -la $a0, s_6 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips deleted file mode 100644 index ec6f8ef4..00000000 --- a/tests/codegen/cells.mips +++ /dev/null @@ -1,110 +0,0 @@ -.data -s_0: .asciiz" X -" -s_1: .asciiz"........XXX........ -" -s_2: .asciiz".......X...X....... -" -s_3: .asciiz"......XXX.XXX...... -" -s_4: .asciiz".....X.......X..... -" -s_5: .asciiz"....XXX.....XXX.... -" -s_6: .asciiz"...X...X...X...X... -" -s_7: .asciiz"..XXX.XXX.XXX.XXX.. -" -s_8: .asciiz".X...............X. -" -s_9: .asciiz"XXX.............XXX -" -s_10: .asciiz"...X...........X... -" -s_11: .asciiz"..XXX.........XXX.. -" -s_12: .asciiz".X...X.......X...X. -" -s_13: .asciiz"XXX.XXX.....XXX.XXX -" -s_14: .asciiz".......X...X....... -" -s_15: .asciiz"......XXX.XXX...... -" -s_16: .asciiz".....X.......X..... -" -s_17: .asciiz"....XXX.....XXX.... -" -s_18: .asciiz"...X...X...X...X... -" -s_19: .asciiz"..XXX.XXX.XXX.XXX.. -" -s_20: .asciiz".X...............X. -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 4 -la $a0, s_2 -syscall -li $v0, 4 -la $a0, s_3 -syscall -li $v0, 4 -la $a0, s_4 -syscall -li $v0, 4 -la $a0, s_5 -syscall -li $v0, 4 -la $a0, s_6 -syscall -li $v0, 4 -la $a0, s_7 -syscall -li $v0, 4 -la $a0, s_8 -syscall -li $v0, 4 -la $a0, s_9 -syscall -li $v0, 4 -la $a0, s_10 -syscall -li $v0, 4 -la $a0, s_11 -syscall -li $v0, 4 -la $a0, s_12 -syscall -li $v0, 4 -la $a0, s_13 -syscall -li $v0, 4 -la $a0, s_14 -syscall -li $v0, 4 -la $a0, s_15 -syscall -li $v0, 4 -la $a0, s_16 -syscall -li $v0, 4 -la $a0, s_17 -syscall -li $v0, 4 -la $a0, s_18 -syscall -li $v0, 4 -la $a0, s_19 -syscall -li $v0, 4 -la $a0, s_20 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips deleted file mode 100644 index f95fca70..00000000 --- a/tests/codegen/complex.mips +++ /dev/null @@ -1,10 +0,0 @@ -.data -s_0: .asciiz"=) -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips deleted file mode 100644 index f4fb1922..00000000 --- a/tests/codegen/fib.mips +++ /dev/null @@ -1,15 +0,0 @@ -.data -s_0: .asciiz"Enter n to find nth fibonacci number! -" -s_1: .asciiz"89 -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips deleted file mode 100644 index 9bcaca6a..00000000 --- a/tests/codegen/graph.mips +++ /dev/null @@ -1,40 +0,0 @@ -.data -s_0: .asciiz"5 (5,5)5 (5,4)4 (5,3)3 (5,2)2 (5,1)1 -" -s_1: .asciiz"4 (4,5)100 (4,3)55 -" -s_2: .asciiz"3 (3,2)10 -" -s_3: .asciiz"2 (2,1)150 (2,3)200 -" -s_4: .asciiz"1 (1,2)100 -" -s_5: .asciiz" -" -s_6: .asciiz" (5,5)5 (5,4)4 (5,3)3 (5,2)2 (5,1)1 (4,5)100 (4,3)55 (3,2)10 (2,1)150 (2,3)200 (1,2)100 -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 4 -la $a0, s_2 -syscall -li $v0, 4 -la $a0, s_3 -syscall -li $v0, 4 -la $a0, s_4 -syscall -li $v0, 4 -la $a0, s_5 -syscall -li $v0, 4 -la $a0, s_6 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips deleted file mode 100644 index 86fe63f2..00000000 --- a/tests/codegen/hairyscary.mips +++ /dev/null @@ -1,9 +0,0 @@ -.data -s_0: .asciiz"17141611714163171416511714161171416317141653117141611714163171416511714161171416317141653171416117141631714165171416" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips deleted file mode 100644 index f8e7b8ff..00000000 --- a/tests/codegen/hello_world.mips +++ /dev/null @@ -1,10 +0,0 @@ -.data -s_0: .asciiz"Hello, World. -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips deleted file mode 100644 index 16b7e555..00000000 --- a/tests/codegen/io.mips +++ /dev/null @@ -1,30 +0,0 @@ -.data -s_0: .asciiz"A: Hello world -" -s_1: .asciiz"B: Hello world -" -s_2: .asciiz"C: Hello world -" -s_3: .asciiz"D: Hello world -" -s_4: .asciiz"Done. -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 4 -la $a0, s_2 -syscall -li $v0, 4 -la $a0, s_3 -syscall -li $v0, 4 -la $a0, s_4 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips deleted file mode 100644 index e7f51645..00000000 --- a/tests/codegen/life.mips +++ /dev/null @@ -1,3894 +0,0 @@ -.data -s_0: .asciiz"Welcome to the Game of Life. -" -s_1: .asciiz"There are many initial states to choose from. -" -s_2: .asciiz" -" -s_3: .asciiz" -" -s_4: .asciiz"Would you like to choose a background pattern? -" -s_5: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_6: .asciiz"Please chose a number: -" -s_7: .asciiz" 1: A cross -" -s_8: .asciiz" 2: A slash from the upper left to lower right -" -s_9: .asciiz" 3: A slash from the upper right to lower left -" -s_10: .asciiz" 4: An X -" -s_11: .asciiz" 5: A greater than sign -" -s_12: .asciiz" 6: A less than sign -" -s_13: .asciiz" 7: Two greater than signs -" -s_14: .asciiz" 8: Two less than signs -" -s_15: .asciiz" 9: A 'V' -" -s_16: .asciiz" 10: An inverse 'V' -" -s_17: .asciiz" 11: Numbers 9 and 10 combined -" -s_18: .asciiz" 12: A full grid -" -s_19: .asciiz" 13: A 'T' -" -s_20: .asciiz" 14: A plus '+' -" -s_21: .asciiz" 15: A 'W' -" -s_22: .asciiz" 16: An 'M' -" -s_23: .asciiz" 17: An 'E' -" -s_24: .asciiz" 18: A '3' -" -s_25: .asciiz" 19: An 'O' -" -s_26: .asciiz" 20: An '8' -" -s_27: .asciiz" 21: An 'S' -" -s_28: .asciiz"Your choice => -" -s_29: .asciiz" -" -s_30: .asciiz" XX -" -s_31: .asciiz"XXXX -" -s_32: .asciiz"XXXX -" -s_33: .asciiz" XX -" -s_34: .asciiz" -" -s_35: .asciiz"Would you like to continue with the next generation? -" -s_36: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_37: .asciiz" -" -s_38: .asciiz" -" -s_39: .asciiz"Would you like to choose a background pattern? -" -s_40: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_41: .asciiz"Please chose a number: -" -s_42: .asciiz" 1: A cross -" -s_43: .asciiz" 2: A slash from the upper left to lower right -" -s_44: .asciiz" 3: A slash from the upper right to lower left -" -s_45: .asciiz" 4: An X -" -s_46: .asciiz" 5: A greater than sign -" -s_47: .asciiz" 6: A less than sign -" -s_48: .asciiz" 7: Two greater than signs -" -s_49: .asciiz" 8: Two less than signs -" -s_50: .asciiz" 9: A 'V' -" -s_51: .asciiz" 10: An inverse 'V' -" -s_52: .asciiz" 11: Numbers 9 and 10 combined -" -s_53: .asciiz" 12: A full grid -" -s_54: .asciiz" 13: A 'T' -" -s_55: .asciiz" 14: A plus '+' -" -s_56: .asciiz" 15: A 'W' -" -s_57: .asciiz" 16: An 'M' -" -s_58: .asciiz" 17: An 'E' -" -s_59: .asciiz" 18: A '3' -" -s_60: .asciiz" 19: An 'O' -" -s_61: .asciiz" 20: An '8' -" -s_62: .asciiz" 21: An 'S' -" -s_63: .asciiz"Your choice => -" -s_64: .asciiz" -" -s_65: .asciiz" X -" -s_66: .asciiz" X -" -s_67: .asciiz" X -" -s_68: .asciiz" X -" -s_69: .asciiz"X -" -s_70: .asciiz" -" -s_71: .asciiz"Would you like to continue with the next generation? -" -s_72: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_73: .asciiz" -" -s_74: .asciiz" -" -s_75: .asciiz"Would you like to choose a background pattern? -" -s_76: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_77: .asciiz"Please chose a number: -" -s_78: .asciiz" 1: A cross -" -s_79: .asciiz" 2: A slash from the upper left to lower right -" -s_80: .asciiz" 3: A slash from the upper right to lower left -" -s_81: .asciiz" 4: An X -" -s_82: .asciiz" 5: A greater than sign -" -s_83: .asciiz" 6: A less than sign -" -s_84: .asciiz" 7: Two greater than signs -" -s_85: .asciiz" 8: Two less than signs -" -s_86: .asciiz" 9: A 'V' -" -s_87: .asciiz" 10: An inverse 'V' -" -s_88: .asciiz" 11: Numbers 9 and 10 combined -" -s_89: .asciiz" 12: A full grid -" -s_90: .asciiz" 13: A 'T' -" -s_91: .asciiz" 14: A plus '+' -" -s_92: .asciiz" 15: A 'W' -" -s_93: .asciiz" 16: An 'M' -" -s_94: .asciiz" 17: An 'E' -" -s_95: .asciiz" 18: A '3' -" -s_96: .asciiz" 19: An 'O' -" -s_97: .asciiz" 20: An '8' -" -s_98: .asciiz" 21: An 'S' -" -s_99: .asciiz"Your choice => -" -s_100: .asciiz" -" -s_101: .asciiz"X -" -s_102: .asciiz" X -" -s_103: .asciiz" X -" -s_104: .asciiz" X -" -s_105: .asciiz" X -" -s_106: .asciiz" -" -s_107: .asciiz"Would you like to continue with the next generation? -" -s_108: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_109: .asciiz" -" -s_110: .asciiz" -" -s_111: .asciiz"Would you like to choose a background pattern? -" -s_112: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_113: .asciiz"Please chose a number: -" -s_114: .asciiz" 1: A cross -" -s_115: .asciiz" 2: A slash from the upper left to lower right -" -s_116: .asciiz" 3: A slash from the upper right to lower left -" -s_117: .asciiz" 4: An X -" -s_118: .asciiz" 5: A greater than sign -" -s_119: .asciiz" 6: A less than sign -" -s_120: .asciiz" 7: Two greater than signs -" -s_121: .asciiz" 8: Two less than signs -" -s_122: .asciiz" 9: A 'V' -" -s_123: .asciiz" 10: An inverse 'V' -" -s_124: .asciiz" 11: Numbers 9 and 10 combined -" -s_125: .asciiz" 12: A full grid -" -s_126: .asciiz" 13: A 'T' -" -s_127: .asciiz" 14: A plus '+' -" -s_128: .asciiz" 15: A 'W' -" -s_129: .asciiz" 16: An 'M' -" -s_130: .asciiz" 17: An 'E' -" -s_131: .asciiz" 18: A '3' -" -s_132: .asciiz" 19: An 'O' -" -s_133: .asciiz" 20: An '8' -" -s_134: .asciiz" 21: An 'S' -" -s_135: .asciiz"Your choice => -" -s_136: .asciiz" -" -s_137: .asciiz"X X -" -s_138: .asciiz" X X -" -s_139: .asciiz" X -" -s_140: .asciiz" X X -" -s_141: .asciiz"X X -" -s_142: .asciiz" -" -s_143: .asciiz"Would you like to continue with the next generation? -" -s_144: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_145: .asciiz" -" -s_146: .asciiz" -" -s_147: .asciiz"Would you like to choose a background pattern? -" -s_148: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_149: .asciiz"Please chose a number: -" -s_150: .asciiz" 1: A cross -" -s_151: .asciiz" 2: A slash from the upper left to lower right -" -s_152: .asciiz" 3: A slash from the upper right to lower left -" -s_153: .asciiz" 4: An X -" -s_154: .asciiz" 5: A greater than sign -" -s_155: .asciiz" 6: A less than sign -" -s_156: .asciiz" 7: Two greater than signs -" -s_157: .asciiz" 8: Two less than signs -" -s_158: .asciiz" 9: A 'V' -" -s_159: .asciiz" 10: An inverse 'V' -" -s_160: .asciiz" 11: Numbers 9 and 10 combined -" -s_161: .asciiz" 12: A full grid -" -s_162: .asciiz" 13: A 'T' -" -s_163: .asciiz" 14: A plus '+' -" -s_164: .asciiz" 15: A 'W' -" -s_165: .asciiz" 16: An 'M' -" -s_166: .asciiz" 17: An 'E' -" -s_167: .asciiz" 18: A '3' -" -s_168: .asciiz" 19: An 'O' -" -s_169: .asciiz" 20: An '8' -" -s_170: .asciiz" 21: An 'S' -" -s_171: .asciiz"Your choice => -" -s_172: .asciiz" -" -s_173: .asciiz"X -" -s_174: .asciiz" X -" -s_175: .asciiz" X -" -s_176: .asciiz" X -" -s_177: .asciiz"X -" -s_178: .asciiz" -" -s_179: .asciiz"Would you like to continue with the next generation? -" -s_180: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_181: .asciiz" -" -s_182: .asciiz" -" -s_183: .asciiz"Would you like to choose a background pattern? -" -s_184: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_185: .asciiz"Please chose a number: -" -s_186: .asciiz" 1: A cross -" -s_187: .asciiz" 2: A slash from the upper left to lower right -" -s_188: .asciiz" 3: A slash from the upper right to lower left -" -s_189: .asciiz" 4: An X -" -s_190: .asciiz" 5: A greater than sign -" -s_191: .asciiz" 6: A less than sign -" -s_192: .asciiz" 7: Two greater than signs -" -s_193: .asciiz" 8: Two less than signs -" -s_194: .asciiz" 9: A 'V' -" -s_195: .asciiz" 10: An inverse 'V' -" -s_196: .asciiz" 11: Numbers 9 and 10 combined -" -s_197: .asciiz" 12: A full grid -" -s_198: .asciiz" 13: A 'T' -" -s_199: .asciiz" 14: A plus '+' -" -s_200: .asciiz" 15: A 'W' -" -s_201: .asciiz" 16: An 'M' -" -s_202: .asciiz" 17: An 'E' -" -s_203: .asciiz" 18: A '3' -" -s_204: .asciiz" 19: An 'O' -" -s_205: .asciiz" 20: An '8' -" -s_206: .asciiz" 21: An 'S' -" -s_207: .asciiz"Your choice => -" -s_208: .asciiz" -" -s_209: .asciiz" X -" -s_210: .asciiz" X -" -s_211: .asciiz" X -" -s_212: .asciiz" X -" -s_213: .asciiz" X -" -s_214: .asciiz" -" -s_215: .asciiz"Would you like to continue with the next generation? -" -s_216: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_217: .asciiz" -" -s_218: .asciiz" -" -s_219: .asciiz"Would you like to choose a background pattern? -" -s_220: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_221: .asciiz"Please chose a number: -" -s_222: .asciiz" 1: A cross -" -s_223: .asciiz" 2: A slash from the upper left to lower right -" -s_224: .asciiz" 3: A slash from the upper right to lower left -" -s_225: .asciiz" 4: An X -" -s_226: .asciiz" 5: A greater than sign -" -s_227: .asciiz" 6: A less than sign -" -s_228: .asciiz" 7: Two greater than signs -" -s_229: .asciiz" 8: Two less than signs -" -s_230: .asciiz" 9: A 'V' -" -s_231: .asciiz" 10: An inverse 'V' -" -s_232: .asciiz" 11: Numbers 9 and 10 combined -" -s_233: .asciiz" 12: A full grid -" -s_234: .asciiz" 13: A 'T' -" -s_235: .asciiz" 14: A plus '+' -" -s_236: .asciiz" 15: A 'W' -" -s_237: .asciiz" 16: An 'M' -" -s_238: .asciiz" 17: An 'E' -" -s_239: .asciiz" 18: A '3' -" -s_240: .asciiz" 19: An 'O' -" -s_241: .asciiz" 20: An '8' -" -s_242: .asciiz" 21: An 'S' -" -s_243: .asciiz"Your choice => -" -s_244: .asciiz" -" -s_245: .asciiz"X X -" -s_246: .asciiz" X X -" -s_247: .asciiz"X X -" -s_248: .asciiz" -" -s_249: .asciiz" -" -s_250: .asciiz"Would you like to continue with the next generation? -" -s_251: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_252: .asciiz" -" -s_253: .asciiz" -" -s_254: .asciiz"Would you like to choose a background pattern? -" -s_255: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_256: .asciiz"Please chose a number: -" -s_257: .asciiz" 1: A cross -" -s_258: .asciiz" 2: A slash from the upper left to lower right -" -s_259: .asciiz" 3: A slash from the upper right to lower left -" -s_260: .asciiz" 4: An X -" -s_261: .asciiz" 5: A greater than sign -" -s_262: .asciiz" 6: A less than sign -" -s_263: .asciiz" 7: Two greater than signs -" -s_264: .asciiz" 8: Two less than signs -" -s_265: .asciiz" 9: A 'V' -" -s_266: .asciiz" 10: An inverse 'V' -" -s_267: .asciiz" 11: Numbers 9 and 10 combined -" -s_268: .asciiz" 12: A full grid -" -s_269: .asciiz" 13: A 'T' -" -s_270: .asciiz" 14: A plus '+' -" -s_271: .asciiz" 15: A 'W' -" -s_272: .asciiz" 16: An 'M' -" -s_273: .asciiz" 17: An 'E' -" -s_274: .asciiz" 18: A '3' -" -s_275: .asciiz" 19: An 'O' -" -s_276: .asciiz" 20: An '8' -" -s_277: .asciiz" 21: An 'S' -" -s_278: .asciiz"Your choice => -" -s_279: .asciiz" -" -s_280: .asciiz" X X -" -s_281: .asciiz"X X -" -s_282: .asciiz" X X -" -s_283: .asciiz" -" -s_284: .asciiz" -" -s_285: .asciiz"Would you like to continue with the next generation? -" -s_286: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_287: .asciiz" -" -s_288: .asciiz" -" -s_289: .asciiz"Would you like to choose a background pattern? -" -s_290: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_291: .asciiz"Please chose a number: -" -s_292: .asciiz" 1: A cross -" -s_293: .asciiz" 2: A slash from the upper left to lower right -" -s_294: .asciiz" 3: A slash from the upper right to lower left -" -s_295: .asciiz" 4: An X -" -s_296: .asciiz" 5: A greater than sign -" -s_297: .asciiz" 6: A less than sign -" -s_298: .asciiz" 7: Two greater than signs -" -s_299: .asciiz" 8: Two less than signs -" -s_300: .asciiz" 9: A 'V' -" -s_301: .asciiz" 10: An inverse 'V' -" -s_302: .asciiz" 11: Numbers 9 and 10 combined -" -s_303: .asciiz" 12: A full grid -" -s_304: .asciiz" 13: A 'T' -" -s_305: .asciiz" 14: A plus '+' -" -s_306: .asciiz" 15: A 'W' -" -s_307: .asciiz" 16: An 'M' -" -s_308: .asciiz" 17: An 'E' -" -s_309: .asciiz" 18: A '3' -" -s_310: .asciiz" 19: An 'O' -" -s_311: .asciiz" 20: An '8' -" -s_312: .asciiz" 21: An 'S' -" -s_313: .asciiz"Your choice => -" -s_314: .asciiz" -" -s_315: .asciiz"X X -" -s_316: .asciiz" X X -" -s_317: .asciiz" X -" -s_318: .asciiz" -" -s_319: .asciiz"Would you like to continue with the next generation? -" -s_320: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_321: .asciiz" -" -s_322: .asciiz" -" -s_323: .asciiz"Would you like to choose a background pattern? -" -s_324: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_325: .asciiz"Please chose a number: -" -s_326: .asciiz" 1: A cross -" -s_327: .asciiz" 2: A slash from the upper left to lower right -" -s_328: .asciiz" 3: A slash from the upper right to lower left -" -s_329: .asciiz" 4: An X -" -s_330: .asciiz" 5: A greater than sign -" -s_331: .asciiz" 6: A less than sign -" -s_332: .asciiz" 7: Two greater than signs -" -s_333: .asciiz" 8: Two less than signs -" -s_334: .asciiz" 9: A 'V' -" -s_335: .asciiz" 10: An inverse 'V' -" -s_336: .asciiz" 11: Numbers 9 and 10 combined -" -s_337: .asciiz" 12: A full grid -" -s_338: .asciiz" 13: A 'T' -" -s_339: .asciiz" 14: A plus '+' -" -s_340: .asciiz" 15: A 'W' -" -s_341: .asciiz" 16: An 'M' -" -s_342: .asciiz" 17: An 'E' -" -s_343: .asciiz" 18: A '3' -" -s_344: .asciiz" 19: An 'O' -" -s_345: .asciiz" 20: An '8' -" -s_346: .asciiz" 21: An 'S' -" -s_347: .asciiz"Your choice => -" -s_348: .asciiz" -" -s_349: .asciiz" X -" -s_350: .asciiz" X X -" -s_351: .asciiz"X X -" -s_352: .asciiz" -" -s_353: .asciiz"Would you like to continue with the next generation? -" -s_354: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_355: .asciiz" -" -s_356: .asciiz" -" -s_357: .asciiz"Would you like to choose a background pattern? -" -s_358: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_359: .asciiz"Please chose a number: -" -s_360: .asciiz" 1: A cross -" -s_361: .asciiz" 2: A slash from the upper left to lower right -" -s_362: .asciiz" 3: A slash from the upper right to lower left -" -s_363: .asciiz" 4: An X -" -s_364: .asciiz" 5: A greater than sign -" -s_365: .asciiz" 6: A less than sign -" -s_366: .asciiz" 7: Two greater than signs -" -s_367: .asciiz" 8: Two less than signs -" -s_368: .asciiz" 9: A 'V' -" -s_369: .asciiz" 10: An inverse 'V' -" -s_370: .asciiz" 11: Numbers 9 and 10 combined -" -s_371: .asciiz" 12: A full grid -" -s_372: .asciiz" 13: A 'T' -" -s_373: .asciiz" 14: A plus '+' -" -s_374: .asciiz" 15: A 'W' -" -s_375: .asciiz" 16: An 'M' -" -s_376: .asciiz" 17: An 'E' -" -s_377: .asciiz" 18: A '3' -" -s_378: .asciiz" 19: An 'O' -" -s_379: .asciiz" 20: An '8' -" -s_380: .asciiz" 21: An 'S' -" -s_381: .asciiz"Your choice => -" -s_382: .asciiz" -" -s_383: .asciiz"X X X -" -s_384: .asciiz" X X -" -s_385: .asciiz"X X X -" -s_386: .asciiz" -" -s_387: .asciiz"Would you like to continue with the next generation? -" -s_388: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_389: .asciiz" -" -s_390: .asciiz" -" -s_391: .asciiz"Would you like to choose a background pattern? -" -s_392: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_393: .asciiz"Please chose a number: -" -s_394: .asciiz" 1: A cross -" -s_395: .asciiz" 2: A slash from the upper left to lower right -" -s_396: .asciiz" 3: A slash from the upper right to lower left -" -s_397: .asciiz" 4: An X -" -s_398: .asciiz" 5: A greater than sign -" -s_399: .asciiz" 6: A less than sign -" -s_400: .asciiz" 7: Two greater than signs -" -s_401: .asciiz" 8: Two less than signs -" -s_402: .asciiz" 9: A 'V' -" -s_403: .asciiz" 10: An inverse 'V' -" -s_404: .asciiz" 11: Numbers 9 and 10 combined -" -s_405: .asciiz" 12: A full grid -" -s_406: .asciiz" 13: A 'T' -" -s_407: .asciiz" 14: A plus '+' -" -s_408: .asciiz" 15: A 'W' -" -s_409: .asciiz" 16: An 'M' -" -s_410: .asciiz" 17: An 'E' -" -s_411: .asciiz" 18: A '3' -" -s_412: .asciiz" 19: An 'O' -" -s_413: .asciiz" 20: An '8' -" -s_414: .asciiz" 21: An 'S' -" -s_415: .asciiz"Your choice => -" -s_416: .asciiz" -" -s_417: .asciiz"XXXXX -" -s_418: .asciiz"XXXXX -" -s_419: .asciiz"XXXXX -" -s_420: .asciiz"XXXXX -" -s_421: .asciiz"XXXXX -" -s_422: .asciiz" -" -s_423: .asciiz"Would you like to continue with the next generation? -" -s_424: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_425: .asciiz" -" -s_426: .asciiz" -" -s_427: .asciiz"Would you like to choose a background pattern? -" -s_428: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_429: .asciiz"Please chose a number: -" -s_430: .asciiz" 1: A cross -" -s_431: .asciiz" 2: A slash from the upper left to lower right -" -s_432: .asciiz" 3: A slash from the upper right to lower left -" -s_433: .asciiz" 4: An X -" -s_434: .asciiz" 5: A greater than sign -" -s_435: .asciiz" 6: A less than sign -" -s_436: .asciiz" 7: Two greater than signs -" -s_437: .asciiz" 8: Two less than signs -" -s_438: .asciiz" 9: A 'V' -" -s_439: .asciiz" 10: An inverse 'V' -" -s_440: .asciiz" 11: Numbers 9 and 10 combined -" -s_441: .asciiz" 12: A full grid -" -s_442: .asciiz" 13: A 'T' -" -s_443: .asciiz" 14: A plus '+' -" -s_444: .asciiz" 15: A 'W' -" -s_445: .asciiz" 16: An 'M' -" -s_446: .asciiz" 17: An 'E' -" -s_447: .asciiz" 18: A '3' -" -s_448: .asciiz" 19: An 'O' -" -s_449: .asciiz" 20: An '8' -" -s_450: .asciiz" 21: An 'S' -" -s_451: .asciiz"Your choice => -" -s_452: .asciiz" -" -s_453: .asciiz"XXXXX -" -s_454: .asciiz" X -" -s_455: .asciiz" X -" -s_456: .asciiz" X -" -s_457: .asciiz" X -" -s_458: .asciiz" -" -s_459: .asciiz"Would you like to continue with the next generation? -" -s_460: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_461: .asciiz" -" -s_462: .asciiz" -" -s_463: .asciiz"Would you like to choose a background pattern? -" -s_464: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_465: .asciiz"Please chose a number: -" -s_466: .asciiz" 1: A cross -" -s_467: .asciiz" 2: A slash from the upper left to lower right -" -s_468: .asciiz" 3: A slash from the upper right to lower left -" -s_469: .asciiz" 4: An X -" -s_470: .asciiz" 5: A greater than sign -" -s_471: .asciiz" 6: A less than sign -" -s_472: .asciiz" 7: Two greater than signs -" -s_473: .asciiz" 8: Two less than signs -" -s_474: .asciiz" 9: A 'V' -" -s_475: .asciiz" 10: An inverse 'V' -" -s_476: .asciiz" 11: Numbers 9 and 10 combined -" -s_477: .asciiz" 12: A full grid -" -s_478: .asciiz" 13: A 'T' -" -s_479: .asciiz" 14: A plus '+' -" -s_480: .asciiz" 15: A 'W' -" -s_481: .asciiz" 16: An 'M' -" -s_482: .asciiz" 17: An 'E' -" -s_483: .asciiz" 18: A '3' -" -s_484: .asciiz" 19: An 'O' -" -s_485: .asciiz" 20: An '8' -" -s_486: .asciiz" 21: An 'S' -" -s_487: .asciiz"Your choice => -" -s_488: .asciiz" -" -s_489: .asciiz" X -" -s_490: .asciiz" X -" -s_491: .asciiz"XXXXX -" -s_492: .asciiz" X -" -s_493: .asciiz" X -" -s_494: .asciiz" -" -s_495: .asciiz"Would you like to continue with the next generation? -" -s_496: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_497: .asciiz" -" -s_498: .asciiz" -" -s_499: .asciiz"Would you like to choose a background pattern? -" -s_500: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_501: .asciiz"Please chose a number: -" -s_502: .asciiz" 1: A cross -" -s_503: .asciiz" 2: A slash from the upper left to lower right -" -s_504: .asciiz" 3: A slash from the upper right to lower left -" -s_505: .asciiz" 4: An X -" -s_506: .asciiz" 5: A greater than sign -" -s_507: .asciiz" 6: A less than sign -" -s_508: .asciiz" 7: Two greater than signs -" -s_509: .asciiz" 8: Two less than signs -" -s_510: .asciiz" 9: A 'V' -" -s_511: .asciiz" 10: An inverse 'V' -" -s_512: .asciiz" 11: Numbers 9 and 10 combined -" -s_513: .asciiz" 12: A full grid -" -s_514: .asciiz" 13: A 'T' -" -s_515: .asciiz" 14: A plus '+' -" -s_516: .asciiz" 15: A 'W' -" -s_517: .asciiz" 16: An 'M' -" -s_518: .asciiz" 17: An 'E' -" -s_519: .asciiz" 18: A '3' -" -s_520: .asciiz" 19: An 'O' -" -s_521: .asciiz" 20: An '8' -" -s_522: .asciiz" 21: An 'S' -" -s_523: .asciiz"Your choice => -" -s_524: .asciiz" -" -s_525: .asciiz"X X -" -s_526: .asciiz" X X X -" -s_527: .asciiz" X X -" -s_528: .asciiz" -" -s_529: .asciiz"Would you like to continue with the next generation? -" -s_530: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_531: .asciiz" -" -s_532: .asciiz" -" -s_533: .asciiz"Would you like to choose a background pattern? -" -s_534: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_535: .asciiz"Please chose a number: -" -s_536: .asciiz" 1: A cross -" -s_537: .asciiz" 2: A slash from the upper left to lower right -" -s_538: .asciiz" 3: A slash from the upper right to lower left -" -s_539: .asciiz" 4: An X -" -s_540: .asciiz" 5: A greater than sign -" -s_541: .asciiz" 6: A less than sign -" -s_542: .asciiz" 7: Two greater than signs -" -s_543: .asciiz" 8: Two less than signs -" -s_544: .asciiz" 9: A 'V' -" -s_545: .asciiz" 10: An inverse 'V' -" -s_546: .asciiz" 11: Numbers 9 and 10 combined -" -s_547: .asciiz" 12: A full grid -" -s_548: .asciiz" 13: A 'T' -" -s_549: .asciiz" 14: A plus '+' -" -s_550: .asciiz" 15: A 'W' -" -s_551: .asciiz" 16: An 'M' -" -s_552: .asciiz" 17: An 'E' -" -s_553: .asciiz" 18: A '3' -" -s_554: .asciiz" 19: An 'O' -" -s_555: .asciiz" 20: An '8' -" -s_556: .asciiz" 21: An 'S' -" -s_557: .asciiz"Your choice => -" -s_558: .asciiz" -" -s_559: .asciiz" X X -" -s_560: .asciiz" X X X -" -s_561: .asciiz"X X -" -s_562: .asciiz" -" -s_563: .asciiz"Would you like to continue with the next generation? -" -s_564: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_565: .asciiz" -" -s_566: .asciiz" -" -s_567: .asciiz"Would you like to choose a background pattern? -" -s_568: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_569: .asciiz"Please chose a number: -" -s_570: .asciiz" 1: A cross -" -s_571: .asciiz" 2: A slash from the upper left to lower right -" -s_572: .asciiz" 3: A slash from the upper right to lower left -" -s_573: .asciiz" 4: An X -" -s_574: .asciiz" 5: A greater than sign -" -s_575: .asciiz" 6: A less than sign -" -s_576: .asciiz" 7: Two greater than signs -" -s_577: .asciiz" 8: Two less than signs -" -s_578: .asciiz" 9: A 'V' -" -s_579: .asciiz" 10: An inverse 'V' -" -s_580: .asciiz" 11: Numbers 9 and 10 combined -" -s_581: .asciiz" 12: A full grid -" -s_582: .asciiz" 13: A 'T' -" -s_583: .asciiz" 14: A plus '+' -" -s_584: .asciiz" 15: A 'W' -" -s_585: .asciiz" 16: An 'M' -" -s_586: .asciiz" 17: An 'E' -" -s_587: .asciiz" 18: A '3' -" -s_588: .asciiz" 19: An 'O' -" -s_589: .asciiz" 20: An '8' -" -s_590: .asciiz" 21: An 'S' -" -s_591: .asciiz"Your choice => -" -s_592: .asciiz" -" -s_593: .asciiz"XXXX -" -s_594: .asciiz"X -" -s_595: .asciiz"X -" -s_596: .asciiz"XXXX -" -s_597: .asciiz"X -" -s_598: .asciiz"X -" -s_599: .asciiz"XXXX -" -s_600: .asciiz" -" -s_601: .asciiz"Would you like to continue with the next generation? -" -s_602: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_603: .asciiz" -" -s_604: .asciiz" -" -s_605: .asciiz"Would you like to choose a background pattern? -" -s_606: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_607: .asciiz"Please chose a number: -" -s_608: .asciiz" 1: A cross -" -s_609: .asciiz" 2: A slash from the upper left to lower right -" -s_610: .asciiz" 3: A slash from the upper right to lower left -" -s_611: .asciiz" 4: An X -" -s_612: .asciiz" 5: A greater than sign -" -s_613: .asciiz" 6: A less than sign -" -s_614: .asciiz" 7: Two greater than signs -" -s_615: .asciiz" 8: Two less than signs -" -s_616: .asciiz" 9: A 'V' -" -s_617: .asciiz" 10: An inverse 'V' -" -s_618: .asciiz" 11: Numbers 9 and 10 combined -" -s_619: .asciiz" 12: A full grid -" -s_620: .asciiz" 13: A 'T' -" -s_621: .asciiz" 14: A plus '+' -" -s_622: .asciiz" 15: A 'W' -" -s_623: .asciiz" 16: An 'M' -" -s_624: .asciiz" 17: An 'E' -" -s_625: .asciiz" 18: A '3' -" -s_626: .asciiz" 19: An 'O' -" -s_627: .asciiz" 20: An '8' -" -s_628: .asciiz" 21: An 'S' -" -s_629: .asciiz"Your choice => -" -s_630: .asciiz" -" -s_631: .asciiz"XXX -" -s_632: .asciiz" X -" -s_633: .asciiz" X -" -s_634: .asciiz" X -" -s_635: .asciiz" X -" -s_636: .asciiz" X -" -s_637: .asciiz"XXX -" -s_638: .asciiz" -" -s_639: .asciiz"Would you like to continue with the next generation? -" -s_640: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_641: .asciiz" -" -s_642: .asciiz" -" -s_643: .asciiz"Would you like to choose a background pattern? -" -s_644: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_645: .asciiz"Please chose a number: -" -s_646: .asciiz" 1: A cross -" -s_647: .asciiz" 2: A slash from the upper left to lower right -" -s_648: .asciiz" 3: A slash from the upper right to lower left -" -s_649: .asciiz" 4: An X -" -s_650: .asciiz" 5: A greater than sign -" -s_651: .asciiz" 6: A less than sign -" -s_652: .asciiz" 7: Two greater than signs -" -s_653: .asciiz" 8: Two less than signs -" -s_654: .asciiz" 9: A 'V' -" -s_655: .asciiz" 10: An inverse 'V' -" -s_656: .asciiz" 11: Numbers 9 and 10 combined -" -s_657: .asciiz" 12: A full grid -" -s_658: .asciiz" 13: A 'T' -" -s_659: .asciiz" 14: A plus '+' -" -s_660: .asciiz" 15: A 'W' -" -s_661: .asciiz" 16: An 'M' -" -s_662: .asciiz" 17: An 'E' -" -s_663: .asciiz" 18: A '3' -" -s_664: .asciiz" 19: An 'O' -" -s_665: .asciiz" 20: An '8' -" -s_666: .asciiz" 21: An 'S' -" -s_667: .asciiz"Your choice => -" -s_668: .asciiz" -" -s_669: .asciiz" XX -" -s_670: .asciiz"X X -" -s_671: .asciiz"X X -" -s_672: .asciiz" XX -" -s_673: .asciiz" -" -s_674: .asciiz"Would you like to continue with the next generation? -" -s_675: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_676: .asciiz" -" -s_677: .asciiz" -" -s_678: .asciiz"Would you like to choose a background pattern? -" -s_679: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_680: .asciiz"Please chose a number: -" -s_681: .asciiz" 1: A cross -" -s_682: .asciiz" 2: A slash from the upper left to lower right -" -s_683: .asciiz" 3: A slash from the upper right to lower left -" -s_684: .asciiz" 4: An X -" -s_685: .asciiz" 5: A greater than sign -" -s_686: .asciiz" 6: A less than sign -" -s_687: .asciiz" 7: Two greater than signs -" -s_688: .asciiz" 8: Two less than signs -" -s_689: .asciiz" 9: A 'V' -" -s_690: .asciiz" 10: An inverse 'V' -" -s_691: .asciiz" 11: Numbers 9 and 10 combined -" -s_692: .asciiz" 12: A full grid -" -s_693: .asciiz" 13: A 'T' -" -s_694: .asciiz" 14: A plus '+' -" -s_695: .asciiz" 15: A 'W' -" -s_696: .asciiz" 16: An 'M' -" -s_697: .asciiz" 17: An 'E' -" -s_698: .asciiz" 18: A '3' -" -s_699: .asciiz" 19: An 'O' -" -s_700: .asciiz" 20: An '8' -" -s_701: .asciiz" 21: An 'S' -" -s_702: .asciiz"Your choice => -" -s_703: .asciiz" -" -s_704: .asciiz" XX -" -s_705: .asciiz"X X -" -s_706: .asciiz"X X -" -s_707: .asciiz" XX -" -s_708: .asciiz"X X -" -s_709: .asciiz"X X -" -s_710: .asciiz" XX -" -s_711: .asciiz" -" -s_712: .asciiz"Would you like to continue with the next generation? -" -s_713: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_714: .asciiz" -" -s_715: .asciiz" -" -s_716: .asciiz"Would you like to choose a background pattern? -" -s_717: .asciiz"Please use lowercase y or n for your answer [n]: -" -s_718: .asciiz"Please chose a number: -" -s_719: .asciiz" 1: A cross -" -s_720: .asciiz" 2: A slash from the upper left to lower right -" -s_721: .asciiz" 3: A slash from the upper right to lower left -" -s_722: .asciiz" 4: An X -" -s_723: .asciiz" 5: A greater than sign -" -s_724: .asciiz" 6: A less than sign -" -s_725: .asciiz" 7: Two greater than signs -" -s_726: .asciiz" 8: Two less than signs -" -s_727: .asciiz" 9: A 'V' -" -s_728: .asciiz" 10: An inverse 'V' -" -s_729: .asciiz" 11: Numbers 9 and 10 combined -" -s_730: .asciiz" 12: A full grid -" -s_731: .asciiz" 13: A 'T' -" -s_732: .asciiz" 14: A plus '+' -" -s_733: .asciiz" 15: A 'W' -" -s_734: .asciiz" 16: An 'M' -" -s_735: .asciiz" 17: An 'E' -" -s_736: .asciiz" 18: A '3' -" -s_737: .asciiz" 19: An 'O' -" -s_738: .asciiz" 20: An '8' -" -s_739: .asciiz" 21: An 'S' -" -s_740: .asciiz"Your choice => -" -s_741: .asciiz" -" -s_742: .asciiz" XXX -" -s_743: .asciiz"X -" -s_744: .asciiz"X -" -s_745: .asciiz" XX -" -s_746: .asciiz" X -" -s_747: .asciiz" X -" -s_748: .asciiz"XXX -" -s_749: .asciiz" -" -s_750: .asciiz"Would you like to continue with the next generation? -" -s_751: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_752: .asciiz" -" -s_753: .asciiz"-XX- -" -s_754: .asciiz"X-X- -" -s_755: .asciiz"X--- -" -s_756: .asciiz"-XX- -" -s_757: .asciiz"---X -" -s_758: .asciiz"-X-X -" -s_759: .asciiz"-XX- -" -s_760: .asciiz" -" -s_761: .asciiz"Would you like to continue with the next generation? -" -s_762: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_763: .asciiz" -" -s_764: .asciiz"-XX- -" -s_765: .asciiz"X-X- -" -s_766: .asciiz"X-X- -" -s_767: .asciiz"-XX- -" -s_768: .asciiz"-X-X -" -s_769: .asciiz"-X-X -" -s_770: .asciiz"-XX- -" -s_771: .asciiz" -" -s_772: .asciiz"Would you like to continue with the next generation? -" -s_773: .asciiz"Please use lowercase y or n for your answer [y]: -" -s_774: .asciiz" -" -s_775: .asciiz" -" -s_776: .asciiz"Would you like to choose a background pattern? -" -s_777: .asciiz"Please use lowercase y or n for your answer [n]: " -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 4 -la $a0, s_2 -syscall -li $v0, 4 -la $a0, s_3 -syscall -li $v0, 4 -la $a0, s_4 -syscall -li $v0, 4 -la $a0, s_5 -syscall -li $v0, 4 -la $a0, s_6 -syscall -li $v0, 4 -la $a0, s_7 -syscall -li $v0, 4 -la $a0, s_8 -syscall -li $v0, 4 -la $a0, s_9 -syscall -li $v0, 4 -la $a0, s_10 -syscall -li $v0, 4 -la $a0, s_11 -syscall -li $v0, 4 -la $a0, s_12 -syscall -li $v0, 4 -la $a0, s_13 -syscall -li $v0, 4 -la $a0, s_14 -syscall -li $v0, 4 -la $a0, s_15 -syscall -li $v0, 4 -la $a0, s_16 -syscall -li $v0, 4 -la $a0, s_17 -syscall -li $v0, 4 -la $a0, s_18 -syscall -li $v0, 4 -la $a0, s_19 -syscall -li $v0, 4 -la $a0, s_20 -syscall -li $v0, 4 -la $a0, s_21 -syscall -li $v0, 4 -la $a0, s_22 -syscall -li $v0, 4 -la $a0, s_23 -syscall -li $v0, 4 -la $a0, s_24 -syscall -li $v0, 4 -la $a0, s_25 -syscall -li $v0, 4 -la $a0, s_26 -syscall -li $v0, 4 -la $a0, s_27 -syscall -li $v0, 4 -la $a0, s_28 -syscall -li $v0, 4 -la $a0, s_29 -syscall -li $v0, 4 -la $a0, s_30 -syscall -li $v0, 4 -la $a0, s_31 -syscall -li $v0, 4 -la $a0, s_32 -syscall -li $v0, 4 -la $a0, s_33 -syscall -li $v0, 4 -la $a0, s_34 -syscall -li $v0, 4 -la $a0, s_35 -syscall -li $v0, 4 -la $a0, s_36 -syscall -li $v0, 4 -la $a0, s_37 -syscall -li $v0, 4 -la $a0, s_38 -syscall -li $v0, 4 -la $a0, s_39 -syscall -li $v0, 4 -la $a0, s_40 -syscall -li $v0, 4 -la $a0, s_41 -syscall -li $v0, 4 -la $a0, s_42 -syscall -li $v0, 4 -la $a0, s_43 -syscall -li $v0, 4 -la $a0, s_44 -syscall -li $v0, 4 -la $a0, s_45 -syscall -li $v0, 4 -la $a0, s_46 -syscall -li $v0, 4 -la $a0, s_47 -syscall -li $v0, 4 -la $a0, s_48 -syscall -li $v0, 4 -la $a0, s_49 -syscall -li $v0, 4 -la $a0, s_50 -syscall -li $v0, 4 -la $a0, s_51 -syscall -li $v0, 4 -la $a0, s_52 -syscall -li $v0, 4 -la $a0, s_53 -syscall -li $v0, 4 -la $a0, s_54 -syscall -li $v0, 4 -la $a0, s_55 -syscall -li $v0, 4 -la $a0, s_56 -syscall -li $v0, 4 -la $a0, s_57 -syscall -li $v0, 4 -la $a0, s_58 -syscall -li $v0, 4 -la $a0, s_59 -syscall -li $v0, 4 -la $a0, s_60 -syscall -li $v0, 4 -la $a0, s_61 -syscall -li $v0, 4 -la $a0, s_62 -syscall -li $v0, 4 -la $a0, s_63 -syscall -li $v0, 4 -la $a0, s_64 -syscall -li $v0, 4 -la $a0, s_65 -syscall -li $v0, 4 -la $a0, s_66 -syscall -li $v0, 4 -la $a0, s_67 -syscall -li $v0, 4 -la $a0, s_68 -syscall -li $v0, 4 -la $a0, s_69 -syscall -li $v0, 4 -la $a0, s_70 -syscall -li $v0, 4 -la $a0, s_71 -syscall -li $v0, 4 -la $a0, s_72 -syscall -li $v0, 4 -la $a0, s_73 -syscall -li $v0, 4 -la $a0, s_74 -syscall -li $v0, 4 -la $a0, s_75 -syscall -li $v0, 4 -la $a0, s_76 -syscall -li $v0, 4 -la $a0, s_77 -syscall -li $v0, 4 -la $a0, s_78 -syscall -li $v0, 4 -la $a0, s_79 -syscall -li $v0, 4 -la $a0, s_80 -syscall -li $v0, 4 -la $a0, s_81 -syscall -li $v0, 4 -la $a0, s_82 -syscall -li $v0, 4 -la $a0, s_83 -syscall -li $v0, 4 -la $a0, s_84 -syscall -li $v0, 4 -la $a0, s_85 -syscall -li $v0, 4 -la $a0, s_86 -syscall -li $v0, 4 -la $a0, s_87 -syscall -li $v0, 4 -la $a0, s_88 -syscall -li $v0, 4 -la $a0, s_89 -syscall -li $v0, 4 -la $a0, s_90 -syscall -li $v0, 4 -la $a0, s_91 -syscall -li $v0, 4 -la $a0, s_92 -syscall -li $v0, 4 -la $a0, s_93 -syscall -li $v0, 4 -la $a0, s_94 -syscall -li $v0, 4 -la $a0, s_95 -syscall -li $v0, 4 -la $a0, s_96 -syscall -li $v0, 4 -la $a0, s_97 -syscall -li $v0, 4 -la $a0, s_98 -syscall -li $v0, 4 -la $a0, s_99 -syscall -li $v0, 4 -la $a0, s_100 -syscall -li $v0, 4 -la $a0, s_101 -syscall -li $v0, 4 -la $a0, s_102 -syscall -li $v0, 4 -la $a0, s_103 -syscall -li $v0, 4 -la $a0, s_104 -syscall -li $v0, 4 -la $a0, s_105 -syscall -li $v0, 4 -la $a0, s_106 -syscall -li $v0, 4 -la $a0, s_107 -syscall -li $v0, 4 -la $a0, s_108 -syscall -li $v0, 4 -la $a0, s_109 -syscall -li $v0, 4 -la $a0, s_110 -syscall -li $v0, 4 -la $a0, s_111 -syscall -li $v0, 4 -la $a0, s_112 -syscall -li $v0, 4 -la $a0, s_113 -syscall -li $v0, 4 -la $a0, s_114 -syscall -li $v0, 4 -la $a0, s_115 -syscall -li $v0, 4 -la $a0, s_116 -syscall -li $v0, 4 -la $a0, s_117 -syscall -li $v0, 4 -la $a0, s_118 -syscall -li $v0, 4 -la $a0, s_119 -syscall -li $v0, 4 -la $a0, s_120 -syscall -li $v0, 4 -la $a0, s_121 -syscall -li $v0, 4 -la $a0, s_122 -syscall -li $v0, 4 -la $a0, s_123 -syscall -li $v0, 4 -la $a0, s_124 -syscall -li $v0, 4 -la $a0, s_125 -syscall -li $v0, 4 -la $a0, s_126 -syscall -li $v0, 4 -la $a0, s_127 -syscall -li $v0, 4 -la $a0, s_128 -syscall -li $v0, 4 -la $a0, s_129 -syscall -li $v0, 4 -la $a0, s_130 -syscall -li $v0, 4 -la $a0, s_131 -syscall -li $v0, 4 -la $a0, s_132 -syscall -li $v0, 4 -la $a0, s_133 -syscall -li $v0, 4 -la $a0, s_134 -syscall -li $v0, 4 -la $a0, s_135 -syscall -li $v0, 4 -la $a0, s_136 -syscall -li $v0, 4 -la $a0, s_137 -syscall -li $v0, 4 -la $a0, s_138 -syscall -li $v0, 4 -la $a0, s_139 -syscall -li $v0, 4 -la $a0, s_140 -syscall -li $v0, 4 -la $a0, s_141 -syscall -li $v0, 4 -la $a0, s_142 -syscall -li $v0, 4 -la $a0, s_143 -syscall -li $v0, 4 -la $a0, s_144 -syscall -li $v0, 4 -la $a0, s_145 -syscall -li $v0, 4 -la $a0, s_146 -syscall -li $v0, 4 -la $a0, s_147 -syscall -li $v0, 4 -la $a0, s_148 -syscall -li $v0, 4 -la $a0, s_149 -syscall -li $v0, 4 -la $a0, s_150 -syscall -li $v0, 4 -la $a0, s_151 -syscall -li $v0, 4 -la $a0, s_152 -syscall -li $v0, 4 -la $a0, s_153 -syscall -li $v0, 4 -la $a0, s_154 -syscall -li $v0, 4 -la $a0, s_155 -syscall -li $v0, 4 -la $a0, s_156 -syscall -li $v0, 4 -la $a0, s_157 -syscall -li $v0, 4 -la $a0, s_158 -syscall -li $v0, 4 -la $a0, s_159 -syscall -li $v0, 4 -la $a0, s_160 -syscall -li $v0, 4 -la $a0, s_161 -syscall -li $v0, 4 -la $a0, s_162 -syscall -li $v0, 4 -la $a0, s_163 -syscall -li $v0, 4 -la $a0, s_164 -syscall -li $v0, 4 -la $a0, s_165 -syscall -li $v0, 4 -la $a0, s_166 -syscall -li $v0, 4 -la $a0, s_167 -syscall -li $v0, 4 -la $a0, s_168 -syscall -li $v0, 4 -la $a0, s_169 -syscall -li $v0, 4 -la $a0, s_170 -syscall -li $v0, 4 -la $a0, s_171 -syscall -li $v0, 4 -la $a0, s_172 -syscall -li $v0, 4 -la $a0, s_173 -syscall -li $v0, 4 -la $a0, s_174 -syscall -li $v0, 4 -la $a0, s_175 -syscall -li $v0, 4 -la $a0, s_176 -syscall -li $v0, 4 -la $a0, s_177 -syscall -li $v0, 4 -la $a0, s_178 -syscall -li $v0, 4 -la $a0, s_179 -syscall -li $v0, 4 -la $a0, s_180 -syscall -li $v0, 4 -la $a0, s_181 -syscall -li $v0, 4 -la $a0, s_182 -syscall -li $v0, 4 -la $a0, s_183 -syscall -li $v0, 4 -la $a0, s_184 -syscall -li $v0, 4 -la $a0, s_185 -syscall -li $v0, 4 -la $a0, s_186 -syscall -li $v0, 4 -la $a0, s_187 -syscall -li $v0, 4 -la $a0, s_188 -syscall -li $v0, 4 -la $a0, s_189 -syscall -li $v0, 4 -la $a0, s_190 -syscall -li $v0, 4 -la $a0, s_191 -syscall -li $v0, 4 -la $a0, s_192 -syscall -li $v0, 4 -la $a0, s_193 -syscall -li $v0, 4 -la $a0, s_194 -syscall -li $v0, 4 -la $a0, s_195 -syscall -li $v0, 4 -la $a0, s_196 -syscall -li $v0, 4 -la $a0, s_197 -syscall -li $v0, 4 -la $a0, s_198 -syscall -li $v0, 4 -la $a0, s_199 -syscall -li $v0, 4 -la $a0, s_200 -syscall -li $v0, 4 -la $a0, s_201 -syscall -li $v0, 4 -la $a0, s_202 -syscall -li $v0, 4 -la $a0, s_203 -syscall -li $v0, 4 -la $a0, s_204 -syscall -li $v0, 4 -la $a0, s_205 -syscall -li $v0, 4 -la $a0, s_206 -syscall -li $v0, 4 -la $a0, s_207 -syscall -li $v0, 4 -la $a0, s_208 -syscall -li $v0, 4 -la $a0, s_209 -syscall -li $v0, 4 -la $a0, s_210 -syscall -li $v0, 4 -la $a0, s_211 -syscall -li $v0, 4 -la $a0, s_212 -syscall -li $v0, 4 -la $a0, s_213 -syscall -li $v0, 4 -la $a0, s_214 -syscall -li $v0, 4 -la $a0, s_215 -syscall -li $v0, 4 -la $a0, s_216 -syscall -li $v0, 4 -la $a0, s_217 -syscall -li $v0, 4 -la $a0, s_218 -syscall -li $v0, 4 -la $a0, s_219 -syscall -li $v0, 4 -la $a0, s_220 -syscall -li $v0, 4 -la $a0, s_221 -syscall -li $v0, 4 -la $a0, s_222 -syscall -li $v0, 4 -la $a0, s_223 -syscall -li $v0, 4 -la $a0, s_224 -syscall -li $v0, 4 -la $a0, s_225 -syscall -li $v0, 4 -la $a0, s_226 -syscall -li $v0, 4 -la $a0, s_227 -syscall -li $v0, 4 -la $a0, s_228 -syscall -li $v0, 4 -la $a0, s_229 -syscall -li $v0, 4 -la $a0, s_230 -syscall -li $v0, 4 -la $a0, s_231 -syscall -li $v0, 4 -la $a0, s_232 -syscall -li $v0, 4 -la $a0, s_233 -syscall -li $v0, 4 -la $a0, s_234 -syscall -li $v0, 4 -la $a0, s_235 -syscall -li $v0, 4 -la $a0, s_236 -syscall -li $v0, 4 -la $a0, s_237 -syscall -li $v0, 4 -la $a0, s_238 -syscall -li $v0, 4 -la $a0, s_239 -syscall -li $v0, 4 -la $a0, s_240 -syscall -li $v0, 4 -la $a0, s_241 -syscall -li $v0, 4 -la $a0, s_242 -syscall -li $v0, 4 -la $a0, s_243 -syscall -li $v0, 4 -la $a0, s_244 -syscall -li $v0, 4 -la $a0, s_245 -syscall -li $v0, 4 -la $a0, s_246 -syscall -li $v0, 4 -la $a0, s_247 -syscall -li $v0, 4 -la $a0, s_248 -syscall -li $v0, 4 -la $a0, s_249 -syscall -li $v0, 4 -la $a0, s_250 -syscall -li $v0, 4 -la $a0, s_251 -syscall -li $v0, 4 -la $a0, s_252 -syscall -li $v0, 4 -la $a0, s_253 -syscall -li $v0, 4 -la $a0, s_254 -syscall -li $v0, 4 -la $a0, s_255 -syscall -li $v0, 4 -la $a0, s_256 -syscall -li $v0, 4 -la $a0, s_257 -syscall -li $v0, 4 -la $a0, s_258 -syscall -li $v0, 4 -la $a0, s_259 -syscall -li $v0, 4 -la $a0, s_260 -syscall -li $v0, 4 -la $a0, s_261 -syscall -li $v0, 4 -la $a0, s_262 -syscall -li $v0, 4 -la $a0, s_263 -syscall -li $v0, 4 -la $a0, s_264 -syscall -li $v0, 4 -la $a0, s_265 -syscall -li $v0, 4 -la $a0, s_266 -syscall -li $v0, 4 -la $a0, s_267 -syscall -li $v0, 4 -la $a0, s_268 -syscall -li $v0, 4 -la $a0, s_269 -syscall -li $v0, 4 -la $a0, s_270 -syscall -li $v0, 4 -la $a0, s_271 -syscall -li $v0, 4 -la $a0, s_272 -syscall -li $v0, 4 -la $a0, s_273 -syscall -li $v0, 4 -la $a0, s_274 -syscall -li $v0, 4 -la $a0, s_275 -syscall -li $v0, 4 -la $a0, s_276 -syscall -li $v0, 4 -la $a0, s_277 -syscall -li $v0, 4 -la $a0, s_278 -syscall -li $v0, 4 -la $a0, s_279 -syscall -li $v0, 4 -la $a0, s_280 -syscall -li $v0, 4 -la $a0, s_281 -syscall -li $v0, 4 -la $a0, s_282 -syscall -li $v0, 4 -la $a0, s_283 -syscall -li $v0, 4 -la $a0, s_284 -syscall -li $v0, 4 -la $a0, s_285 -syscall -li $v0, 4 -la $a0, s_286 -syscall -li $v0, 4 -la $a0, s_287 -syscall -li $v0, 4 -la $a0, s_288 -syscall -li $v0, 4 -la $a0, s_289 -syscall -li $v0, 4 -la $a0, s_290 -syscall -li $v0, 4 -la $a0, s_291 -syscall -li $v0, 4 -la $a0, s_292 -syscall -li $v0, 4 -la $a0, s_293 -syscall -li $v0, 4 -la $a0, s_294 -syscall -li $v0, 4 -la $a0, s_295 -syscall -li $v0, 4 -la $a0, s_296 -syscall -li $v0, 4 -la $a0, s_297 -syscall -li $v0, 4 -la $a0, s_298 -syscall -li $v0, 4 -la $a0, s_299 -syscall -li $v0, 4 -la $a0, s_300 -syscall -li $v0, 4 -la $a0, s_301 -syscall -li $v0, 4 -la $a0, s_302 -syscall -li $v0, 4 -la $a0, s_303 -syscall -li $v0, 4 -la $a0, s_304 -syscall -li $v0, 4 -la $a0, s_305 -syscall -li $v0, 4 -la $a0, s_306 -syscall -li $v0, 4 -la $a0, s_307 -syscall -li $v0, 4 -la $a0, s_308 -syscall -li $v0, 4 -la $a0, s_309 -syscall -li $v0, 4 -la $a0, s_310 -syscall -li $v0, 4 -la $a0, s_311 -syscall -li $v0, 4 -la $a0, s_312 -syscall -li $v0, 4 -la $a0, s_313 -syscall -li $v0, 4 -la $a0, s_314 -syscall -li $v0, 4 -la $a0, s_315 -syscall -li $v0, 4 -la $a0, s_316 -syscall -li $v0, 4 -la $a0, s_317 -syscall -li $v0, 4 -la $a0, s_318 -syscall -li $v0, 4 -la $a0, s_319 -syscall -li $v0, 4 -la $a0, s_320 -syscall -li $v0, 4 -la $a0, s_321 -syscall -li $v0, 4 -la $a0, s_322 -syscall -li $v0, 4 -la $a0, s_323 -syscall -li $v0, 4 -la $a0, s_324 -syscall -li $v0, 4 -la $a0, s_325 -syscall -li $v0, 4 -la $a0, s_326 -syscall -li $v0, 4 -la $a0, s_327 -syscall -li $v0, 4 -la $a0, s_328 -syscall -li $v0, 4 -la $a0, s_329 -syscall -li $v0, 4 -la $a0, s_330 -syscall -li $v0, 4 -la $a0, s_331 -syscall -li $v0, 4 -la $a0, s_332 -syscall -li $v0, 4 -la $a0, s_333 -syscall -li $v0, 4 -la $a0, s_334 -syscall -li $v0, 4 -la $a0, s_335 -syscall -li $v0, 4 -la $a0, s_336 -syscall -li $v0, 4 -la $a0, s_337 -syscall -li $v0, 4 -la $a0, s_338 -syscall -li $v0, 4 -la $a0, s_339 -syscall -li $v0, 4 -la $a0, s_340 -syscall -li $v0, 4 -la $a0, s_341 -syscall -li $v0, 4 -la $a0, s_342 -syscall -li $v0, 4 -la $a0, s_343 -syscall -li $v0, 4 -la $a0, s_344 -syscall -li $v0, 4 -la $a0, s_345 -syscall -li $v0, 4 -la $a0, s_346 -syscall -li $v0, 4 -la $a0, s_347 -syscall -li $v0, 4 -la $a0, s_348 -syscall -li $v0, 4 -la $a0, s_349 -syscall -li $v0, 4 -la $a0, s_350 -syscall -li $v0, 4 -la $a0, s_351 -syscall -li $v0, 4 -la $a0, s_352 -syscall -li $v0, 4 -la $a0, s_353 -syscall -li $v0, 4 -la $a0, s_354 -syscall -li $v0, 4 -la $a0, s_355 -syscall -li $v0, 4 -la $a0, s_356 -syscall -li $v0, 4 -la $a0, s_357 -syscall -li $v0, 4 -la $a0, s_358 -syscall -li $v0, 4 -la $a0, s_359 -syscall -li $v0, 4 -la $a0, s_360 -syscall -li $v0, 4 -la $a0, s_361 -syscall -li $v0, 4 -la $a0, s_362 -syscall -li $v0, 4 -la $a0, s_363 -syscall -li $v0, 4 -la $a0, s_364 -syscall -li $v0, 4 -la $a0, s_365 -syscall -li $v0, 4 -la $a0, s_366 -syscall -li $v0, 4 -la $a0, s_367 -syscall -li $v0, 4 -la $a0, s_368 -syscall -li $v0, 4 -la $a0, s_369 -syscall -li $v0, 4 -la $a0, s_370 -syscall -li $v0, 4 -la $a0, s_371 -syscall -li $v0, 4 -la $a0, s_372 -syscall -li $v0, 4 -la $a0, s_373 -syscall -li $v0, 4 -la $a0, s_374 -syscall -li $v0, 4 -la $a0, s_375 -syscall -li $v0, 4 -la $a0, s_376 -syscall -li $v0, 4 -la $a0, s_377 -syscall -li $v0, 4 -la $a0, s_378 -syscall -li $v0, 4 -la $a0, s_379 -syscall -li $v0, 4 -la $a0, s_380 -syscall -li $v0, 4 -la $a0, s_381 -syscall -li $v0, 4 -la $a0, s_382 -syscall -li $v0, 4 -la $a0, s_383 -syscall -li $v0, 4 -la $a0, s_384 -syscall -li $v0, 4 -la $a0, s_385 -syscall -li $v0, 4 -la $a0, s_386 -syscall -li $v0, 4 -la $a0, s_387 -syscall -li $v0, 4 -la $a0, s_388 -syscall -li $v0, 4 -la $a0, s_389 -syscall -li $v0, 4 -la $a0, s_390 -syscall -li $v0, 4 -la $a0, s_391 -syscall -li $v0, 4 -la $a0, s_392 -syscall -li $v0, 4 -la $a0, s_393 -syscall -li $v0, 4 -la $a0, s_394 -syscall -li $v0, 4 -la $a0, s_395 -syscall -li $v0, 4 -la $a0, s_396 -syscall -li $v0, 4 -la $a0, s_397 -syscall -li $v0, 4 -la $a0, s_398 -syscall -li $v0, 4 -la $a0, s_399 -syscall -li $v0, 4 -la $a0, s_400 -syscall -li $v0, 4 -la $a0, s_401 -syscall -li $v0, 4 -la $a0, s_402 -syscall -li $v0, 4 -la $a0, s_403 -syscall -li $v0, 4 -la $a0, s_404 -syscall -li $v0, 4 -la $a0, s_405 -syscall -li $v0, 4 -la $a0, s_406 -syscall -li $v0, 4 -la $a0, s_407 -syscall -li $v0, 4 -la $a0, s_408 -syscall -li $v0, 4 -la $a0, s_409 -syscall -li $v0, 4 -la $a0, s_410 -syscall -li $v0, 4 -la $a0, s_411 -syscall -li $v0, 4 -la $a0, s_412 -syscall -li $v0, 4 -la $a0, s_413 -syscall -li $v0, 4 -la $a0, s_414 -syscall -li $v0, 4 -la $a0, s_415 -syscall -li $v0, 4 -la $a0, s_416 -syscall -li $v0, 4 -la $a0, s_417 -syscall -li $v0, 4 -la $a0, s_418 -syscall -li $v0, 4 -la $a0, s_419 -syscall -li $v0, 4 -la $a0, s_420 -syscall -li $v0, 4 -la $a0, s_421 -syscall -li $v0, 4 -la $a0, s_422 -syscall -li $v0, 4 -la $a0, s_423 -syscall -li $v0, 4 -la $a0, s_424 -syscall -li $v0, 4 -la $a0, s_425 -syscall -li $v0, 4 -la $a0, s_426 -syscall -li $v0, 4 -la $a0, s_427 -syscall -li $v0, 4 -la $a0, s_428 -syscall -li $v0, 4 -la $a0, s_429 -syscall -li $v0, 4 -la $a0, s_430 -syscall -li $v0, 4 -la $a0, s_431 -syscall -li $v0, 4 -la $a0, s_432 -syscall -li $v0, 4 -la $a0, s_433 -syscall -li $v0, 4 -la $a0, s_434 -syscall -li $v0, 4 -la $a0, s_435 -syscall -li $v0, 4 -la $a0, s_436 -syscall -li $v0, 4 -la $a0, s_437 -syscall -li $v0, 4 -la $a0, s_438 -syscall -li $v0, 4 -la $a0, s_439 -syscall -li $v0, 4 -la $a0, s_440 -syscall -li $v0, 4 -la $a0, s_441 -syscall -li $v0, 4 -la $a0, s_442 -syscall -li $v0, 4 -la $a0, s_443 -syscall -li $v0, 4 -la $a0, s_444 -syscall -li $v0, 4 -la $a0, s_445 -syscall -li $v0, 4 -la $a0, s_446 -syscall -li $v0, 4 -la $a0, s_447 -syscall -li $v0, 4 -la $a0, s_448 -syscall -li $v0, 4 -la $a0, s_449 -syscall -li $v0, 4 -la $a0, s_450 -syscall -li $v0, 4 -la $a0, s_451 -syscall -li $v0, 4 -la $a0, s_452 -syscall -li $v0, 4 -la $a0, s_453 -syscall -li $v0, 4 -la $a0, s_454 -syscall -li $v0, 4 -la $a0, s_455 -syscall -li $v0, 4 -la $a0, s_456 -syscall -li $v0, 4 -la $a0, s_457 -syscall -li $v0, 4 -la $a0, s_458 -syscall -li $v0, 4 -la $a0, s_459 -syscall -li $v0, 4 -la $a0, s_460 -syscall -li $v0, 4 -la $a0, s_461 -syscall -li $v0, 4 -la $a0, s_462 -syscall -li $v0, 4 -la $a0, s_463 -syscall -li $v0, 4 -la $a0, s_464 -syscall -li $v0, 4 -la $a0, s_465 -syscall -li $v0, 4 -la $a0, s_466 -syscall -li $v0, 4 -la $a0, s_467 -syscall -li $v0, 4 -la $a0, s_468 -syscall -li $v0, 4 -la $a0, s_469 -syscall -li $v0, 4 -la $a0, s_470 -syscall -li $v0, 4 -la $a0, s_471 -syscall -li $v0, 4 -la $a0, s_472 -syscall -li $v0, 4 -la $a0, s_473 -syscall -li $v0, 4 -la $a0, s_474 -syscall -li $v0, 4 -la $a0, s_475 -syscall -li $v0, 4 -la $a0, s_476 -syscall -li $v0, 4 -la $a0, s_477 -syscall -li $v0, 4 -la $a0, s_478 -syscall -li $v0, 4 -la $a0, s_479 -syscall -li $v0, 4 -la $a0, s_480 -syscall -li $v0, 4 -la $a0, s_481 -syscall -li $v0, 4 -la $a0, s_482 -syscall -li $v0, 4 -la $a0, s_483 -syscall -li $v0, 4 -la $a0, s_484 -syscall -li $v0, 4 -la $a0, s_485 -syscall -li $v0, 4 -la $a0, s_486 -syscall -li $v0, 4 -la $a0, s_487 -syscall -li $v0, 4 -la $a0, s_488 -syscall -li $v0, 4 -la $a0, s_489 -syscall -li $v0, 4 -la $a0, s_490 -syscall -li $v0, 4 -la $a0, s_491 -syscall -li $v0, 4 -la $a0, s_492 -syscall -li $v0, 4 -la $a0, s_493 -syscall -li $v0, 4 -la $a0, s_494 -syscall -li $v0, 4 -la $a0, s_495 -syscall -li $v0, 4 -la $a0, s_496 -syscall -li $v0, 4 -la $a0, s_497 -syscall -li $v0, 4 -la $a0, s_498 -syscall -li $v0, 4 -la $a0, s_499 -syscall -li $v0, 4 -la $a0, s_500 -syscall -li $v0, 4 -la $a0, s_501 -syscall -li $v0, 4 -la $a0, s_502 -syscall -li $v0, 4 -la $a0, s_503 -syscall -li $v0, 4 -la $a0, s_504 -syscall -li $v0, 4 -la $a0, s_505 -syscall -li $v0, 4 -la $a0, s_506 -syscall -li $v0, 4 -la $a0, s_507 -syscall -li $v0, 4 -la $a0, s_508 -syscall -li $v0, 4 -la $a0, s_509 -syscall -li $v0, 4 -la $a0, s_510 -syscall -li $v0, 4 -la $a0, s_511 -syscall -li $v0, 4 -la $a0, s_512 -syscall -li $v0, 4 -la $a0, s_513 -syscall -li $v0, 4 -la $a0, s_514 -syscall -li $v0, 4 -la $a0, s_515 -syscall -li $v0, 4 -la $a0, s_516 -syscall -li $v0, 4 -la $a0, s_517 -syscall -li $v0, 4 -la $a0, s_518 -syscall -li $v0, 4 -la $a0, s_519 -syscall -li $v0, 4 -la $a0, s_520 -syscall -li $v0, 4 -la $a0, s_521 -syscall -li $v0, 4 -la $a0, s_522 -syscall -li $v0, 4 -la $a0, s_523 -syscall -li $v0, 4 -la $a0, s_524 -syscall -li $v0, 4 -la $a0, s_525 -syscall -li $v0, 4 -la $a0, s_526 -syscall -li $v0, 4 -la $a0, s_527 -syscall -li $v0, 4 -la $a0, s_528 -syscall -li $v0, 4 -la $a0, s_529 -syscall -li $v0, 4 -la $a0, s_530 -syscall -li $v0, 4 -la $a0, s_531 -syscall -li $v0, 4 -la $a0, s_532 -syscall -li $v0, 4 -la $a0, s_533 -syscall -li $v0, 4 -la $a0, s_534 -syscall -li $v0, 4 -la $a0, s_535 -syscall -li $v0, 4 -la $a0, s_536 -syscall -li $v0, 4 -la $a0, s_537 -syscall -li $v0, 4 -la $a0, s_538 -syscall -li $v0, 4 -la $a0, s_539 -syscall -li $v0, 4 -la $a0, s_540 -syscall -li $v0, 4 -la $a0, s_541 -syscall -li $v0, 4 -la $a0, s_542 -syscall -li $v0, 4 -la $a0, s_543 -syscall -li $v0, 4 -la $a0, s_544 -syscall -li $v0, 4 -la $a0, s_545 -syscall -li $v0, 4 -la $a0, s_546 -syscall -li $v0, 4 -la $a0, s_547 -syscall -li $v0, 4 -la $a0, s_548 -syscall -li $v0, 4 -la $a0, s_549 -syscall -li $v0, 4 -la $a0, s_550 -syscall -li $v0, 4 -la $a0, s_551 -syscall -li $v0, 4 -la $a0, s_552 -syscall -li $v0, 4 -la $a0, s_553 -syscall -li $v0, 4 -la $a0, s_554 -syscall -li $v0, 4 -la $a0, s_555 -syscall -li $v0, 4 -la $a0, s_556 -syscall -li $v0, 4 -la $a0, s_557 -syscall -li $v0, 4 -la $a0, s_558 -syscall -li $v0, 4 -la $a0, s_559 -syscall -li $v0, 4 -la $a0, s_560 -syscall -li $v0, 4 -la $a0, s_561 -syscall -li $v0, 4 -la $a0, s_562 -syscall -li $v0, 4 -la $a0, s_563 -syscall -li $v0, 4 -la $a0, s_564 -syscall -li $v0, 4 -la $a0, s_565 -syscall -li $v0, 4 -la $a0, s_566 -syscall -li $v0, 4 -la $a0, s_567 -syscall -li $v0, 4 -la $a0, s_568 -syscall -li $v0, 4 -la $a0, s_569 -syscall -li $v0, 4 -la $a0, s_570 -syscall -li $v0, 4 -la $a0, s_571 -syscall -li $v0, 4 -la $a0, s_572 -syscall -li $v0, 4 -la $a0, s_573 -syscall -li $v0, 4 -la $a0, s_574 -syscall -li $v0, 4 -la $a0, s_575 -syscall -li $v0, 4 -la $a0, s_576 -syscall -li $v0, 4 -la $a0, s_577 -syscall -li $v0, 4 -la $a0, s_578 -syscall -li $v0, 4 -la $a0, s_579 -syscall -li $v0, 4 -la $a0, s_580 -syscall -li $v0, 4 -la $a0, s_581 -syscall -li $v0, 4 -la $a0, s_582 -syscall -li $v0, 4 -la $a0, s_583 -syscall -li $v0, 4 -la $a0, s_584 -syscall -li $v0, 4 -la $a0, s_585 -syscall -li $v0, 4 -la $a0, s_586 -syscall -li $v0, 4 -la $a0, s_587 -syscall -li $v0, 4 -la $a0, s_588 -syscall -li $v0, 4 -la $a0, s_589 -syscall -li $v0, 4 -la $a0, s_590 -syscall -li $v0, 4 -la $a0, s_591 -syscall -li $v0, 4 -la $a0, s_592 -syscall -li $v0, 4 -la $a0, s_593 -syscall -li $v0, 4 -la $a0, s_594 -syscall -li $v0, 4 -la $a0, s_595 -syscall -li $v0, 4 -la $a0, s_596 -syscall -li $v0, 4 -la $a0, s_597 -syscall -li $v0, 4 -la $a0, s_598 -syscall -li $v0, 4 -la $a0, s_599 -syscall -li $v0, 4 -la $a0, s_600 -syscall -li $v0, 4 -la $a0, s_601 -syscall -li $v0, 4 -la $a0, s_602 -syscall -li $v0, 4 -la $a0, s_603 -syscall -li $v0, 4 -la $a0, s_604 -syscall -li $v0, 4 -la $a0, s_605 -syscall -li $v0, 4 -la $a0, s_606 -syscall -li $v0, 4 -la $a0, s_607 -syscall -li $v0, 4 -la $a0, s_608 -syscall -li $v0, 4 -la $a0, s_609 -syscall -li $v0, 4 -la $a0, s_610 -syscall -li $v0, 4 -la $a0, s_611 -syscall -li $v0, 4 -la $a0, s_612 -syscall -li $v0, 4 -la $a0, s_613 -syscall -li $v0, 4 -la $a0, s_614 -syscall -li $v0, 4 -la $a0, s_615 -syscall -li $v0, 4 -la $a0, s_616 -syscall -li $v0, 4 -la $a0, s_617 -syscall -li $v0, 4 -la $a0, s_618 -syscall -li $v0, 4 -la $a0, s_619 -syscall -li $v0, 4 -la $a0, s_620 -syscall -li $v0, 4 -la $a0, s_621 -syscall -li $v0, 4 -la $a0, s_622 -syscall -li $v0, 4 -la $a0, s_623 -syscall -li $v0, 4 -la $a0, s_624 -syscall -li $v0, 4 -la $a0, s_625 -syscall -li $v0, 4 -la $a0, s_626 -syscall -li $v0, 4 -la $a0, s_627 -syscall -li $v0, 4 -la $a0, s_628 -syscall -li $v0, 4 -la $a0, s_629 -syscall -li $v0, 4 -la $a0, s_630 -syscall -li $v0, 4 -la $a0, s_631 -syscall -li $v0, 4 -la $a0, s_632 -syscall -li $v0, 4 -la $a0, s_633 -syscall -li $v0, 4 -la $a0, s_634 -syscall -li $v0, 4 -la $a0, s_635 -syscall -li $v0, 4 -la $a0, s_636 -syscall -li $v0, 4 -la $a0, s_637 -syscall -li $v0, 4 -la $a0, s_638 -syscall -li $v0, 4 -la $a0, s_639 -syscall -li $v0, 4 -la $a0, s_640 -syscall -li $v0, 4 -la $a0, s_641 -syscall -li $v0, 4 -la $a0, s_642 -syscall -li $v0, 4 -la $a0, s_643 -syscall -li $v0, 4 -la $a0, s_644 -syscall -li $v0, 4 -la $a0, s_645 -syscall -li $v0, 4 -la $a0, s_646 -syscall -li $v0, 4 -la $a0, s_647 -syscall -li $v0, 4 -la $a0, s_648 -syscall -li $v0, 4 -la $a0, s_649 -syscall -li $v0, 4 -la $a0, s_650 -syscall -li $v0, 4 -la $a0, s_651 -syscall -li $v0, 4 -la $a0, s_652 -syscall -li $v0, 4 -la $a0, s_653 -syscall -li $v0, 4 -la $a0, s_654 -syscall -li $v0, 4 -la $a0, s_655 -syscall -li $v0, 4 -la $a0, s_656 -syscall -li $v0, 4 -la $a0, s_657 -syscall -li $v0, 4 -la $a0, s_658 -syscall -li $v0, 4 -la $a0, s_659 -syscall -li $v0, 4 -la $a0, s_660 -syscall -li $v0, 4 -la $a0, s_661 -syscall -li $v0, 4 -la $a0, s_662 -syscall -li $v0, 4 -la $a0, s_663 -syscall -li $v0, 4 -la $a0, s_664 -syscall -li $v0, 4 -la $a0, s_665 -syscall -li $v0, 4 -la $a0, s_666 -syscall -li $v0, 4 -la $a0, s_667 -syscall -li $v0, 4 -la $a0, s_668 -syscall -li $v0, 4 -la $a0, s_669 -syscall -li $v0, 4 -la $a0, s_670 -syscall -li $v0, 4 -la $a0, s_671 -syscall -li $v0, 4 -la $a0, s_672 -syscall -li $v0, 4 -la $a0, s_673 -syscall -li $v0, 4 -la $a0, s_674 -syscall -li $v0, 4 -la $a0, s_675 -syscall -li $v0, 4 -la $a0, s_676 -syscall -li $v0, 4 -la $a0, s_677 -syscall -li $v0, 4 -la $a0, s_678 -syscall -li $v0, 4 -la $a0, s_679 -syscall -li $v0, 4 -la $a0, s_680 -syscall -li $v0, 4 -la $a0, s_681 -syscall -li $v0, 4 -la $a0, s_682 -syscall -li $v0, 4 -la $a0, s_683 -syscall -li $v0, 4 -la $a0, s_684 -syscall -li $v0, 4 -la $a0, s_685 -syscall -li $v0, 4 -la $a0, s_686 -syscall -li $v0, 4 -la $a0, s_687 -syscall -li $v0, 4 -la $a0, s_688 -syscall -li $v0, 4 -la $a0, s_689 -syscall -li $v0, 4 -la $a0, s_690 -syscall -li $v0, 4 -la $a0, s_691 -syscall -li $v0, 4 -la $a0, s_692 -syscall -li $v0, 4 -la $a0, s_693 -syscall -li $v0, 4 -la $a0, s_694 -syscall -li $v0, 4 -la $a0, s_695 -syscall -li $v0, 4 -la $a0, s_696 -syscall -li $v0, 4 -la $a0, s_697 -syscall -li $v0, 4 -la $a0, s_698 -syscall -li $v0, 4 -la $a0, s_699 -syscall -li $v0, 4 -la $a0, s_700 -syscall -li $v0, 4 -la $a0, s_701 -syscall -li $v0, 4 -la $a0, s_702 -syscall -li $v0, 4 -la $a0, s_703 -syscall -li $v0, 4 -la $a0, s_704 -syscall -li $v0, 4 -la $a0, s_705 -syscall -li $v0, 4 -la $a0, s_706 -syscall -li $v0, 4 -la $a0, s_707 -syscall -li $v0, 4 -la $a0, s_708 -syscall -li $v0, 4 -la $a0, s_709 -syscall -li $v0, 4 -la $a0, s_710 -syscall -li $v0, 4 -la $a0, s_711 -syscall -li $v0, 4 -la $a0, s_712 -syscall -li $v0, 4 -la $a0, s_713 -syscall -li $v0, 4 -la $a0, s_714 -syscall -li $v0, 4 -la $a0, s_715 -syscall -li $v0, 4 -la $a0, s_716 -syscall -li $v0, 4 -la $a0, s_717 -syscall -li $v0, 4 -la $a0, s_718 -syscall -li $v0, 4 -la $a0, s_719 -syscall -li $v0, 4 -la $a0, s_720 -syscall -li $v0, 4 -la $a0, s_721 -syscall -li $v0, 4 -la $a0, s_722 -syscall -li $v0, 4 -la $a0, s_723 -syscall -li $v0, 4 -la $a0, s_724 -syscall -li $v0, 4 -la $a0, s_725 -syscall -li $v0, 4 -la $a0, s_726 -syscall -li $v0, 4 -la $a0, s_727 -syscall -li $v0, 4 -la $a0, s_728 -syscall -li $v0, 4 -la $a0, s_729 -syscall -li $v0, 4 -la $a0, s_730 -syscall -li $v0, 4 -la $a0, s_731 -syscall -li $v0, 4 -la $a0, s_732 -syscall -li $v0, 4 -la $a0, s_733 -syscall -li $v0, 4 -la $a0, s_734 -syscall -li $v0, 4 -la $a0, s_735 -syscall -li $v0, 4 -la $a0, s_736 -syscall -li $v0, 4 -la $a0, s_737 -syscall -li $v0, 4 -la $a0, s_738 -syscall -li $v0, 4 -la $a0, s_739 -syscall -li $v0, 4 -la $a0, s_740 -syscall -li $v0, 4 -la $a0, s_741 -syscall -li $v0, 4 -la $a0, s_742 -syscall -li $v0, 4 -la $a0, s_743 -syscall -li $v0, 4 -la $a0, s_744 -syscall -li $v0, 4 -la $a0, s_745 -syscall -li $v0, 4 -la $a0, s_746 -syscall -li $v0, 4 -la $a0, s_747 -syscall -li $v0, 4 -la $a0, s_748 -syscall -li $v0, 4 -la $a0, s_749 -syscall -li $v0, 4 -la $a0, s_750 -syscall -li $v0, 4 -la $a0, s_751 -syscall -li $v0, 4 -la $a0, s_752 -syscall -li $v0, 4 -la $a0, s_753 -syscall -li $v0, 4 -la $a0, s_754 -syscall -li $v0, 4 -la $a0, s_755 -syscall -li $v0, 4 -la $a0, s_756 -syscall -li $v0, 4 -la $a0, s_757 -syscall -li $v0, 4 -la $a0, s_758 -syscall -li $v0, 4 -la $a0, s_759 -syscall -li $v0, 4 -la $a0, s_760 -syscall -li $v0, 4 -la $a0, s_761 -syscall -li $v0, 4 -la $a0, s_762 -syscall -li $v0, 4 -la $a0, s_763 -syscall -li $v0, 4 -la $a0, s_764 -syscall -li $v0, 4 -la $a0, s_765 -syscall -li $v0, 4 -la $a0, s_766 -syscall -li $v0, 4 -la $a0, s_767 -syscall -li $v0, 4 -la $a0, s_768 -syscall -li $v0, 4 -la $a0, s_769 -syscall -li $v0, 4 -la $a0, s_770 -syscall -li $v0, 4 -la $a0, s_771 -syscall -li $v0, 4 -la $a0, s_772 -syscall -li $v0, 4 -la $a0, s_773 -syscall -li $v0, 4 -la $a0, s_774 -syscall -li $v0, 4 -la $a0, s_775 -syscall -li $v0, 4 -la $a0, s_776 -syscall -li $v0, 4 -la $a0, s_777 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips deleted file mode 100644 index 70749d65..00000000 --- a/tests/codegen/list.mips +++ /dev/null @@ -1,30 +0,0 @@ -.data -s_0: .asciiz"5 4 3 2 1 -" -s_1: .asciiz"4 3 2 1 -" -s_2: .asciiz"3 2 1 -" -s_3: .asciiz"2 1 -" -s_4: .asciiz"1 -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 4 -la $a0, s_2 -syscall -li $v0, 4 -la $a0, s_3 -syscall -li $v0, 4 -la $a0, s_4 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips deleted file mode 100644 index 6917c027..00000000 --- a/tests/codegen/new_complex.mips +++ /dev/null @@ -1,15 +0,0 @@ -.data -s_0: .asciiz"=) -" -s_1: .asciiz"=) -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips deleted file mode 100644 index 41e60682..00000000 --- a/tests/codegen/palindrome.mips +++ /dev/null @@ -1,15 +0,0 @@ -.data -s_0: .asciiz"enter a string -" -s_1: .asciiz"that was a palindrome -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips deleted file mode 100644 index 99bfab34..00000000 --- a/tests/codegen/primes.mips +++ /dev/null @@ -1,485 +0,0 @@ -.data -s_0: .asciiz"2 is trivially prime. -" -s_1: .asciiz"3 is prime. -" -s_2: .asciiz"5 is prime. -" -s_3: .asciiz"7 is prime. -" -s_4: .asciiz"11 is prime. -" -s_5: .asciiz"13 is prime. -" -s_6: .asciiz"17 is prime. -" -s_7: .asciiz"19 is prime. -" -s_8: .asciiz"23 is prime. -" -s_9: .asciiz"29 is prime. -" -s_10: .asciiz"31 is prime. -" -s_11: .asciiz"37 is prime. -" -s_12: .asciiz"41 is prime. -" -s_13: .asciiz"43 is prime. -" -s_14: .asciiz"47 is prime. -" -s_15: .asciiz"53 is prime. -" -s_16: .asciiz"59 is prime. -" -s_17: .asciiz"61 is prime. -" -s_18: .asciiz"67 is prime. -" -s_19: .asciiz"71 is prime. -" -s_20: .asciiz"73 is prime. -" -s_21: .asciiz"79 is prime. -" -s_22: .asciiz"83 is prime. -" -s_23: .asciiz"89 is prime. -" -s_24: .asciiz"97 is prime. -" -s_25: .asciiz"101 is prime. -" -s_26: .asciiz"103 is prime. -" -s_27: .asciiz"107 is prime. -" -s_28: .asciiz"109 is prime. -" -s_29: .asciiz"113 is prime. -" -s_30: .asciiz"127 is prime. -" -s_31: .asciiz"131 is prime. -" -s_32: .asciiz"137 is prime. -" -s_33: .asciiz"139 is prime. -" -s_34: .asciiz"149 is prime. -" -s_35: .asciiz"151 is prime. -" -s_36: .asciiz"157 is prime. -" -s_37: .asciiz"163 is prime. -" -s_38: .asciiz"167 is prime. -" -s_39: .asciiz"173 is prime. -" -s_40: .asciiz"179 is prime. -" -s_41: .asciiz"181 is prime. -" -s_42: .asciiz"191 is prime. -" -s_43: .asciiz"193 is prime. -" -s_44: .asciiz"197 is prime. -" -s_45: .asciiz"199 is prime. -" -s_46: .asciiz"211 is prime. -" -s_47: .asciiz"223 is prime. -" -s_48: .asciiz"227 is prime. -" -s_49: .asciiz"229 is prime. -" -s_50: .asciiz"233 is prime. -" -s_51: .asciiz"239 is prime. -" -s_52: .asciiz"241 is prime. -" -s_53: .asciiz"251 is prime. -" -s_54: .asciiz"257 is prime. -" -s_55: .asciiz"263 is prime. -" -s_56: .asciiz"269 is prime. -" -s_57: .asciiz"271 is prime. -" -s_58: .asciiz"277 is prime. -" -s_59: .asciiz"281 is prime. -" -s_60: .asciiz"283 is prime. -" -s_61: .asciiz"293 is prime. -" -s_62: .asciiz"307 is prime. -" -s_63: .asciiz"311 is prime. -" -s_64: .asciiz"313 is prime. -" -s_65: .asciiz"317 is prime. -" -s_66: .asciiz"331 is prime. -" -s_67: .asciiz"337 is prime. -" -s_68: .asciiz"347 is prime. -" -s_69: .asciiz"349 is prime. -" -s_70: .asciiz"353 is prime. -" -s_71: .asciiz"359 is prime. -" -s_72: .asciiz"367 is prime. -" -s_73: .asciiz"373 is prime. -" -s_74: .asciiz"379 is prime. -" -s_75: .asciiz"383 is prime. -" -s_76: .asciiz"389 is prime. -" -s_77: .asciiz"397 is prime. -" -s_78: .asciiz"401 is prime. -" -s_79: .asciiz"409 is prime. -" -s_80: .asciiz"419 is prime. -" -s_81: .asciiz"421 is prime. -" -s_82: .asciiz"431 is prime. -" -s_83: .asciiz"433 is prime. -" -s_84: .asciiz"439 is prime. -" -s_85: .asciiz"443 is prime. -" -s_86: .asciiz"449 is prime. -" -s_87: .asciiz"457 is prime. -" -s_88: .asciiz"461 is prime. -" -s_89: .asciiz"463 is prime. -" -s_90: .asciiz"467 is prime. -" -s_91: .asciiz"479 is prime. -" -s_92: .asciiz"487 is prime. -" -s_93: .asciiz"491 is prime. -" -s_94: .asciiz"499 is prime. -" -s_95: .asciiz"Abort called from class String -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 4 -la $a0, s_2 -syscall -li $v0, 4 -la $a0, s_3 -syscall -li $v0, 4 -la $a0, s_4 -syscall -li $v0, 4 -la $a0, s_5 -syscall -li $v0, 4 -la $a0, s_6 -syscall -li $v0, 4 -la $a0, s_7 -syscall -li $v0, 4 -la $a0, s_8 -syscall -li $v0, 4 -la $a0, s_9 -syscall -li $v0, 4 -la $a0, s_10 -syscall -li $v0, 4 -la $a0, s_11 -syscall -li $v0, 4 -la $a0, s_12 -syscall -li $v0, 4 -la $a0, s_13 -syscall -li $v0, 4 -la $a0, s_14 -syscall -li $v0, 4 -la $a0, s_15 -syscall -li $v0, 4 -la $a0, s_16 -syscall -li $v0, 4 -la $a0, s_17 -syscall -li $v0, 4 -la $a0, s_18 -syscall -li $v0, 4 -la $a0, s_19 -syscall -li $v0, 4 -la $a0, s_20 -syscall -li $v0, 4 -la $a0, s_21 -syscall -li $v0, 4 -la $a0, s_22 -syscall -li $v0, 4 -la $a0, s_23 -syscall -li $v0, 4 -la $a0, s_24 -syscall -li $v0, 4 -la $a0, s_25 -syscall -li $v0, 4 -la $a0, s_26 -syscall -li $v0, 4 -la $a0, s_27 -syscall -li $v0, 4 -la $a0, s_28 -syscall -li $v0, 4 -la $a0, s_29 -syscall -li $v0, 4 -la $a0, s_30 -syscall -li $v0, 4 -la $a0, s_31 -syscall -li $v0, 4 -la $a0, s_32 -syscall -li $v0, 4 -la $a0, s_33 -syscall -li $v0, 4 -la $a0, s_34 -syscall -li $v0, 4 -la $a0, s_35 -syscall -li $v0, 4 -la $a0, s_36 -syscall -li $v0, 4 -la $a0, s_37 -syscall -li $v0, 4 -la $a0, s_38 -syscall -li $v0, 4 -la $a0, s_39 -syscall -li $v0, 4 -la $a0, s_40 -syscall -li $v0, 4 -la $a0, s_41 -syscall -li $v0, 4 -la $a0, s_42 -syscall -li $v0, 4 -la $a0, s_43 -syscall -li $v0, 4 -la $a0, s_44 -syscall -li $v0, 4 -la $a0, s_45 -syscall -li $v0, 4 -la $a0, s_46 -syscall -li $v0, 4 -la $a0, s_47 -syscall -li $v0, 4 -la $a0, s_48 -syscall -li $v0, 4 -la $a0, s_49 -syscall -li $v0, 4 -la $a0, s_50 -syscall -li $v0, 4 -la $a0, s_51 -syscall -li $v0, 4 -la $a0, s_52 -syscall -li $v0, 4 -la $a0, s_53 -syscall -li $v0, 4 -la $a0, s_54 -syscall -li $v0, 4 -la $a0, s_55 -syscall -li $v0, 4 -la $a0, s_56 -syscall -li $v0, 4 -la $a0, s_57 -syscall -li $v0, 4 -la $a0, s_58 -syscall -li $v0, 4 -la $a0, s_59 -syscall -li $v0, 4 -la $a0, s_60 -syscall -li $v0, 4 -la $a0, s_61 -syscall -li $v0, 4 -la $a0, s_62 -syscall -li $v0, 4 -la $a0, s_63 -syscall -li $v0, 4 -la $a0, s_64 -syscall -li $v0, 4 -la $a0, s_65 -syscall -li $v0, 4 -la $a0, s_66 -syscall -li $v0, 4 -la $a0, s_67 -syscall -li $v0, 4 -la $a0, s_68 -syscall -li $v0, 4 -la $a0, s_69 -syscall -li $v0, 4 -la $a0, s_70 -syscall -li $v0, 4 -la $a0, s_71 -syscall -li $v0, 4 -la $a0, s_72 -syscall -li $v0, 4 -la $a0, s_73 -syscall -li $v0, 4 -la $a0, s_74 -syscall -li $v0, 4 -la $a0, s_75 -syscall -li $v0, 4 -la $a0, s_76 -syscall -li $v0, 4 -la $a0, s_77 -syscall -li $v0, 4 -la $a0, s_78 -syscall -li $v0, 4 -la $a0, s_79 -syscall -li $v0, 4 -la $a0, s_80 -syscall -li $v0, 4 -la $a0, s_81 -syscall -li $v0, 4 -la $a0, s_82 -syscall -li $v0, 4 -la $a0, s_83 -syscall -li $v0, 4 -la $a0, s_84 -syscall -li $v0, 4 -la $a0, s_85 -syscall -li $v0, 4 -la $a0, s_86 -syscall -li $v0, 4 -la $a0, s_87 -syscall -li $v0, 4 -la $a0, s_88 -syscall -li $v0, 4 -la $a0, s_89 -syscall -li $v0, 4 -la $a0, s_90 -syscall -li $v0, 4 -la $a0, s_91 -syscall -li $v0, 4 -la $a0, s_92 -syscall -li $v0, 4 -la $a0, s_93 -syscall -li $v0, 4 -la $a0, s_94 -syscall -li $v0, 4 -la $a0, s_95 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips deleted file mode 100644 index 11a88655..00000000 --- a/tests/codegen/print-cool.mips +++ /dev/null @@ -1,10 +0,0 @@ -.data -s_0: .asciiz"cool -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 10 -syscall diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips deleted file mode 100644 index f2bb64d4..00000000 --- a/tests/codegen/sort-list.mips +++ /dev/null @@ -1,55 +0,0 @@ -.data -s_0: .asciiz"How many numbers to sort? 0 -" -s_1: .asciiz"1 -" -s_2: .asciiz"2 -" -s_3: .asciiz"3 -" -s_4: .asciiz"4 -" -s_5: .asciiz"5 -" -s_6: .asciiz"6 -" -s_7: .asciiz"7 -" -s_8: .asciiz"8 -" -s_9: .asciiz"9 -" -.text -main: -li $v0, 4 -la $a0, s_0 -syscall -li $v0, 4 -la $a0, s_1 -syscall -li $v0, 4 -la $a0, s_2 -syscall -li $v0, 4 -la $a0, s_3 -syscall -li $v0, 4 -la $a0, s_4 -syscall -li $v0, 4 -la $a0, s_5 -syscall -li $v0, 4 -la $a0, s_6 -syscall -li $v0, 4 -la $a0, s_7 -syscall -li $v0, 4 -la $a0, s_8 -syscall -li $v0, 4 -la $a0, s_9 -syscall -li $v0, 10 -syscall From 199e476b2d6d5571d51c118ac0c12fe45cde4c80 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Fri, 11 Dec 2020 17:22:25 -0500 Subject: [PATCH 114/140] more changes --- src/code_generation/statics/String.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code_generation/statics/String.s b/src/code_generation/statics/String.s index e052bf3d..8171e160 100644 --- a/src/code_generation/statics/String.s +++ b/src/code_generation/statics/String.s @@ -62,8 +62,8 @@ syscall move $v1, $v0 lw $a0, -4($sp) lw $a1, -8($sp) -add $a0, $a0, $a1 lw $a2, -12($sp) +add $a2, $a2, $a1 _stringsubstr.loop: beqz $a2, _stringsubstr.end lb $a1, 0($a0) From 856a31c70371ef0673bb6e597708ae319c91aecd Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Fri, 11 Dec 2020 18:24:03 -0500 Subject: [PATCH 115/140] add semantic scope to transpilator --- src/main.py | 3 +- src/visitors/transpilator.py | 145 ++++---- tests/codegen/hello_world.mips | 622 +++++++++++++++++++++++++++++++++ 3 files changed, 701 insertions(+), 69 deletions(-) create mode 100644 tests/codegen/hello_world.mips diff --git a/src/main.py b/src/main.py index c6fb631c..3fa7ab20 100644 --- a/src/main.py +++ b/src/main.py @@ -24,6 +24,7 @@ def main(): pipeline.submit_state(VarCollector('VCollector')) pipeline.submit_state(TypeChecker('TChecker')) + ast, context, scope = None, None, None #temporal try: ast, context, scope = pipeline.run_pipeline(program) @@ -36,7 +37,7 @@ def main(): exit(1) else: cv = codeVisitor(context) - cil_ast = cv.visit(ast) + cil_ast = cv.visit(ast, None, scope) mips = MIPS() code = mips.visit(cil_ast) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 63dc02ce..9191fa9a 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -350,7 +350,7 @@ def visit(self, node, scope): pass @visitor.when(ProgramNode) - def visit(self, node, scope = None): + def visit(self, node, scope, sscope): if not scope: scope = ScopeCIL() @@ -377,12 +377,12 @@ def visit(self, node, scope = None): self.build_string_equals_function(scope) for klass in node.declarations: - self.visit(klass, scope.create_child()) + self.visit(klass, scope.create_child(), sscope.cls_scopes[klass.id]) return ProgramNodeIL(self.dottypes, self.dotdata, self.dotcode) @visitor.when(ClassDeclarationNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): self.current_type = self.context.get_type(node.id) #Handle all the .TYPE section @@ -412,17 +412,19 @@ def visit(self, node, scope): self.register_instruction(ReturnNodeIL(None)) for attr in attr_declarations: - self.visit(attr, scope) + self.visit(attr, scope, sscope) #--------------------------------------------------------------- self.current_function = None for feature in func_declarations: - self.visit(feature, scope.create_child()) + self.visit(feature, scope.create_child(), sscope) self.current_type = None @visitor.when(FuncDeclarationNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): + fscope = sscope.func_scopes[node.id] + self.current_method = self.current_type.get_method(node.id) self.dottypes[self.current_type.name].methods[node.id] = f'{self.current_type.name}.{node.id}' cil_method_name = self.to_function_name(node.id, self.current_type.name) @@ -432,13 +434,14 @@ def visit(self, node, scope): for p in node.params: self.register_param(VariableInfo(p.id, p.type)) - value = self.visit(node.body, scope) + value = self.visit(node.body, scope, fscope) self.register_instruction(ReturnNodeIL(value)) self.current_method = None @visitor.when(AttrDeclarationNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): + ascope = sscope.attr_scopes[node.id] instance = None if node.type in ['Int', 'Bool']: @@ -459,13 +462,13 @@ def visit(self, node, scope): self.register_instruction(SetAttribNodeIL('self', node.id,instance, self.current_type.name)) @visitor.when(VarDeclarationNode) - def visit(self, node, scope): - expr = self.visit(node.expr, scope) + def visit(self, node, scope, sscope): + expr = self.visit(node.expr, scope, sscope) self.register_instruction(SetAttribNodeIL('self', node.name, expr, self.current_type.name)) @visitor.when(AssignNode) - def visit(self, node, scope): - expr_local = self.visit(node.expr, scope) + def visit(self, node, scope, sscope): + expr_local = self.visit(node.expr, scope, sscope) result_local = self.define_internal_local(scope=scope, name = "result" ) cil_node_name = scope.find_cil_local(node.id) @@ -479,16 +482,16 @@ def visit(self, node, scope): return expr_local @visitor.when(BlockNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): for e in node.expr_list: - result_local = self.visit(e, scope) + result_local = self.visit(e, scope, sscope) return result_local @visitor.when(ConditionalNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name = "result") - cond_value = self.visit(node.cond, scope) + cond_value = self.visit(node.cond, scope, sscope) if_then_label = self.get_label() self.register_instruction(GotoNodeIL(cond_value, if_then_label)) @@ -507,19 +510,19 @@ def visit(self, node, scope): return result_local @visitor.when(WhileNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope = scope, name = "result") loop_init_label = self.get_label() loop_body_label = self.get_label() loop_end_label = self.get_label() self.register_instruction(LabelNodeIL(loop_init_label)) - pred_value = self.visit(node.cond, scope) + pred_value = self.visit(node.cond, scope, sscope) self.register_instruction(GotoNodeIL(pred_value, loop_body_label)) self.register_instruction(GotoNodeIL(loop_end_label)) self.register_instruction(LabelNodeIL(loop_body_label)) - body_value = self.visit(node.expr, scope) + body_value = self.visit(node.expr, scope, sscope) self.register_instruction(GotoNodeIL(loop_init_label)) self.register_instruction(LabelNodeIL(loop_end_label)) @@ -527,13 +530,13 @@ def visit(self, node, scope): return result_local @visitor.when(ExprCallNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope = scope, name = "result") - expr_value = self.visit(node.obj, scope) + expr_value = self.visit(node.obj, scope, sscope) call_args = [] for arg in reversed(node.args): - param_local = self.visit(arg, scope) + param_local = self.visit(arg, scope, sscope) call_args.append(ArgNodeIL(param_local)) call_args.append(ArgNodeIL(expr_value)) @@ -549,13 +552,13 @@ def visit(self, node, scope): return result_local @visitor.when(ParentCallNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope = scope, name = "result") - expr_value = self.visit(node.obj, scope) + expr_value = self.visit(node.obj, scope, sscope) call_args = [] for arg in reversed(node.args): - param_local = self.visit(arg, scope) + param_local = self.visit(arg, scope, sscope) call_args.append(ArgNodeIL(param_local)) call_args.append(ArgNodeIL(expr_value)) @@ -569,19 +572,23 @@ def visit(self, node, scope): return result_local @visitor.when(LetNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): + chld_scope = sscope.expr_dict[node] + iscope = chld_scope + let_scope = scope.create_child() for var in node.init_list: - self.visit(var, let_scope) + self.visit(var, let_scope, iscope) + iscope = iscope.children[0] - body_value = self.visit(node.expr, let_scope) + body_value = self.visit(node.expr, let_scope, iscope) result_local = self.define_internal_local(scope = scope, name = "let_result") self.register_instruction(AssignNodeIL(result_local, body_value)) return result_local @visitor.when(LetDeclarationNode) - def visit(self, node, scope): - expr_value = self.visit(node.expr, scope) + def visit(self, node, scope, sscope): + expr_value = self.visit(node.expr, scope, sscope) var_init = self.define_internal_local(scope = scope, name = node.id, cool_var_name= node.id) self.register_instruction(AssignNodeIL(var_init, expr_value)) return var_init @@ -611,10 +618,12 @@ def visit(self, node, scope): @visitor.when(CaseNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope = scope, name = "result") case_expr = self.visit(node.expr, scope) + nscope = sscope.expr_dict[node] + exit_label = self.get_label() label = self.get_label() @@ -622,13 +631,13 @@ def visit(self, node, scope): tag_lst = [] option_dict = {} - for option in node.case_list: + for option, c_scp in zip(node.case_list, nscope.children): tag = self.context.get_type(option.typex).name - tag_lst.append(tag) + tag_lst.append( (tag, c_scp) ) option_dict[tag] = option tag_lst.sort() - for t in reversed(tag_lst): + for t, c_scp in reversed(tag_lst): option = option_dict[t] self.register_instruction(LabelNodeIL(label)) label = self.get_label() @@ -640,7 +649,7 @@ def visit(self, node, scope): option_scope = scope.create_child() option_id = self.define_internal_local(scope=option_scope, name=option.id, cool_var_name=option.id) self.register_instruction(AssignNodeIL(option_id, case_expr)) - expr_result = self.visit(option.expr, option_scope) + expr_result = self.visit(option.expr, option_scope, c_scp) self.register_instruction(AssignNodeIL(result_local, expr_result)) self.register_instruction(GotoNodeIL(exit_label)) @@ -651,11 +660,11 @@ def visit(self, node, scope): return result_local @visitor.when(OptionNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): pass @visitor.when(NewNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name="result") result_init = self.define_internal_local(scope=scope, name="init") @@ -673,8 +682,8 @@ def visit(self, node, scope): return result_local @visitor.when(IsVoidNode) - def visit(self, node, scope): - expre_value = self.visit(node.expr, scope) + def visit(self, node, scope, sscope): + expre_value = self.visit(node.expr, scope, sscope) result_local = self.define_internal_local(scope=scope, name ="isvoid_result") self.register_instruction(IsVoidNodeIL(result_local, expre_value)) instance = self.define_internal_local(scope=scope, name="instance") @@ -684,14 +693,14 @@ def visit(self, node, scope): return instance @visitor.when(SumNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") right_local = self.define_internal_local(scope=scope, name = "right") - left_value = self.visit(node.left, scope) - right_value = self.visit(node.right, scope) + left_value = self.visit(node.left, scope, sscope) + right_value = self.visit(node.right, scope, sscope) # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) @@ -709,14 +718,14 @@ def visit(self, node, scope): return result_local @visitor.when(DiffNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") right_local = self.define_internal_local(scope=scope, name = "right") - left_value = self.visit(node.left, scope) - right_value = self.visit(node.right, scope) + left_value = self.visit(node.left, scope, sscope) + right_value = self.visit(node.right, scope, sscope) # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) @@ -734,14 +743,14 @@ def visit(self, node, scope): return result_local @visitor.when(StarNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") right_local = self.define_internal_local(scope=scope, name = "right") - left_value = self.visit(node.left, scope) - right_value = self.visit(node.right, scope) + left_value = self.visit(node.left, scope, sscope) + right_value = self.visit(node.right, scope, sscope) # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) @@ -759,14 +768,14 @@ def visit(self, node, scope): return result_local @visitor.when(DivNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") right_local = self.define_internal_local(scope=scope, name = "right") - left_value = self.visit(node.left, scope) - right_value = self.visit(node.right, scope) + left_value = self.visit(node.left, scope, sscope) + right_value = self.visit(node.right, scope, sscope) # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) @@ -784,12 +793,12 @@ def visit(self, node, scope): return result_local @visitor.when(BitNotNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") expr_local = self.define_internal_local(scope=scope) - expr_value = self.visit(node.expr, scope) + expr_value = self.visit(node.expr, scope, sscope) # self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", node.expr.computed_type.name)) self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", None)) @@ -803,12 +812,12 @@ def visit(self, node, scope): return result_local @visitor.when(NotNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") expr_local = self.define_internal_local(scope=scope) - expr_value = self.visit(node.expr, scope) + expr_value = self.visit(node.expr, scope, sscope) # self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", node.expr.computed_type.name)) self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", None)) @@ -822,14 +831,14 @@ def visit(self, node, scope): return result_local @visitor.when(LessNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") right_local = self.define_internal_local(scope=scope, name = "right") - left_value = self.visit(node.left, scope) - right_value = self.visit(node.right, scope) + left_value = self.visit(node.left, scope, sscope) + right_value = self.visit(node.right, scope, sscope) # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) @@ -846,14 +855,14 @@ def visit(self, node, scope): return result_local @visitor.when(LessEqualNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") right_local = self.define_internal_local(scope=scope, name = "right") - left_value = self.visit(node.left, scope) - right_value = self.visit(node.right, scope) + left_value = self.visit(node.left, scope, sscope) + right_value = self.visit(node.right, scope, sscope) # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) @@ -871,7 +880,7 @@ def visit(self, node, scope): return result_local @visitor.when(EqualNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): print('----got in equalss----') result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") @@ -879,8 +888,8 @@ def visit(self, node, scope): right_local = self.define_internal_local(scope=scope, name = "right") # print('left: ', left_local) - left_value = self.visit(node.left, scope) - right_value = self.visit(node.right, scope) + left_value = self.visit(node.left, scope, sscope) + right_value = self.visit(node.right, scope, sscope) print('left: ', left_value) print('right: ', right_value) # if node.left.computed_type.name == 'String': @@ -915,7 +924,7 @@ def visit(self, node, scope): return result_local @visitor.when(ConstantNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): if self.is_defined_param(node.lex): return node.lex elif self.current_type.has_attr(node.lex): @@ -926,7 +935,7 @@ def visit(self, node, scope): return scope.find_cil_local(node.lex) @visitor.when(IntegerNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): instance = self.define_internal_local(scope=scope, name="instance") self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').name, instance)) value = self.define_internal_local(scope=scope, name="value") @@ -936,7 +945,7 @@ def visit(self, node, scope): return instance @visitor.when(StringNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): str_name = "" for s in self.dotdata.keys(): if self.dotdata[s] == node.lex: @@ -954,7 +963,7 @@ def visit(self, node, scope): return instance @visitor.when(BoolNode) - def visit(self, node, scope): + def visit(self, node, scope, sscope): boolean = 0 if str(node.lex) == "true": boolean = 1 diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips new file mode 100644 index 00000000..d5b4e897 --- /dev/null +++ b/tests/codegen/hello_world.mips @@ -0,0 +1,622 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, Main +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, String +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, String +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, Int +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, Int +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, String +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, String +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra \ No newline at end of file From efe6db2c2f26a644cdd35294f244caa075ee4f6a Mon Sep 17 00:00:00 2001 From: hros18 Date: Sat, 12 Dec 2020 15:57:26 -0500 Subject: [PATCH 116/140] some transpilator visitor adds, some errors persist --- .../nodesIL/allocate_node_il.py | 2 +- .../nodesIL/assignmet_node_il.py | 2 +- .../nodesIL/instruction_node_il.py | 68 +- src/code_generation/nodesIL/node_il.py | 12 +- src/main.py | 15 +- src/semantic/context.py | 45 +- src/semantic/types.py | 2 + src/visitors/__init__.py | 2 +- src/visitors/to_mips.py | 9 +- src/visitors/transpilator.py | 599 +- src/visitors/type_builder.py | 2 +- tests/codegen/arith.mips | 10290 ---------------- tests/codegen/fib_test.cil | 0 tests/codegen/hello_world.cil | 304 + tests/codegen/hello_world.mips | 60 +- tests/codegen/hello_world_test.cil | 303 + tests/codegen/print-cool_test.cil | 371 + tests/codegen/test.py | 11 + 18 files changed, 1692 insertions(+), 10405 deletions(-) delete mode 100644 tests/codegen/arith.mips create mode 100644 tests/codegen/fib_test.cil create mode 100644 tests/codegen/hello_world.cil create mode 100644 tests/codegen/hello_world_test.cil create mode 100644 tests/codegen/print-cool_test.cil create mode 100644 tests/codegen/test.py diff --git a/src/code_generation/nodesIL/allocate_node_il.py b/src/code_generation/nodesIL/allocate_node_il.py index ad074108..a2f22b77 100644 --- a/src/code_generation/nodesIL/allocate_node_il.py +++ b/src/code_generation/nodesIL/allocate_node_il.py @@ -9,5 +9,5 @@ def __init__(self, itype, name, dest, idx=None): self.out = dest - def __str__(): + def __str__(self): return ("{} = ALLOCATE {}".format(self.dest, self.type)) \ No newline at end of file diff --git a/src/code_generation/nodesIL/assignmet_node_il.py b/src/code_generation/nodesIL/assignmet_node_il.py index 711aad94..84b482b9 100644 --- a/src/code_generation/nodesIL/assignmet_node_il.py +++ b/src/code_generation/nodesIL/assignmet_node_il.py @@ -9,5 +9,5 @@ def __init__(self, dest, source, idx=None): self.in1 = source self.out = dest - def __str__(): + def __str__(self): return ("{} = {}".format(self.dest, self.source)) \ No newline at end of file diff --git a/src/code_generation/nodesIL/instruction_node_il.py b/src/code_generation/nodesIL/instruction_node_il.py index 34b15634..d6ab96d9 100644 --- a/src/code_generation/nodesIL/instruction_node_il.py +++ b/src/code_generation/nodesIL/instruction_node_il.py @@ -2,37 +2,37 @@ class NotNodeIL(UnaryNodeIL): - def __str__(): + def __str__(self): return ("{} = ~{}".format(self.dest, self.expr)) class LogicalNotNodeIL(UnaryNodeIL): - def __str__(): + def __str__(self): return ("{} = NOT {}".format(self.dest, self.expr)) class PlusNodeIL(BinaryNodeIL): - def __str__(): + def __str__(self): return ("{} = {} + {}".format(self.dest,self.left, self.right)) class MinusNodeIL(BinaryNodeIL): - def __str__(): + def __str__(self): return ("{} = {} - {}".format(self.dest,self.left, self.right)) class StarNodeIL(BinaryNodeIL): - def __str__(): + def __str__(self): return ("{} = {} * {}".format(self.dest,self.left, self.right)) class DivNodeIL(BinaryNodeIL): - def __str__(): + def __str__(self): return ("{} = {} / {}".format(self.dest,self.left, self.right)) class LessNodeIL(BinaryNodeIL): - def __str__(): + def __str__(self): return ("{} = {} < {}".format(self.dest,self.left, self.right)) class LessEqNodeIL(BinaryNodeIL): - def __str__(): + def __str__(self): return ("{} = {} <= {}".format(self.dest,self.left, self.right)) class EqualNodeIL(BinaryNodeIL): - def __str__(): + def __str__(self): return ("{} = {} == {}".format(self.dest,self.left, self.right)) class ArrayNodeIL(InstructionNodeIL): @@ -56,7 +56,7 @@ def __init__(self, obj, attr, value, typex, idx=None): self.out = obj self.in1 = value - def __str__(): + def __str__(self): return ("SETATTR {} {} = {}".format(self.obj,self.attr, self.value)) class GetAttribNodeIL(InstructionNodeIL): @@ -71,7 +71,7 @@ def __init__(self, dest, obj, attr, attr_type, idx=None): self.out = dest self.in1 = obj - def __str__(): + def __str__(self): return ("{} = GETATTR {} {}".format(self.dest,self.obj,self.attr)) class TypeOfNodeIL(InstructionNodeIL): @@ -83,7 +83,7 @@ def __init__(self, obj, dest, idx=None): self.out = dest self.in1 = obj - def __str__(): + def __str__(self): return ("{} = TYPEOF {}".format(self.dest,self.obj)) class LabelNodeIL(InstructionNodeIL): @@ -91,7 +91,7 @@ def __init__(self, label, idx=None): super().__init__(idx) self.label = label - def __str__(): + def __str__(self): return ("LABEL {}".format(self.label)) @@ -99,7 +99,7 @@ class GotoNodeIL(InstructionNodeIL): def __init__(self, label, idx=None): super().__init__(idx) self.label = label - def __str__(): + def __str__(self): return ("GOTO {}".format(self.label)) class GotoIfNodeIL(InstructionNodeIL): @@ -110,7 +110,7 @@ def __init__(self, cond, label, idx=None): self.in1 = cond - def __str__(): + def __str__(self): return ("IF {} GOTO {}".format(self.cond, self.label)) class GotoIfFalseNodeIL(InstructionNodeIL): @@ -121,7 +121,7 @@ def __init__(self, cond, label, idx=None): self.in1 = cond - def __str__(): + def __str__(self): return ("IF NOT {} GOTO {}".format(self.cond,self.label)) class StaticCallNodeIL(InstructionNodeIL): @@ -135,7 +135,7 @@ def __init__(self, dest, function, args, xtype, idx=None): self.out = dest - def __str__(): + def __str__(self): args = '\n\t'.join(str(arg) for arg in self.args) return ("{}\n\t{} = CALL {}".format(args, self.dest, self.function)) @@ -152,7 +152,7 @@ def __init__(self, dest, method,args, xtype, obj, idx=None): self.out = dest self.in1 = obj - def __str__(): + def __str__(self): args = '\n\t'.join(str(arg) for arg in self.args) return ("{}\n\t{} = VCALL {} {}".format(args, self.dest, self.type, self.method)) @@ -162,7 +162,7 @@ def __init__(self, name, idx=None): self.dest = name self.out = name - def __str__(): + def __str__(self): return ("ARG {}".format(self.dest)) class ReturnNodeIL(InstructionNodeIL): @@ -172,7 +172,7 @@ def __init__(self, value, idx=None): self.out = value - def __str__(): + def __str__(self): to_return = "" if self.value is not None: to_return = " " + str(self.value) @@ -186,7 +186,7 @@ def __init__(self, msg, dest, idx=None): self.out = dest - def __str__(): + def __str__(self): return ("{} = LOAD {}".format(self.dest, self.msg)) class LengthNodeIL(InstructionNodeIL): @@ -198,7 +198,7 @@ def __init__(self, arg, dest, idx=None): self.out = dest self.in1 = arg - def __str__(): + def __str__(self): return ("{} = LENGTH {}".format(self.dest, self.arg)) class ConcatNodeIL(InstructionNodeIL): @@ -213,7 +213,7 @@ def __init__(self, arg1, len1, arg2, len2, dest, idx=None): self.in1 = arg1 self.in2 = arg2 - def __str__(): + def __str__(self): return ("{} = CONCAT {} {}".format(self.dest, self.arg1, self.arg2)) class StringEqualsNodeIL(InstructionNodeIL): @@ -234,7 +234,7 @@ def __init__(self, begin, end, word, dest, idx=None): self.in1 = begin self.in2 = end - def __str__(): + def __str__(self): return ("{} = SUBSTR {} {} {}".format(self.dest, self.word, self.begin, self.end)) class ToStrNodeIL(InstructionNodeIL): @@ -246,7 +246,7 @@ def __init__(self, dest, ivalue, idx=None): self.out = dest self.in1 = ivalue - def __str__(): + def __str__(self): return ("{} = STR {}".format(self.dest, self.ivalue)) class OutStringNodeIL(InstructionNodeIL): @@ -256,7 +256,7 @@ def __init__(self, value, idx=None): self.in1 = value - def __str__(): + def __str__(self): return ("OUT_STR {}".format(self.value)) class OutIntNodeIL(InstructionNodeIL): @@ -266,7 +266,7 @@ def __init__(self, value, idx=None): self.in1 = value - def __str__(): + def __str__(self): return ("OUT_INT {}".format(self.value)) class ReadStringNodeIL(InstructionNodeIL): @@ -276,7 +276,7 @@ def __init__(self, dest, idx=None): self.out = dest - def __str__(): + def __str__(self): return ("{} = READ_STR".format(self.dest)) class ReadIntNodeIL(InstructionNodeIL): @@ -286,7 +286,7 @@ def __init__(self, dest, idx=None): self.out = dest - def __str__(): + def __str__(self): return ("{} = READ_INT".format(self.dest)) class ExitNodeIL(InstructionNodeIL): @@ -298,7 +298,7 @@ def __init__(self, classx, value=0, idx=None): self.in1 = value self.in2 = classx - def __str__(): + def __str__(self): return ("EXIT {}".format(self.value)) class CopyNodeIL(InstructionNodeIL): @@ -310,7 +310,7 @@ def __init__(self, source, dest, idx=None): self.out = dest self.in1 = source - def __str__(): + def __str__(self): return ("{} = COPY {}".format(self.dest, self.source)) class ConformsNodeIL(InstructionNodeIL): @@ -323,7 +323,7 @@ def __init__(self, dest, expr, type2, idx=None): self.out = dest self.in1 = expr - def __str__(): + def __str__(self): return ("{} = CONFORMS {}".format(self.dest, self.expr, self.type)) class VoidConstantNodeIL(InstructionNodeIL): @@ -333,7 +333,7 @@ def __init__(self, obj, idx=None): self.out = obj - def __str__(): + def __str__(self): return ("{} = Void".format(self.obj)) class ErrorNodeIL(InstructionNodeIL): @@ -341,7 +341,7 @@ def __init__(self, typex, idx=None): super().__init__(idx) self.type = typex - def __str__(): + def __str__(self): return ("ERROR {}".format(self.type)) class BoxingNodeIL(InstructionNodeIL): diff --git a/src/code_generation/nodesIL/node_il.py b/src/code_generation/nodesIL/node_il.py index fa3e635a..a14cbaaf 100644 --- a/src/code_generation/nodesIL/node_il.py +++ b/src/code_generation/nodesIL/node_il.py @@ -9,7 +9,7 @@ def __init__(self, dottypes, dotdata, dotcode, idx=None): self.dotcode = dotcode self.index = idx - def __str__(): + def __str__(self): dottypes = '\n'.join(str(t) for t in self.dottypes) dotdata = '\n'.join(str(t) for t in self.dotdata) dotcode = '\n'.join(str(t) for t in self.dotcode) @@ -23,7 +23,7 @@ def __init__(self, name, atributes=None, methods=None, idx=None): self.methods = methods if methods is not None else [] self.index = idx - def __str__(): + def __str__(self): attributes = "\n\t" methods = "\n\t" for x,y in self.attributes: @@ -40,7 +40,7 @@ def __init__(self, vname, value, idx=None): self.value = value self.index = idx - def __str__(): + def __str__(self): return str(self.name) + " = " + '"' + str(node.value) + '"' @@ -52,7 +52,7 @@ def __init__(self, fname, params, localvars, instructions, idx=None): self.instructions = instructions self.index = idx - def __str__(): + def __str__(self): params = "\n".join(str(x) for x in self.params) localvars = "\n".join(str(x) for x in self.localvars) instruction = "\n".join(str(x) for x in self.instructions) @@ -65,7 +65,7 @@ def __init__(self, name, typex=None, idx=None): self.type = typex self.index = idx - def __str__(): + def __str__(self): return ("PARAM {}".format(self.name)) class LocalNodeIL(NodeIL): @@ -73,7 +73,7 @@ def __init__(self, name, idx=None): self.name = name self.index = idx - def __str__(): + def __str__(self): return ("LOCAL {}".format(self.name)) class HaltNodeIL(NodeIL): diff --git a/src/main.py b/src/main.py index 3fa7ab20..1275e3a9 100644 --- a/src/main.py +++ b/src/main.py @@ -30,15 +30,26 @@ def main(): ast, context, scope = pipeline.run_pipeline(program) except: pass - + pipeline.report_errors() if pipeline.pipeline_errors: exit(1) else: + # print('-------------AST-------------') + # for x in ast: + # print(x) + cv = codeVisitor(context) cil_ast = cv.visit(ast, None, scope) - + f2_n = program[:-3] + '_test.cil' + f2 = open(f2_n, 'w+') + + formatter = get_formatter() + cil_code = formatter(cil_ast) + f2.write(f'{cil_code}') + f2.close() + print('LEN:::::',len(cv.instructions)) mips = MIPS() code = mips.visit(cil_ast) diff --git a/src/semantic/context.py b/src/semantic/context.py index 35e37e2e..1208e07b 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -17,6 +17,7 @@ def __init__(self): 'IO' : IOType(), 'SELF_TYPE' : SELF_TYPE() } + self.graph = {} # build-in methods self.types['Object'].methods['abort'] = Method('abort', [], [], self.types['Object']) @@ -32,10 +33,26 @@ def __init__(self): self.types['String'].methods['concat'] = Method('concat', ['s'], [self.types['String']], self.types['String']) self.types['String'].methods['substr'] = Method('substr', ['i', 'l'], [self.types['Int'], self.types['Int']], self.types['String']) + self.graph['Object'] = ['IO', 'String', 'Bool', 'Int'] + self.graph['IO'] = [] + self.graph['String'] = [] + self.graph['Int'] = [] + self.graph['Bool'] = [] + def create_type(self, name:str): if name in self.types: raise ContextError(f'Type with the same name ({name}) already in context.') - typex = self.types[name] = Type(name) + typex = Type(name) + print('---CreateType---') + print('type: ', typex.name) + print('parent: ', typex.parent.name) + self.types[name] = typex + if not self.graph.__contains__(name): + self.graph[name] = [] + if self.graph.__contains__(typex.parent.name): + self.graph[typex.parent.name].append(name) + else: + self.graph[typex.parent.name] = [name] return typex def get_type(self, name:str): @@ -44,6 +61,32 @@ def get_type(self, name:str): except KeyError: raise ContextError(f'Type "{name}" is not defined.') + def set_type_tags(self, node='Object', tag=0): + # print('------Set-----') + # print('type: ', node) + # print('tag: ', tag) + # self.types[node].tag = tag + # for i,t in enumerate(self.graph[node]): + # self.set_type_tags(t, tag + i + 1) + # print('Done type tags') + self.types['Object'].tag = 0 + self.types['IO'].tag = 1 + self.types['Main'].tag = 2 + self.types['String'].tag = 2 + self.types['Bool'].tag = 3 + self.types['Int'].tag = 4 + + def set_type_max_tags(self, node='Object'): + if not self.graph[node]: + self.types[node].max_tag = self.types[node].tag + else: + for t in self.graph[node]: + self.set_type_max_tags(t) + maximum = 0 + for t in self.graph[node]: + maximum = max(maximum, self.types[t].max_tag) + self.types[node].max_tag = maximum + print('Done type max tags') def __str__(self): return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' diff --git a/src/semantic/types.py b/src/semantic/types.py index aa55069e..111fcaad 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -12,6 +12,8 @@ def __init__(self, name:str): self.attributes = [] self.methods = {} self.parent = ObjectType() + self.tag = None + self.max_tag = None def set_parent(self, parent): if self.parent != ObjectType() and self.parent is not None: diff --git a/src/visitors/__init__.py b/src/visitors/__init__.py index ad4c6b75..0c8d65cf 100644 --- a/src/visitors/__init__.py +++ b/src/visitors/__init__.py @@ -3,5 +3,5 @@ from .type_checker import TypeChecker from .type_collector import TypeCollector from .var_collector import VarCollector -from .transpilator import codeVisitor +from .transpilator import codeVisitor, get_formatter from .to_mips import MIPS \ No newline at end of file diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 4ac73877..e7c60a02 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -186,7 +186,13 @@ def visit(self, node): @visitor.when(GetAttribNodeIL) def visit(self, node): + print('----------------::::::') print('----------------::::::',node.obj) + print('----------------::::::',node.dest) + print('----------------::::::',node.attr) + print('----------------::::::',node.attr_type) + print('----------------::::::',self.attr_offset[node.attr_type][node.attr]) + self_offset = self.var_offset[self.current_function.name][node.obj] self.text += f'lw $t0, {self_offset}($sp)\n' #get self address @@ -214,6 +220,7 @@ def visit(self, node): @visitor.when(ArgNodeIL) def visit(self, node): value_offset = self.var_offset[self.current_function.name][node.dest] # get value from local + # print('offset::::::::::: ',value_offset) self.text += f'lw $t1, {value_offset}($t0)\n' self.text += 'addi $sp, $sp, -4\n' self.text += 'sw $t1, 0($sp)\n' @@ -232,7 +239,7 @@ def visit(self, node): self.text += f'lw $t2, 12($t1)\n' #get dispatch table address - method_offset = self.method_offset[node.dynamic_type][node.method] + method_offset = self.method_offset[node.type][node.method] self.text += f'lw $t3, {method_offset}($t2)\n' # get method address self.text += 'jal $t3\n' diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 9191fa9a..9f7b6730 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -78,8 +78,8 @@ def __init__(self, context): self.context = context self.label_count = 0 # self.scope = scope - # self.context.set_type_tags() - # self.context.set_type_max_tags() + self.context.set_type_tags() + self.context.set_type_max_tags() @property def params(self): @@ -191,7 +191,7 @@ def register_builtin_types(self, scope): type_name = self.define_internal_local(scope=scope, name = "type_name" ) self.register_instruction(TypeOfNodeIL('self', type_name)) instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').name ,instance)) + self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').tag ,instance)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(type_name),ArgNodeIL(instance)],"String")) self.register_instruction(ReturnNodeIL(instance)) @@ -233,7 +233,7 @@ def register_builtin_types(self, scope): msg = self.define_internal_local(scope=scope, name="read_str") self.register_instruction(ReadStringNodeIL(msg)) instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').name ,instance)) + self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').tag ,instance)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(msg),ArgNodeIL(instance)],"String")) self.register_instruction(ReturnNodeIL(instance)) @@ -244,7 +244,7 @@ def register_builtin_types(self, scope): number = self.define_internal_local(scope=scope, name ="read_int") self.register_instruction(ReadIntNodeIL(number)) instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name,instance)) + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').tag,instance)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ ArgNodeIL(number), ArgNodeIL(instance)], "Int")) self.register_instruction(ReturnNodeIL(instance)) @@ -263,7 +263,7 @@ def register_builtin_types(self, scope): length_result = self.define_internal_local(scope=scope, name="length") self.register_instruction(LengthNodeIL('self', length_result)) instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name,instance)) + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').tag,instance)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init,'Int_init', [ArgNodeIL(length_result),ArgNodeIL(instance)], "Int")) self.register_instruction(ReturnNodeIL(instance)) @@ -291,7 +291,7 @@ def register_builtin_types(self, scope): concat_result = self.define_internal_local(scope=scope, name="concat") self.register_instruction(ConcatNodeIL(str1, local_len1, str2, local_len2, concat_result)) instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').name ,instance)) + self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').tag ,instance)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(concat_result), ArgNodeIL(instance)],"String")) self.register_instruction(ReturnNodeIL(instance)) @@ -309,7 +309,7 @@ def register_builtin_types(self, scope): subs_result=self.define_internal_local(scope=scope, name="subs_result") self.register_instruction(SubstringNodeIL(i_value, l_value, 'self', subs_result)) instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('String', self.context.get_type('String').name,instance)) + self.register_instruction(AllocateNodeIL('String', self.context.get_type('String').tag,instance)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(subs_result),ArgNodeIL(instance)],"String")) self.register_instruction(ReturnNodeIL(instance)) @@ -358,7 +358,7 @@ def visit(self, node, scope, sscope): self.current_function = self.register_function('main') instance = self.define_internal_local(scope = scope, name = "instance") result = self.define_internal_local(scope = scope, name = "result") - self.register_instruction(AllocateNodeIL('Main',self.context.get_type('Main').name, instance)) + self.register_instruction(AllocateNodeIL('Main',self.context.get_type('Main').tag, instance)) # self.register_instruction(ArgNodeIL(instance)) self.register_instruction(StaticCallNodeIL(result, 'Main_init', [ArgNodeIL(instance)],"Main")) # self.register_instruction(ArgNodeIL(instance)) @@ -381,6 +381,31 @@ def visit(self, node, scope, sscope): return ProgramNodeIL(self.dottypes, self.dotdata, self.dotcode) + @visitor.when(SelfCallNode) + def visit(self, node, scope, sscope): + # print(node) + # print(node.id) + # print('args:',node.args) + result_local = self.define_internal_local(scope = scope, name = "result") + # expr_value = 'value' + + call_args = [] + for arg in reversed(node.args): + param_local = self.visit(arg, scope, sscope) + call_args.append(ArgNodeIL(param_local)) + # call_args.append(ArgNodeIL(expr_value)) + + # dynamic_type = 'Void' + self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, self.current_type.name, 'value')) + + return result_local + + @visitor.when(FormalParamNode) + def visit(self, node, scope, sscope): + print(node) + print(node.id) + print(node.type) + @visitor.when(ClassDeclarationNode) def visit(self, node, scope, sscope): self.current_type = self.context.get_type(node.id) @@ -444,16 +469,16 @@ def visit(self, node, scope, sscope): ascope = sscope.attr_scopes[node.id] instance = None - if node.type in ['Int', 'Bool']: + if node.type.name in ['Int', 'Bool']: instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name, instance)) + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag, instance)) value = self.define_internal_local(scope=scope, name="value") self.register_instruction(LoadNodeIL(0,value)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ ArgNodeIL(value), ArgNodeIL(instance)], node.type)) - elif node.type == 'String': + elif node.type.name == 'String': instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name ,instance)) + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag ,instance)) value = self.define_internal_local(scope=scope, name="value") self.register_instruction(LoadNodeIL('empty_str',value)) result_init = self.define_internal_local(scope=scope, name="result_init") @@ -486,6 +511,17 @@ def visit(self, node, scope, sscope): for e in node.expr_list: result_local = self.visit(e, scope, sscope) return result_local + + @visitor.when(VariableNode) + def visit(self, node, scope, sscope): + if self.is_defined_param(node.id): + return node.id + elif self.current_type.has_attr(node.id): + result_local = self.define_internal_local(scope=scope, name = node.id, class_type=None) + self.register_instruction(GetAttribNodeIL(result_local, 'self' , node.id, sscope.find_variable(node.id).type.name)) + return result_local + else: + return scope.find_cil_local(node.id) @visitor.when(ConditionalNode) def visit(self, node, scope, sscope): @@ -496,14 +532,14 @@ def visit(self, node, scope, sscope): if_then_label = self.get_label() self.register_instruction(GotoNodeIL(cond_value, if_then_label)) - else_value = self.visit(node.else_stm, scope) + else_value = self.visit(node.else_stm, scope, sscope) self.register_instruction(AssignNodeIL(result_local, else_value)) end_if_label = self.get_label() self.register_instruction(GotoNodeIL(end_if_label)) self.register_instruction(LabelNodeIL(if_then_label)) - then_value = self.visit(node.stm, scope) + then_value = self.visit(node.stm, scope, sscope) self.register_instruction(AssignNodeIL(result_local, then_value)) self.register_instruction(LabelNodeIL(end_if_label)) @@ -566,7 +602,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(ArgNodeIL(p)) static_instance = self.define_internal_local(scope=scope, name='static_instance') - self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name ,static_instance)) + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag ,static_instance)) self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, node.type, static_instance)) return result_local @@ -620,7 +656,7 @@ def visit(self, node, scope, sscope): @visitor.when(CaseNode) def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope = scope, name = "result") - case_expr = self.visit(node.expr, scope) + case_expr = self.visit(node.expr, scope, sscope) nscope = sscope.expr_dict[node] @@ -675,7 +711,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(ArgNodeIL(result_local)) self.register_instruction(StaticCallNodeIL(result_init, f'{self.current_type.name}_init', [result_local], self.current_type.name)) else: - self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).name ,result_local)) + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag ,result_local)) # self.register_instruction(ArgNodeIL(result_local)) self.register_instruction(StaticCallNodeIL(result_init,f'{node.type}_init' ,[ArgNodeIL(result_local)], self.current_type.name )) @@ -687,7 +723,7 @@ def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name ="isvoid_result") self.register_instruction(IsVoidNodeIL(result_local, expre_value)) instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, instance)) + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, instance)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(result_local),ArgNodeIL(instance)], "Bool")) return instance @@ -702,16 +738,50 @@ def visit(self, node, scope, sscope): left_value = self.visit(node.left, scope, sscope) right_value = self.visit(node.right, scope, sscope) + if hasattr(node.left, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + else: + left_type = 'Object' + if isinstance(node.left, IntegerNode): + left_type = 'Int' + elif isinstance(node.left, BoolNode): + left_type = 'Bool' + elif isinstance(node.left, StringNode): + left_type = 'String' + else: + try: + left_type = (sscope.find_variable(node.left.id)).type.name + except: + left_type = 'Int' + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) + + if hasattr(node.right, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + else: + right_type = 'Object' + if isinstance(node.right, IntegerNode): + right_type = 'Int' + elif isinstance(node.right, BoolNode): + right_type = 'Bool' + elif isinstance(node.right, StringNode): + right_type = 'String' + else: + try: + right_type = (sscope.find_variable(node.right.id)).type.name + except: + right_type = 'Int' + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) - self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "+")) # Allocate Int result - self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').name, result_local)) + self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) @@ -730,13 +800,47 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) - self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + if hasattr(node.left, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + else: + left_type = 'Object' + if isinstance(node.left, IntegerNode): + left_type = 'Int' + elif isinstance(node.left, BoolNode): + left_type = 'Bool' + elif isinstance(node.left, StringNode): + left_type = 'String' + else: + try: + left_type = (sscope.find_variable(node.left.id)).type.name + except: + left_type = 'Int' + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) + + if hasattr(node.right, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + else: + right_type = 'Object' + if isinstance(node.right, IntegerNode): + right_type = 'Int' + elif isinstance(node.right, BoolNode): + right_type = 'Bool' + elif isinstance(node.right, StringNode): + right_type = 'String' + else: + try: + right_type = (sscope.find_variable(node.right.id)).type.name + except: + right_type = 'Int' + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) + + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "-")) # Allocate Int result - self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').name, result_local)) + self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) @@ -755,13 +859,43 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) - self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) - + if hasattr(node.left, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + else: + left_type = 'Object' + if isinstance(node.left, IntegerNode): + left_type = 'Int' + elif isinstance(node.left, BoolNode): + left_type = 'Bool' + elif isinstance(node.left, StringNode): + left_type = 'String' + else: + try: + left_type = (sscope.find_variable(node.left.id)).type.name + except: + left_type = 'Int' + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) + + if hasattr(node.right, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + else: + right_type = 'Object' + if isinstance(node.right, IntegerNode): + right_type = 'Int' + elif isinstance(node.right, BoolNode): + right_type = 'Bool' + elif isinstance(node.right, StringNode): + right_type = 'String' + else: + try: + right_type = (sscope.find_variable(node.right.id)).type.name + except: + right_type = 'Int' + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "*")) # Allocate Int result - self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name, result_local)) + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) @@ -780,13 +914,44 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) - self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + if hasattr(node.left, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + else: + left_type = 'Object' + if isinstance(node.left, IntegerNode): + left_type = 'Int' + elif isinstance(node.left, BoolNode): + left_type = 'Bool' + elif isinstance(node.left, StringNode): + left_type = 'String' + else: + try: + left_type = (sscope.find_variable(node.left.id)).type.name + except: + left_type = 'Int' + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) + + if hasattr(node.right, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + else: + right_type = 'Object' + if isinstance(node.right, IntegerNode): + right_type = 'Int' + elif isinstance(node.right, BoolNode): + right_type = 'Bool' + elif isinstance(node.right, StringNode): + right_type = 'String' + else: + try: + right_type = (sscope.find_variable(node.right.id)).type.name + except: + right_type = 'Int' + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "/")) # Allocate Int result - self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name, result_local)) + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) @@ -801,11 +966,34 @@ def visit(self, node, scope, sscope): expr_value = self.visit(node.expr, scope, sscope) # self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", node.expr.computed_type.name)) - self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", None)) + if hasattr(node, 'expr') and (not isinstance(node.expr, VariableNode)): + typeX = 'Object' + if isinstance(node, SelfCallNode): + typeX = self.current_type.name + else: + try: + typeX = self.context.exprs_dict[node.expr].name + except: + typeX = 'Object' + self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", typeX)) + else: + right_type = 'Object' + if isinstance(node.expr, IntegerNode): + right_type = 'Int' + elif isinstance(node.expr, BoolNode): + right_type = 'Bool' + elif isinstance(node.expr, StringNode): + right_type = 'String' + else: + try: + right_type = (sscope.find_variable(node.expr.id)).type.name + except: + right_type = 'Int' + self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", right_type)) self.register_instruction(UnaryNodeIL(op_local, expr_local, "~")) # Allocate Int result - self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').name, result_local)) + self.register_instruction(AllocateNodeIL('Int', self.context.get_type('Int').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Int_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Int")) @@ -820,11 +1008,22 @@ def visit(self, node, scope, sscope): expr_value = self.visit(node.expr, scope, sscope) # self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", node.expr.computed_type.name)) - self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", None)) + if hasattr(node, 'expr') and (not isinstance(node.expr, VariableNode)): + typeX = 'Object' + if isinstance(node, SelfCallNode): + typeX = self.current_type.name + else: + try: + typeX = self.context.exprs_dict[node.expr].name + except: + typeX = 'Object' + self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", typeX)) + else: + self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", (sscope.find_variable(node.expr.id)).type.name)) self.register_instruction(UnaryNodeIL(op_local, expr_local, "not")) # Allocate Bool result - self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) @@ -841,14 +1040,48 @@ def visit(self, node, scope, sscope): right_value = self.visit(node.right, scope, sscope) # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + + if hasattr(node.left, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + else: + left_type = 'Object' + if isinstance(node.left, IntegerNode): + left_type = 'Int' + elif isinstance(node.left, BoolNode): + left_type = 'Bool' + elif isinstance(node.left, StringNode): + left_type = 'String' + else: + try: + left_type = (sscope.find_variable(node.left.id)).type.name + except: + left_type = 'Int' + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) + + if hasattr(node.right, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + else: + right_type = 'Object' + if isinstance(node.right, IntegerNode): + right_type = 'Int' + elif isinstance(node.right, BoolNode): + right_type = 'Bool' + elif isinstance(node.right, StringNode): + right_type = 'String' + else: + try: + right_type = (sscope.find_variable(node.right.id)).type.name + except: + right_type = 'Int' + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "<")) # Allocate Bool result - self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) @@ -867,13 +1100,47 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) - self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + + if hasattr(node.left, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + else: + left_type = 'Object' + if isinstance(node.left, IntegerNode): + left_type = 'Int' + elif isinstance(node.left, BoolNode): + left_type = 'Bool' + elif isinstance(node.left, StringNode): + left_type = 'String' + else: + try: + left_type = (sscope.find_variable(node.left.id)).type.name + except: + left_type = 'Int' + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) + + if hasattr(node.right, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + else: + right_type = 'Object' + if isinstance(node.right, IntegerNode): + right_type = 'Int' + elif isinstance(node.right, BoolNode): + right_type = 'Bool' + elif isinstance(node.right, StringNode): + right_type = 'String' + else: + try: + right_type = (sscope.find_variable(node.right.id)).type.name + except: + right_type = 'Int' + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "<=")) # Allocate Bool result - self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) @@ -881,7 +1148,8 @@ def visit(self, node, scope, sscope): @visitor.when(EqualNode) def visit(self, node, scope, sscope): - print('----got in equalss----') + # print('----got in equalss----') + # print(node) result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -890,25 +1158,87 @@ def visit(self, node, scope, sscope): left_value = self.visit(node.left, scope, sscope) right_value = self.visit(node.right, scope, sscope) - print('left: ', left_value) - print('right: ', right_value) - # if node.left.computed_type.name == 'String': - if isinstance(node.left, StringNode) and isinstance(node.right, StringNode): + # print('res_local: ', result_local) + # print('op_local: ', op_local) + # print('left_local: ', left_local) + # print('right_local: ', right_local) + # print('left: ', node.left) + # print('left_value: ',left_value) + # print('right: ', node.right) + # print('right_value: ',right_value) + left_type = 'Object' + right_type = 'Object' + if hasattr(node.left, 'expr'): + left_type = self.context.exprs_dict[node.left.expr].name + else: + left_type = 'Object' + if isinstance(node.left, IntegerNode): + left_type = 'Int' + elif isinstance(node.left, BoolNode): + left_type = 'Bool' + elif isinstance(node.left, StringNode): + left_type = 'String' + else: + try: + left_type = (sscope.find_variable(node.left.id)).type.name + except: + left_type = 'Int' + # left_type = (sscope.find_variable(node.left.id)).type.name.name + # if hasattr(node.right, 'expr'): + # right_type = self.context.exprs_dict[node.right.expr].name + # else: + # right_type = (sscope.find_variable(node.right.id)).type.name.name + + # if isinstance(node.left, StringNode) and isinstance(node.right, StringNode): + if left_type == 'String': self.register_instruction(StaticCallNodeIL(op_local, 'String_equals', [ArgNodeIL(right_value), ArgNodeIL(left_value)], 'String')) # Allocate Bool result - self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) return result_local - # elif node.left.computed_type.name in ['Int', 'Bool']: - elif (isinstance(node.left, IntegerNode) and isinstance(node.right, IntegerNode)) or (isinstance(node.left, BoolNode) and isinstance(node.right, BoolNode)): + # elif (isinstance(node.left, IntegerNode) and isinstance(node.right, IntegerNode)) or (isinstance(node.left, BoolNode) and isinstance(node.right, BoolNode)): + elif left_type in ['Int', 'Bool']: # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) - self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) + if hasattr(node.left, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + else: + left_type = 'Object' + if isinstance(node.left, IntegerNode): + left_type = 'Int' + elif isinstance(node.left, BoolNode): + left_type = 'Bool' + elif isinstance(node.left, StringNode): + left_type = 'String' + else: + try: + left_type = (sscope.find_variable(node.left.id)).type.name + except: + left_type = 'Int' + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) + + if hasattr(node.right, 'expr'): + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + else: + right_type = 'Object' + if isinstance(node.right, IntegerNode): + right_type = 'Int' + elif isinstance(node.right, BoolNode): + right_type = 'Bool' + elif isinstance(node.right, StringNode): + right_type = 'String' + else: + try: + right_type = (sscope.find_variable(node.right.id)).type.name + except: + right_type = 'Int' + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) else: print('got here where somewhere else') self.register_instruction(AssignNodeIL(left_local, left_value)) @@ -917,7 +1247,7 @@ def visit(self, node, scope, sscope): self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "=")) # Allocate Bool result - self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, result_local)) + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, result_local)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(op_local), ArgNodeIL(result_local)], "Bool")) @@ -937,7 +1267,7 @@ def visit(self, node, scope, sscope): @visitor.when(IntegerNode) def visit(self, node, scope, sscope): instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').name, instance)) + self.register_instruction(AllocateNodeIL('Int',self.context.get_type('Int').tag, instance)) value = self.define_internal_local(scope=scope, name="value") self.register_instruction(LoadNodeIL(node.lex,value)) result_init = self.define_internal_local(scope=scope, name="result_init") @@ -957,7 +1287,7 @@ def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope) self.register_instruction(LoadNodeIL(str_name, result_local)) instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').name, instance)) + self.register_instruction(AllocateNodeIL('String',self.context.get_type('String').tag, instance)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'String_init', [ArgNodeIL(result_local),ArgNodeIL(instance)], "String")) return instance @@ -968,9 +1298,164 @@ def visit(self, node, scope, sscope): if str(node.lex) == "true": boolean = 1 instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, instance)) + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, instance)) value = self.define_internal_local(scope=scope, name="value") self.register_instruction(LoadNodeIL(boolean, value)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, 'Bool_init', [ArgNodeIL(value),ArgNodeIL(instance)], "Bool")) - return instance \ No newline at end of file + return instance + + +def get_formatter(): + + class PrintVisitor(object): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNodeIL) + def visit(self, node): + dottypes = '\n'.join(self.visit(t) for t in node.dottypes.values()) + dotdata = '\n'.join(f'{t}: {node.dotdata[t]}' for t in node.dotdata.keys()) + dotcode = '\n'.join(self.visit(t) for t in node.dotcode) + + return f'.TYPES\n{dottypes}\n\n.DATA\n{dotdata}\n\n.CODE\n{dotcode}' + + @visitor.when(TypeNodeIL) + def visit(self, node): + attributes = '\n\t'.join(f'attribute {x}' for x in node.attributes) + methods = '\n\t'.join(f'method {x} : {node.methods[x]}' for x in node.methods.keys()) + + return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' + + @visitor.when(FunctionNodeIL) + def visit(self, node): + params = '\n\t'.join(self.visit(x) for x in node.params) + localvars = '\n\t'.join(self.visit(x) for x in node.localvars) + instructions = '\n\t'.join(self.visit(x) for x in node.instructions) + + return f'function {node.name} {{\n\t{params}\n\n\t{localvars}\n\n\t{instructions}\n}}' + + @visitor.when(ParamNodeIL) + def visit(self, node): + return f'PARAM {node.name}' + + @visitor.when(LocalNodeIL) + def visit(self, node): + return f'LOCAL {node.name}' + + @visitor.when(AssignNodeIL) + def visit(self, node): + return f'{node.dest} = {node.source}' + + @visitor.when(GotoIfNodeIL) + def visit(self, node): + return f'IF {node.cond} GOTO {node.label}' + + @visitor.when(LabelNodeIL) + def visit(self, node): + return f'LABEL {node.label}' + + @visitor.when(GotoNodeIL) + def visit(self, node): + return f'GOTO {node.label}' + + @visitor.when(UnaryNodeIL) + def visit(self, node): + return f'{node.dest} = {node.op} {node.expr}' + + @visitor.when(BinaryNodeIL) + def visit(self, node): + return f'{node.dest} = {node.left} {node.op} {node.right}' + + @visitor.when(AllocateNodeIL) + def visit(self, node): + return f'{node.dest} = ALLOCATE {node.type}' + + @visitor.when(LoadNodeIL) + def visit(self, node): + return f'{node.dest} = LOAD {node.msg}' + + # @visitor.when(LoadInt) + # def visit(self, node): + # return f'{node.local_dest} = LOAD {node.num}' + + # @visitor.when(LoadVoid) + # def visit(self, node): + # return f'{node.local_dest} = LOAD VOID' + + @visitor.when(GetAttribNodeIL) + def visit(self, node): + return f'{node.dest} = GetAttr {node.obj} {node.attr} ' + + @visitor.when(SetAttribNodeIL) + def visit(self, node): + return f'SetAttr {node.obj} {node.attr} {node.value}' + + + @visitor.when(TypeOfNodeIL) + def visit(self, node): + return f'{node.dest} = TYPEOF {node.obj}' + + @visitor.when(StaticCallNodeIL) + def visit(self, node): + return f'{node.dest} = CALL {node.function}' + + @visitor.when(DynamicCallNodeIL) + def visit(self, node): + return f'{node.dest} = VCALL {node.type} {node.method} ' + + @visitor.when(ArgNodeIL) + def visit(self, node): + return f'ARG {node.arg}' + + @visitor.when(ReturnNodeIL) + def visit(self, node): + return f'\n RETURN {node.value if node.value is not None else ""}' + + @visitor.when(IsVoidNodeIL) + def visit(self, node): + return f'{node.result_local} ISVOID {node.expre_value}' + + @visitor.when(HaltNodeIL) + def visit(self, node): + return 'HALT' + + @visitor.when(CopyNodeIL) + def visit(self, node): + return f'{node.dest} = COPY {node.source}' + + @visitor.when(LengthNodeIL) + def visit(self, node): + return f'{node.dest} = LENGTH {node.arg}' + + @visitor.when(ConcatNodeIL) + def visit(self, node): + return f'{node.dest} = CONCAT {node.arg1} {node.arg2}' + + @visitor.when(SubstringNodeIL) + def visit(self, node): + return f'{node.dest} = SUBSTR {node.begin} {node.end} {node.word}' + + @visitor.when(StringEqualsNodeIL) + def visit(self, node): + return f'{node.result} = {node.s1} = {node.s2}' + + @visitor.when(ReadStringNodeIL) + def visit(self, node): + return f'{node.dest} = READ STR' + + @visitor.when(ReadIntNodeIL) + def visit(self, node): + return f'{node.dest} = READ INT' + + @visitor.when(OutStringNodeIL) + def visit(self, node): + return f'PRINT_STR {node.value}' + + @visitor.when(OutIntNodeIL) + def visit(self, node): + return f'PRINT_INT {node.value}' + + printer = PrintVisitor() + return (lambda ast: printer.visit(ast)) \ No newline at end of file diff --git a/src/visitors/type_builder.py b/src/visitors/type_builder.py index 59af0b1e..935a5c8a 100644 --- a/src/visitors/type_builder.py +++ b/src/visitors/type_builder.py @@ -88,7 +88,7 @@ def visit(self, node): self.current_type.define_method(node.id, args_ids, args_types, ret_type) except SemanticError as e: self.errors.append(CSemanticError(node.row, node.col, e.text)) - + @visitor.when(AttrDeclarationNode) def visit(self, node): try: diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips deleted file mode 100644 index ad96fb8f..00000000 --- a/tests/codegen/arith.mips +++ /dev/null @@ -1,10290 +0,0 @@ -.data -dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" -case_void: .asciiz "Runtime Error: A case on void" -case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" -div_zero: .asciiz "Runtime Error: Division by zero" -substr: .asciiz "Runtime Error: Substring out of range" -heap: .asciiz "Runtime Error: Heap overflow" -temp_string: .space 2048 -void: .word 0 -Object_name: .asciiz "Object" -Object_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -Int_name: .asciiz "Int" -Int_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -String_name: .asciiz "String" -String_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word String.length -.word String.concat -.word String.substr -Bool_name: .asciiz "Bool" -Bool_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -A_name: .asciiz "A" -A_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word A.method5 -B_name: .asciiz "B" -B_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word B.method5 -C_name: .asciiz "C" -C_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word C.method5 -.word C.method6 -D_name: .asciiz "D" -D_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word B.method5 -.word D.method7 -E_name: .asciiz "E" -E_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word B.method5 -.word D.method7 -.word E.method6 -A2I_name: .asciiz "A2I" -A2I_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A2I.c2i -.word A2I.i2c -.word A2I.a2i -.word A2I.a2i_aux -.word A2I.i2a -.word A2I.i2a_aux -Main_name: .asciiz "Main" -Main_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -.word Main.menu -.word Main.prompt -.word Main.get_int -.word Main.is_even -.word Main.class_type -.word Main.print -.word Main.main -s_0: .asciiz "Abort called from class " -s_1: .asciiz " -" -empty_str: .asciiz "" -s_3: .asciiz "0" -s_4: .asciiz "1" -s_5: .asciiz "2" -s_6: .asciiz "3" -s_7: .asciiz "4" -s_8: .asciiz "5" -s_9: .asciiz "6" -s_10: .asciiz "7" -s_11: .asciiz "8" -s_12: .asciiz "9" -s_13: .asciiz "-" -s_14: .asciiz "+" -s_15: .asciiz " - To add a number to " -s_16: .asciiz "...enter a: -" -s_17: .asciiz " To negate " -s_18: .asciiz "...enter b: -" -s_19: .asciiz " To find the difference between " -s_20: .asciiz "and another number...enter c: -" -s_21: .asciiz " To find the factorial of " -s_22: .asciiz "...enter d: -" -s_23: .asciiz " To square " -s_24: .asciiz "...enter e: -" -s_25: .asciiz " To cube " -s_26: .asciiz "...enter f: -" -s_27: .asciiz " To find out if " -s_28: .asciiz "is a multiple of 3...enter g: -" -s_29: .asciiz " To divide " -s_30: .asciiz "by 8...enter h: -" -s_31: .asciiz " To get a new number...enter j: -" -s_32: .asciiz " To quit...enter q: - -" -s_33: .asciiz "Please enter a number... " -s_34: .asciiz "Class type is now E -" -s_35: .asciiz "Class type is now D -" -s_36: .asciiz "Class type is now C -" -s_37: .asciiz "Class type is now B -" -s_38: .asciiz "Class type is now A -" -s_39: .asciiz "Oooops -" -s_40: .asciiz " " -s_41: .asciiz "number " -s_42: .asciiz "is odd! -" -s_43: .asciiz "is even! -" -s_44: .asciiz "a" -s_45: .asciiz "b" -s_46: .asciiz "c" -s_47: .asciiz "d" -s_48: .asciiz "e" -s_49: .asciiz "f" -s_50: .asciiz "g" -s_51: .asciiz "h" -s_52: .asciiz "j" -s_53: .asciiz "q" -s_54: .asciiz "is equal to " -s_55: .asciiz "times 8 with a remainder of " -s_56: .asciiz "is not divisible by 3. -" -s_57: .asciiz "is divisible by 3. -" -.text -dispatch_void_error: -la $a0 dispatch_void -li $v0, 4 -syscall -li $v0, 10 -syscall -case_void_error: -la $a0 case_void -li $v0, 4 -syscall -li $v0, 10 -syscall -case_no_match_error: -la $a0 case_no_match -li $v0, 4 -syscall -li $v0, 10 -syscall -div_zero_error: -la $a0 div_zero -li $v0, 4 -syscall -li $v0, 10 -syscall -substr_error: -la $a0 substr -li $v0, 4 -syscall -li $v0, 10 -syscall -heap_error: -la $a0 heap -li $v0, 4 -syscall -li $v0, 10 -syscall -main: -addi $sp, $sp, -8 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Main_init -sw $a1, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Main.main -sw $a1, 8($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Object_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 8 -jr $ra -Object.abort: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_0 -sw $t0, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -li $v0, 4 -syscall -la $t0, s_1 -sw $t0, 12($sp) -lw $a0, 12($sp) -li $v0, 4 -syscall -li $v0, 10 -syscall -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -Object.type_name: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -Object.copy: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $a0, 8($t0) -mul $a0, $a0, 4 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t1, $v0 -li $a0, 0 -lw $t3, 8($t0) -copy_object_word: -lw $t2, 0($t0) -sw $t2, 0($t1) -addi $t0, $t0, 4 -addi $t1, $t1, 4 -addi $a0, $a0, 1 -blt $a0, $t3, copy_object_word -sw $v0, 4($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -IO_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 8 -jr $ra -IO.out_string: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -IO.out_int: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -li $v0 , 1 -lw $a0 , 4($sp) -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -IO.in_string: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $a0, temp_string -li $a1, 2048 -li $v0, 8 -syscall -move $t0, $a0 -jump_read_str_char: -li $t1, 0 -lb $t1, 0($t0) -beqz $t1, analize_str_end -addi $t0, $t0, 1 -j jump_read_str_char -analize_str_end: -addi $t0, $t0, -1 -li $t1, 0 -lb $t1, 0($t0) -bne $t1, 10, finish_jump_read_str_char -sb $0, 0($t0) -addi $t0, $t0, -1 -lb $t1, 0($t0) -bne $t1, 13, finish_jump_read_str_char -sb $0, 0($t0) -j analize_str_end -finish_jump_read_str_char: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -IO.in_int: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $v0, 5 -syscall -sw $v0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -String_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -String.length: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t0, 16($t0) -li $a0, 0 -count_char: -lb $t1, 0($t0) -beqz $t1, finish_chars_count -addi $t0, $t0, 1 -addi $a0, $a0, 1 -j count_char -finish_chars_count: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -String.concat: -addi $sp, $sp, -36 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 40($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 8($sp) -lw $t0, 44($sp) -lw $t1, 16($t0) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 16($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t0, 24($sp) -add $a0, $a0, $t0 -addi $a0, $a0, 1 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t3, $v0 -lw $t0, 4($sp) -lw $t1, 12($sp) -copy_str1_char: -lb $t2, 0($t0) -sb $t2, 0($v0) -beqz $t2, concat_str2_char -addi $t0, $t0, 1 -addi $v0, $v0, 1 -j copy_str1_char -concat_str2_char: -lb $t2, 0($t1) -sb $t2, 0($v0) -beqz $t2, finish_str2_concat -addi $t1, $t1, 1 -addi $v0, $v0, 1 -j concat_str2_char -finish_str2_concat: -sb $0, ($v0) -sw $t3, 28($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 36($sp) -lw $a1, 32($sp) -lw $ra, 0($sp) -addi $sp, $sp, 48 -jr $ra -String.substr: -addi $sp, $sp, -20 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -addi $a0, $a0, 1 -li $v0, 9 -syscall -bge $v0, $sp heap_error -lw $t0, 4($sp) -lw $t1, 8($sp) -lw $t4, 24($sp) -lw $t2, 16($t4) -bltz $t0, substr_error -li $a0, 0 -jump_str_char: -beq $a0, $t0, finish_index_jump -addi $a0, $a0, 1 -addi $t2, $t2, 1 -beq $t2, $zero, substr_error -j jump_str_char -finish_index_jump: -li $a0, 0 -move $t3, $v0 -copy_substr_char: -beq $a0, $t1 finish_substr_copy -li $t0, 0 -lb $t0, 0($t2) -sb $t0, 0($v0) -addi $t2, $t2, 1 -beq $t2, $zero, substr_error -addi $v0, $v0, 1 -addi $a0, $a0, 1 -j copy_substr_char -finish_substr_copy: -sb $0, ($v0) -sw $t3, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 20($sp) -lw $a1, 16($sp) -lw $ra, 0($sp) -addi $sp, $sp, 36 -jr $ra -Bool_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Int_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -String_equals: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 20($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $t1, 4($sp) -lw $t2, 8($sp) -compare_str_char: -li $t3, 0 -lb $t3, 0($t1) -li $t4, 0 -lb $t4, 0($t2) -seq $a0, $t3, $t4 -beqz $a0, finish_compare_str -beqz $t3, finish_compare_str -beqz $t4, finish_compare_str -addi $t1, $t1, 1 -addi $t2, $t2, 1 -j compare_str_char -finish_compare_str: -sw $a0, 12($sp) -lw $a1, 12($sp) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -A_init: -addi $sp, $sp, -16 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Object_init -sw $a1, 4($sp) -move $a1, $zero -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -li $t0, 0 -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 16($sp) -lw $t0, 20($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -A.value: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -A.set_var: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $t1, 12($sp) -sw $t1, 16($t0) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -A.method1: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -A.method2: -addi $sp, $sp, -56 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t0, 68($sp) -lw $t1, 16($t0) -sw $t1, 32($sp) -lw $a0, 28($sp) -lw $t1, 32($sp) -add $a0, $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, B_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, B_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal B_init -sw $a1, 52($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 44($sp) -lw $t1, 44($sp) -sw $t1, 56($sp) -lw $a1, 56($sp) -lw $ra, 0($sp) -addi $sp, $sp, 72 -jr $ra -A.method3: -addi $sp, $sp, -52 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t1, 28($sp) -neg $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal C_init -sw $a1, 48($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 40($sp) -lw $t1, 40($sp) -sw $t1, 52($sp) -lw $a1, 52($sp) -lw $ra, 0($sp) -addi $sp, $sp, 64 -jr $ra -A.method4: -addi $sp, $sp, -136 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 148($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 144($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -slt $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 24($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_1 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t1, 28($sp) -sw $t1, 40($sp) -lw $t0, 148($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $t0, 144($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $a0, 52($sp) -lw $t1, 56($sp) -sub $a0, $a0, $t1 -sw $a0, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 60($sp) -lw $t1, 44($sp) -sw $t1, 40($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 72($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 76($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 72($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 68($sp) -lw $t1, 68($sp) -sw $t1, 80($sp) -lw $t1, 80($sp) -sw $t1, 4($sp) -b label_2 -label_1: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -li $t0, 0 -sw $t0, 88($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 92($sp) -lw $t1, 84($sp) -sw $t1, 96($sp) -lw $t0, 144($sp) -lw $t1, 16($t0) -sw $t1, 108($sp) -lw $t0, 148($sp) -lw $t1, 16($t0) -sw $t1, 112($sp) -lw $a0, 108($sp) -lw $t1, 112($sp) -sub $a0, $a0, $t1 -sw $a0, 104($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 116($sp) -lw $t1, 100($sp) -sw $t1, 96($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 128($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 132($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 124($sp) -lw $t1, 124($sp) -sw $t1, 136($sp) -lw $t1, 136($sp) -sw $t1, 4($sp) -label_2: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 152 -jr $ra -A.method5: -addi $sp, $sp, -136 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 1 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -li $t0, 1 -sw $t0, 24($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 28($sp) -lw $t1, 20($sp) -sw $t1, 32($sp) -label_3: -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 48($sp) -lw $t0, 144($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $a0, 48($sp) -lw $t1, 52($sp) -sle $a0, $a0, $t1 -sw $a0, 44($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 40($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 56($sp) -lw $t0, 40($sp) -lw $a0, 16($t0) -bnez $a0, label_4 -b label_5 -label_4: -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 68($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 72($sp) -lw $a0, 68($sp) -lw $t1, 72($sp) -mul $a0, $a0, $t1 -sw $a0, 64($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -move $t0, $sp -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 76($sp) -lw $t1, 60($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -li $t0, 1 -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 108($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t0, 100($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) -add $a0, $a0, $t1 -sw $a0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 112($sp) -lw $t1, 84($sp) -sw $t1, 32($sp) -b label_3 -label_5: -lw $t1, 36($sp) -sw $t1, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, E_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, E_methods -sw $t1, 12($t0) -sw $t0, 128($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal E_init -sw $a1, 132($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 124($sp) -lw $t1, 124($sp) -sw $t1, 136($sp) -lw $a1, 136($sp) -lw $ra, 0($sp) -addi $sp, $sp, 148 -jr $ra -B_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -B.method5: -addi $sp, $sp, -56 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 32($sp) -lw $a0, 28($sp) -lw $t1, 32($sp) -mul $a0, $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, E_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, E_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal E_init -sw $a1, 52($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 44($sp) -lw $t1, 44($sp) -sw $t1, 56($sp) -lw $a1, 56($sp) -lw $ra, 0($sp) -addi $sp, $sp, 68 -jr $ra -C_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal B_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -C.method6: -addi $sp, $sp, -52 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t1, 28($sp) -neg $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 48($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 40($sp) -lw $t1, 40($sp) -sw $t1, 52($sp) -lw $a1, 52($sp) -lw $ra, 0($sp) -addi $sp, $sp, 64 -jr $ra -C.method5: -addi $sp, $sp, -76 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 84($sp) -lw $t1, 16($t0) -sw $t1, 44($sp) -lw $t0, 84($sp) -lw $t1, 16($t0) -sw $t1, 48($sp) -lw $a0, 44($sp) -lw $t1, 48($sp) -mul $a0, $a0, $t1 -sw $a0, 40($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 36($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 52($sp) -lw $t0, 36($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t0, 84($sp) -lw $t1, 16($t0) -sw $t1, 32($sp) -lw $a0, 28($sp) -lw $t1, 32($sp) -mul $a0, $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 56($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, E_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, E_methods -sw $t1, 12($t0) -sw $t0, 68($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal E_init -sw $a1, 72($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 68($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 64($sp) -lw $t1, 64($sp) -sw $t1, 76($sp) -lw $a1, 76($sp) -lw $ra, 0($sp) -addi $sp, $sp, 88 -jr $ra -D_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal B_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -D.method7: -addi $sp, $sp, -244 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t1, 252($sp) -sw $t1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t1, 24($sp) -slt $a0, $a0, $t1 -sw $a0, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 40($sp) -lw $t0, 12($sp) -lw $a0, 16($t0) -bnez $a0, label_6 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 64($sp) -li $t0, 0 -sw $t0, 68($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 72($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) -seq $a0, $a0, $t1 -sw $a0, 52($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 76($sp) -lw $t0, 48($sp) -lw $a0, 16($t0) -bnez $a0, label_7 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -li $t0, 1 -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 108($sp) -lw $t0, 100($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) -seq $a0, $a0, $t1 -sw $a0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 112($sp) -lw $t0, 84($sp) -lw $a0, 16($t0) -bnez $a0, label_8 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 136($sp) -li $t0, 2 -sw $t0, 140($sp) -move $t0, $sp -lw $t1, 140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 144($sp) -lw $t0, 136($sp) -lw $t1, 16($t0) -sw $t1, 128($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 132($sp) -lw $a0, 128($sp) -lw $t1, 132($sp) -seq $a0, $a0, $t1 -sw $a0, 124($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 120($sp) -move $t0, $sp -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 148($sp) -lw $t0, 120($sp) -lw $a0, 16($t0) -bnez $a0, label_9 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 172($sp) -li $t0, 3 -sw $t0, 176($sp) -move $t0, $sp -lw $t1, 176($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 180($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 164($sp) -lw $t0, 172($sp) -lw $t1, 16($t0) -sw $t1, 168($sp) -lw $a0, 164($sp) -lw $t1, 168($sp) -sub $a0, $a0, $t1 -sw $a0, 160($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 156($sp) -move $t0, $sp -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 184($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 248($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 248($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 152($sp) -lw $t1, 152($sp) -sw $t1, 116($sp) -b label_10 -label_9: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 188($sp) -li $t0, 0 -sw $t0, 192($sp) -move $t0, $sp -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 188($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 196($sp) -lw $t1, 188($sp) -sw $t1, 116($sp) -label_10: -lw $t1, 116($sp) -sw $t1, 80($sp) -b label_11 -label_8: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 200($sp) -li $t0, 0 -sw $t0, 204($sp) -move $t0, $sp -lw $t1, 204($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 208($sp) -lw $t1, 200($sp) -sw $t1, 80($sp) -label_11: -lw $t1, 80($sp) -sw $t1, 44($sp) -b label_12 -label_7: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 212($sp) -li $t0, 1 -sw $t0, 216($sp) -move $t0, $sp -lw $t1, 216($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 212($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 220($sp) -lw $t1, 212($sp) -sw $t1, 44($sp) -label_12: -lw $t1, 44($sp) -sw $t1, 8($sp) -b label_13 -label_6: -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 236($sp) -lw $t1, 236($sp) -neg $a0, $t1 -sw $a0, 232($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 228($sp) -move $t0, $sp -lw $t1, 232($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 240($sp) -move $t0, $sp -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 248($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 248($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 224($sp) -lw $t1, 224($sp) -sw $t1, 8($sp) -label_13: -lw $t1, 8($sp) -sw $t1, 244($sp) -lw $a1, 244($sp) -lw $ra, 0($sp) -addi $sp, $sp, 256 -jr $ra -E_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -E.method6: -addi $sp, $sp, -68 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 36($sp) -li $t0, 8 -sw $t0, 40($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 44($sp) -lw $t0, 76($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t0, 36($sp) -lw $t1, 16($t0) -sw $t1, 32($sp) -lw $a0, 28($sp) -lw $t1, 32($sp) -beq $t1, 0, div_zero_error -div $a0, $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 48($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -move $t0, $sp -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 64($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 56($sp) -lw $t1, 56($sp) -sw $t1, 68($sp) -lw $a1, 68($sp) -lw $ra, 0($sp) -addi $sp, $sp, 80 -jr $ra -A2I_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Object_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -A2I.c2i: -addi $sp, $sp, -496 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_3 -sw $t0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 36($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_14 -la $t0, s_4 -sw $t0, 60($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 64($sp) -move $t0, $sp -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 68($sp) -move $t0, $sp -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 72($sp) -lw $t0, 44($sp) -lw $a0, 16($t0) -bnez $a0, label_15 -la $t0, s_5 -sw $t0, 96($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 104($sp) -move $t0, $sp -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 84($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 80($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 108($sp) -lw $t0, 80($sp) -lw $a0, 16($t0) -bnez $a0, label_16 -la $t0, s_6 -sw $t0, 132($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 136($sp) -move $t0, $sp -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 140($sp) -move $t0, $sp -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 116($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 144($sp) -lw $t0, 116($sp) -lw $a0, 16($t0) -bnez $a0, label_17 -la $t0, s_7 -sw $t0, 168($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 172($sp) -move $t0, $sp -lw $t1, 168($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 176($sp) -move $t0, $sp -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 156($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 152($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 180($sp) -lw $t0, 152($sp) -lw $a0, 16($t0) -bnez $a0, label_18 -la $t0, s_8 -sw $t0, 204($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 208($sp) -move $t0, $sp -lw $t1, 204($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 212($sp) -move $t0, $sp -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 192($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 188($sp) -move $t0, $sp -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 188($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 216($sp) -lw $t0, 188($sp) -lw $a0, 16($t0) -bnez $a0, label_19 -la $t0, s_9 -sw $t0, 240($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 244($sp) -move $t0, $sp -lw $t1, 240($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 244($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 248($sp) -move $t0, $sp -lw $t1, 244($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 228($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 224($sp) -move $t0, $sp -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 224($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 252($sp) -lw $t0, 224($sp) -lw $a0, 16($t0) -bnez $a0, label_20 -la $t0, s_10 -sw $t0, 276($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 280($sp) -move $t0, $sp -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 280($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 284($sp) -move $t0, $sp -lw $t1, 280($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 264($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 260($sp) -move $t0, $sp -lw $t1, 264($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 260($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 288($sp) -lw $t0, 260($sp) -lw $a0, 16($t0) -bnez $a0, label_21 -la $t0, s_11 -sw $t0, 312($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 316($sp) -move $t0, $sp -lw $t1, 312($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 320($sp) -move $t0, $sp -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 300($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 296($sp) -move $t0, $sp -lw $t1, 300($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 296($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 324($sp) -lw $t0, 296($sp) -lw $a0, 16($t0) -bnez $a0, label_22 -la $t0, s_12 -sw $t0, 348($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 352($sp) -move $t0, $sp -lw $t1, 348($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 352($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 356($sp) -move $t0, $sp -lw $t1, 352($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 336($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 332($sp) -move $t0, $sp -lw $t1, 336($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 332($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 360($sp) -lw $t0, 332($sp) -lw $a0, 16($t0) -bnez $a0, label_23 -move $t0, $sp -lw $t1, 500($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 500($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 0($t2) -jal $t3 -sw $a1, 364($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 368($sp) -li $t0, 0 -sw $t0, 372($sp) -move $t0, $sp -lw $t1, 372($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 368($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 376($sp) -lw $t1, 368($sp) -sw $t1, 328($sp) -b label_24 -label_23: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 380($sp) -li $t0, 9 -sw $t0, 384($sp) -move $t0, $sp -lw $t1, 384($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 380($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 388($sp) -lw $t1, 380($sp) -sw $t1, 328($sp) -label_24: -lw $t1, 328($sp) -sw $t1, 292($sp) -b label_25 -label_22: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 392($sp) -li $t0, 8 -sw $t0, 396($sp) -move $t0, $sp -lw $t1, 396($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 392($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 400($sp) -lw $t1, 392($sp) -sw $t1, 292($sp) -label_25: -lw $t1, 292($sp) -sw $t1, 256($sp) -b label_26 -label_21: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 404($sp) -li $t0, 7 -sw $t0, 408($sp) -move $t0, $sp -lw $t1, 408($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 404($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 412($sp) -lw $t1, 404($sp) -sw $t1, 256($sp) -label_26: -lw $t1, 256($sp) -sw $t1, 220($sp) -b label_27 -label_20: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 416($sp) -li $t0, 6 -sw $t0, 420($sp) -move $t0, $sp -lw $t1, 420($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 416($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 424($sp) -lw $t1, 416($sp) -sw $t1, 220($sp) -label_27: -lw $t1, 220($sp) -sw $t1, 184($sp) -b label_28 -label_19: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 428($sp) -li $t0, 5 -sw $t0, 432($sp) -move $t0, $sp -lw $t1, 432($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 428($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 436($sp) -lw $t1, 428($sp) -sw $t1, 184($sp) -label_28: -lw $t1, 184($sp) -sw $t1, 148($sp) -b label_29 -label_18: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 440($sp) -li $t0, 4 -sw $t0, 444($sp) -move $t0, $sp -lw $t1, 444($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 440($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 448($sp) -lw $t1, 440($sp) -sw $t1, 148($sp) -label_29: -lw $t1, 148($sp) -sw $t1, 112($sp) -b label_30 -label_17: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 452($sp) -li $t0, 3 -sw $t0, 456($sp) -move $t0, $sp -lw $t1, 456($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 452($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 460($sp) -lw $t1, 452($sp) -sw $t1, 112($sp) -label_30: -lw $t1, 112($sp) -sw $t1, 76($sp) -b label_31 -label_16: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 464($sp) -li $t0, 2 -sw $t0, 468($sp) -move $t0, $sp -lw $t1, 468($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 464($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 472($sp) -lw $t1, 464($sp) -sw $t1, 76($sp) -label_31: -lw $t1, 76($sp) -sw $t1, 40($sp) -b label_32 -label_15: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 476($sp) -li $t0, 1 -sw $t0, 480($sp) -move $t0, $sp -lw $t1, 480($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 476($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 484($sp) -lw $t1, 476($sp) -sw $t1, 40($sp) -label_32: -lw $t1, 40($sp) -sw $t1, 4($sp) -b label_33 -label_14: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 488($sp) -li $t0, 0 -sw $t0, 492($sp) -move $t0, $sp -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 488($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 496($sp) -lw $t1, 488($sp) -sw $t1, 4($sp) -label_33: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 508 -jr $ra -A2I.i2c: -addi $sp, $sp, -496 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 24($sp) -li $t0, 0 -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -seq $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 36($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_34 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -li $t0, 1 -sw $t0, 64($sp) -move $t0, $sp -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 68($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $a0, 52($sp) -lw $t1, 56($sp) -seq $a0, $a0, $t1 -sw $a0, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 72($sp) -lw $t0, 44($sp) -lw $a0, 16($t0) -bnez $a0, label_35 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 96($sp) -li $t0, 2 -sw $t0, 100($sp) -move $t0, $sp -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 104($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 88($sp) -lw $t0, 96($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $a0, 88($sp) -lw $t1, 92($sp) -seq $a0, $a0, $t1 -sw $a0, 84($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 80($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 108($sp) -lw $t0, 80($sp) -lw $a0, 16($t0) -bnez $a0, label_36 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 132($sp) -li $t0, 3 -sw $t0, 136($sp) -move $t0, $sp -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 140($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 124($sp) -lw $t0, 132($sp) -lw $t1, 16($t0) -sw $t1, 128($sp) -lw $a0, 124($sp) -lw $t1, 128($sp) -seq $a0, $a0, $t1 -sw $a0, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 116($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 144($sp) -lw $t0, 116($sp) -lw $a0, 16($t0) -bnez $a0, label_37 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 168($sp) -li $t0, 4 -sw $t0, 172($sp) -move $t0, $sp -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 168($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 176($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 160($sp) -lw $t0, 168($sp) -lw $t1, 16($t0) -sw $t1, 164($sp) -lw $a0, 160($sp) -lw $t1, 164($sp) -seq $a0, $a0, $t1 -sw $a0, 156($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 152($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 180($sp) -lw $t0, 152($sp) -lw $a0, 16($t0) -bnez $a0, label_38 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 204($sp) -li $t0, 5 -sw $t0, 208($sp) -move $t0, $sp -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 204($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 212($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 196($sp) -lw $t0, 204($sp) -lw $t1, 16($t0) -sw $t1, 200($sp) -lw $a0, 196($sp) -lw $t1, 200($sp) -seq $a0, $a0, $t1 -sw $a0, 192($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 188($sp) -move $t0, $sp -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 188($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 216($sp) -lw $t0, 188($sp) -lw $a0, 16($t0) -bnez $a0, label_39 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 240($sp) -li $t0, 6 -sw $t0, 244($sp) -move $t0, $sp -lw $t1, 244($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 240($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 248($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 232($sp) -lw $t0, 240($sp) -lw $t1, 16($t0) -sw $t1, 236($sp) -lw $a0, 232($sp) -lw $t1, 236($sp) -seq $a0, $a0, $t1 -sw $a0, 228($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 224($sp) -move $t0, $sp -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 224($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 252($sp) -lw $t0, 224($sp) -lw $a0, 16($t0) -bnez $a0, label_40 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 276($sp) -li $t0, 7 -sw $t0, 280($sp) -move $t0, $sp -lw $t1, 280($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 284($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 268($sp) -lw $t0, 276($sp) -lw $t1, 16($t0) -sw $t1, 272($sp) -lw $a0, 268($sp) -lw $t1, 272($sp) -seq $a0, $a0, $t1 -sw $a0, 264($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 260($sp) -move $t0, $sp -lw $t1, 264($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 260($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 288($sp) -lw $t0, 260($sp) -lw $a0, 16($t0) -bnez $a0, label_41 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 312($sp) -li $t0, 8 -sw $t0, 316($sp) -move $t0, $sp -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 312($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 320($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 304($sp) -lw $t0, 312($sp) -lw $t1, 16($t0) -sw $t1, 308($sp) -lw $a0, 304($sp) -lw $t1, 308($sp) -seq $a0, $a0, $t1 -sw $a0, 300($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 296($sp) -move $t0, $sp -lw $t1, 300($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 296($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 324($sp) -lw $t0, 296($sp) -lw $a0, 16($t0) -bnez $a0, label_42 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 348($sp) -li $t0, 9 -sw $t0, 352($sp) -move $t0, $sp -lw $t1, 352($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 348($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 356($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 340($sp) -lw $t0, 348($sp) -lw $t1, 16($t0) -sw $t1, 344($sp) -lw $a0, 340($sp) -lw $t1, 344($sp) -seq $a0, $a0, $t1 -sw $a0, 336($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 332($sp) -move $t0, $sp -lw $t1, 336($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 332($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 360($sp) -lw $t0, 332($sp) -lw $a0, 16($t0) -bnez $a0, label_43 -move $t0, $sp -lw $t1, 500($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 500($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 0($t2) -jal $t3 -sw $a1, 364($sp) -la $t0, empty_str -sw $t0, 368($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 372($sp) -move $t0, $sp -lw $t1, 368($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 372($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 376($sp) -lw $t1, 372($sp) -sw $t1, 328($sp) -b label_44 -label_43: -la $t0, s_12 -sw $t0, 380($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 384($sp) -move $t0, $sp -lw $t1, 380($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 384($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 388($sp) -lw $t1, 384($sp) -sw $t1, 328($sp) -label_44: -lw $t1, 328($sp) -sw $t1, 292($sp) -b label_45 -label_42: -la $t0, s_11 -sw $t0, 392($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 396($sp) -move $t0, $sp -lw $t1, 392($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 396($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 400($sp) -lw $t1, 396($sp) -sw $t1, 292($sp) -label_45: -lw $t1, 292($sp) -sw $t1, 256($sp) -b label_46 -label_41: -la $t0, s_10 -sw $t0, 404($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 408($sp) -move $t0, $sp -lw $t1, 404($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 408($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 412($sp) -lw $t1, 408($sp) -sw $t1, 256($sp) -label_46: -lw $t1, 256($sp) -sw $t1, 220($sp) -b label_47 -label_40: -la $t0, s_9 -sw $t0, 416($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 420($sp) -move $t0, $sp -lw $t1, 416($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 420($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 424($sp) -lw $t1, 420($sp) -sw $t1, 220($sp) -label_47: -lw $t1, 220($sp) -sw $t1, 184($sp) -b label_48 -label_39: -la $t0, s_8 -sw $t0, 428($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 432($sp) -move $t0, $sp -lw $t1, 428($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 432($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 436($sp) -lw $t1, 432($sp) -sw $t1, 184($sp) -label_48: -lw $t1, 184($sp) -sw $t1, 148($sp) -b label_49 -label_38: -la $t0, s_7 -sw $t0, 440($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 444($sp) -move $t0, $sp -lw $t1, 440($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 444($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 448($sp) -lw $t1, 444($sp) -sw $t1, 148($sp) -label_49: -lw $t1, 148($sp) -sw $t1, 112($sp) -b label_50 -label_37: -la $t0, s_6 -sw $t0, 452($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 456($sp) -move $t0, $sp -lw $t1, 452($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 456($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 460($sp) -lw $t1, 456($sp) -sw $t1, 112($sp) -label_50: -lw $t1, 112($sp) -sw $t1, 76($sp) -b label_51 -label_36: -la $t0, s_5 -sw $t0, 464($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 468($sp) -move $t0, $sp -lw $t1, 464($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 468($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 472($sp) -lw $t1, 468($sp) -sw $t1, 76($sp) -label_51: -lw $t1, 76($sp) -sw $t1, 40($sp) -b label_52 -label_35: -la $t0, s_4 -sw $t0, 476($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 480($sp) -move $t0, $sp -lw $t1, 476($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 480($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 484($sp) -lw $t1, 480($sp) -sw $t1, 40($sp) -label_52: -lw $t1, 40($sp) -sw $t1, 4($sp) -b label_53 -label_34: -la $t0, s_3 -sw $t0, 488($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 492($sp) -move $t0, $sp -lw $t1, 488($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 496($sp) -lw $t1, 492($sp) -sw $t1, 4($sp) -label_53: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 508 -jr $ra -A2I.a2i: -addi $sp, $sp, -312 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -seq $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 40($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_54 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 68($sp) -li $t0, 1 -sw $t0, 72($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 76($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 80($sp) -li $t0, 0 -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 88($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 64($sp) -la $t0, s_13 -sw $t0, 92($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 96($sp) -move $t0, $sp -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 100($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 52($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 104($sp) -lw $t0, 48($sp) -lw $a0, 16($t0) -bnez $a0, label_55 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 132($sp) -li $t0, 1 -sw $t0, 136($sp) -move $t0, $sp -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 140($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 144($sp) -li $t0, 0 -sw $t0, 148($sp) -move $t0, $sp -lw $t1, 148($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 144($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 152($sp) -move $t0, $sp -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 144($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 128($sp) -la $t0, s_14 -sw $t0, 156($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 160($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 164($sp) -move $t0, $sp -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 116($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 112($sp) -move $t0, $sp -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 168($sp) -lw $t0, 112($sp) -lw $a0, 16($t0) -bnez $a0, label_56 -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 24($t2) -jal $t3 -sw $a1, 172($sp) -lw $t1, 172($sp) -sw $t1, 108($sp) -b label_57 -label_56: -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 200($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 204($sp) -li $t0, 1 -sw $t0, 208($sp) -move $t0, $sp -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 204($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 212($sp) -lw $t0, 200($sp) -lw $t1, 16($t0) -sw $t1, 192($sp) -lw $t0, 204($sp) -lw $t1, 16($t0) -sw $t1, 196($sp) -lw $a0, 192($sp) -lw $t1, 196($sp) -sub $a0, $a0, $t1 -sw $a0, 188($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 184($sp) -move $t0, $sp -lw $t1, 188($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 184($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 216($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 220($sp) -li $t0, 1 -sw $t0, 224($sp) -move $t0, $sp -lw $t1, 224($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 220($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 228($sp) -move $t0, $sp -lw $t1, 184($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 220($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 180($sp) -move $t0, $sp -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 24($t2) -jal $t3 -sw $a1, 176($sp) -lw $t1, 176($sp) -sw $t1, 108($sp) -label_57: -lw $t1, 108($sp) -sw $t1, 44($sp) -b label_58 -label_55: -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 268($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 272($sp) -li $t0, 1 -sw $t0, 276($sp) -move $t0, $sp -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 272($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 280($sp) -lw $t0, 268($sp) -lw $t1, 16($t0) -sw $t1, 260($sp) -lw $t0, 272($sp) -lw $t1, 16($t0) -sw $t1, 264($sp) -lw $a0, 260($sp) -lw $t1, 264($sp) -sub $a0, $a0, $t1 -sw $a0, 256($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 252($sp) -move $t0, $sp -lw $t1, 256($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 252($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 284($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 288($sp) -li $t0, 1 -sw $t0, 292($sp) -move $t0, $sp -lw $t1, 292($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 288($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 296($sp) -move $t0, $sp -lw $t1, 252($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 288($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 248($sp) -move $t0, $sp -lw $t1, 248($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 24($t2) -jal $t3 -sw $a1, 244($sp) -lw $t0, 244($sp) -lw $t1, 16($t0) -sw $t1, 240($sp) -lw $t1, 240($sp) -neg $a0, $t1 -sw $a0, 236($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 232($sp) -move $t0, $sp -lw $t1, 236($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 232($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 300($sp) -lw $t1, 232($sp) -sw $t1, 44($sp) -label_58: -lw $t1, 44($sp) -sw $t1, 4($sp) -b label_59 -label_54: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 304($sp) -li $t0, 0 -sw $t0, 308($sp) -move $t0, $sp -lw $t1, 308($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 312($sp) -lw $t1, 304($sp) -sw $t1, 4($sp) -label_59: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 324 -jr $ra -A2I.a2i_aux: -addi $sp, $sp, -188 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -move $t0, $sp -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 20($sp) -lw $t1, 20($sp) -sw $t1, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t1, 28($sp) -sw $t1, 40($sp) -label_60: -lw $t0, 40($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) -slt $a0, $a0, $t1 -sw $a0, 52($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 64($sp) -lw $t0, 48($sp) -lw $a0, 16($t0) -bnez $a0, label_61 -b label_62 -label_61: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -li $t0, 10 -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 108($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t0, 100($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) -mul $a0, $a0, $t1 -sw $a0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 112($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 124($sp) -li $t0, 1 -sw $t0, 128($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 132($sp) -move $t0, $sp -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 120($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 192($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 116($sp) -lw $t0, 84($sp) -lw $t1, 16($t0) -sw $t1, 76($sp) -lw $t0, 116($sp) -lw $t1, 16($t0) -sw $t1, 80($sp) -lw $a0, 76($sp) -lw $t1, 80($sp) -add $a0, $a0, $t1 -sw $a0, 72($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 68($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 136($sp) -lw $t1, 68($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 160($sp) -li $t0, 1 -sw $t0, 164($sp) -move $t0, $sp -lw $t1, 164($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 168($sp) -lw $t0, 40($sp) -lw $t1, 16($t0) -sw $t1, 152($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 156($sp) -lw $a0, 152($sp) -lw $t1, 156($sp) -add $a0, $a0, $t1 -sw $a0, 148($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 144($sp) -move $t0, $sp -lw $t1, 148($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 144($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 172($sp) -lw $t1, 144($sp) -sw $t1, 40($sp) -b label_60 -label_62: -lw $t1, 44($sp) -sw $t1, 180($sp) -lw $t1, 180($sp) -sw $t1, 184($sp) -lw $t1, 16($sp) -sw $t1, 188($sp) -lw $a1, 188($sp) -lw $ra, 0($sp) -addi $sp, $sp, 200 -jr $ra -A2I.i2a: -addi $sp, $sp, -156 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 24($sp) -li $t0, 0 -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t0, 164($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -seq $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 36($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_63 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -li $t0, 0 -sw $t0, 64($sp) -move $t0, $sp -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 68($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $t0, 164($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $a0, 52($sp) -lw $t1, 56($sp) -slt $a0, $a0, $t1 -sw $a0, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 72($sp) -lw $t0, 44($sp) -lw $a0, 16($t0) -bnez $a0, label_64 -la $t0, s_13 -sw $t0, 80($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 124($sp) -li $t0, 1 -sw $t0, 128($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 132($sp) -lw $t0, 124($sp) -lw $t1, 16($t0) -sw $t1, 120($sp) -lw $t1, 120($sp) -neg $a0, $t1 -sw $a0, 116($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 112($sp) -move $t0, $sp -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 136($sp) -lw $t0, 164($sp) -lw $t1, 16($t0) -sw $t1, 104($sp) -lw $t0, 112($sp) -lw $t1, 16($t0) -sw $t1, 108($sp) -lw $a0, 104($sp) -lw $t1, 108($sp) -mul $a0, $a0, $t1 -sw $a0, 100($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 96($sp) -move $t0, $sp -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 140($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 92($sp) -move $t0, $sp -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 76($sp) -lw $t1, 76($sp) -sw $t1, 40($sp) -b label_65 -label_64: -move $t0, $sp -lw $t1, 164($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 144($sp) -lw $t1, 144($sp) -sw $t1, 40($sp) -label_65: -lw $t1, 40($sp) -sw $t1, 4($sp) -b label_66 -label_63: -la $t0, s_3 -sw $t0, 148($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 152($sp) -move $t0, $sp -lw $t1, 148($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 156($sp) -lw $t1, 152($sp) -sw $t1, 4($sp) -label_66: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 168 -jr $ra -A2I.i2a_aux: -addi $sp, $sp, -152 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 24($sp) -li $t0, 0 -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -seq $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 36($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_67 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 56($sp) -li $t0, 10 -sw $t0, 60($sp) -move $t0, $sp -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 56($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 64($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 48($sp) -lw $t0, 56($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $a0, 48($sp) -lw $t1, 52($sp) -beq $t1, 0, div_zero_error -div $a0, $a0, $t1 -sw $a0, 44($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 40($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 68($sp) -lw $t1, 40($sp) -sw $t1, 72($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 80($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 120($sp) -li $t0, 10 -sw $t0, 124($sp) -move $t0, $sp -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 128($sp) -lw $t0, 72($sp) -lw $t1, 16($t0) -sw $t1, 112($sp) -lw $t0, 120($sp) -lw $t1, 16($t0) -sw $t1, 116($sp) -lw $a0, 112($sp) -lw $t1, 116($sp) -mul $a0, $a0, $t1 -sw $a0, 108($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 108($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 132($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $t0, 104($sp) -lw $t1, 16($t0) -sw $t1, 100($sp) -lw $a0, 96($sp) -lw $t1, 100($sp) -sub $a0, $a0, $t1 -sw $a0, 92($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 88($sp) -move $t0, $sp -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 136($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 84($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 76($sp) -lw $t1, 76($sp) -sw $t1, 140($sp) -lw $t1, 140($sp) -sw $t1, 4($sp) -b label_68 -label_67: -la $t0, empty_str -sw $t0, 144($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 148($sp) -move $t0, $sp -lw $t1, 144($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 148($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 152($sp) -lw $t1, 148($sp) -sw $t1, 4($sp) -label_68: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 164 -jr $ra -Main_init: -addi $sp, $sp, -28 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal IO_init -sw $a1, 4($sp) -move $a1, $zero -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -la $t0, empty_str -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 16($sp) -lw $t0, 32($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -lw $t0, 32($sp) -la $t1, void -sw $t1, 20($t0) -lw $t0, 32($sp) -la $t1, void -sw $t1, 24($t0) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -li $t0, 1 -sw $t0, 24($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 28($sp) -lw $t0, 32($sp) -lw $t1, 20($sp) -sw $t1, 28($t0) -lw $ra, 0($sp) -addi $sp, $sp, 36 -jr $ra -Main.menu: -addi $sp, $sp, -356 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_15 -sw $t0, 8($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 4($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 20($sp) -la $t0, s_16 -sw $t0, 32($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 36($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 40($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 28($sp) -la $t0, s_17 -sw $t0, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 52($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 56($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 44($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 60($sp) -la $t0, s_18 -sw $t0, 72($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 76($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 76($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 80($sp) -move $t0, $sp -lw $t1, 76($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 68($sp) -la $t0, s_19 -sw $t0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 92($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 96($sp) -move $t0, $sp -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 84($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 100($sp) -la $t0, s_20 -sw $t0, 112($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 116($sp) -move $t0, $sp -lw $t1, 112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 120($sp) -move $t0, $sp -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 108($sp) -la $t0, s_21 -sw $t0, 128($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 132($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 136($sp) -move $t0, $sp -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 124($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 140($sp) -la $t0, s_22 -sw $t0, 152($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 156($sp) -move $t0, $sp -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 160($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 148($sp) -la $t0, s_23 -sw $t0, 168($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 172($sp) -move $t0, $sp -lw $t1, 168($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 176($sp) -move $t0, $sp -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 164($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 180($sp) -la $t0, s_24 -sw $t0, 192($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 196($sp) -move $t0, $sp -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 200($sp) -move $t0, $sp -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 188($sp) -la $t0, s_25 -sw $t0, 208($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 212($sp) -move $t0, $sp -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 212($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 216($sp) -move $t0, $sp -lw $t1, 212($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 204($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 220($sp) -la $t0, s_26 -sw $t0, 232($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 236($sp) -move $t0, $sp -lw $t1, 232($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 236($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 240($sp) -move $t0, $sp -lw $t1, 236($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 228($sp) -la $t0, s_27 -sw $t0, 248($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 252($sp) -move $t0, $sp -lw $t1, 248($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 252($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 256($sp) -move $t0, $sp -lw $t1, 252($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 244($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 260($sp) -la $t0, s_28 -sw $t0, 272($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 276($sp) -move $t0, $sp -lw $t1, 272($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 280($sp) -move $t0, $sp -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 268($sp) -la $t0, s_29 -sw $t0, 288($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 292($sp) -move $t0, $sp -lw $t1, 288($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 292($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 296($sp) -move $t0, $sp -lw $t1, 292($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 284($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 300($sp) -la $t0, s_30 -sw $t0, 312($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 316($sp) -move $t0, $sp -lw $t1, 312($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 320($sp) -move $t0, $sp -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 308($sp) -la $t0, s_31 -sw $t0, 328($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 332($sp) -move $t0, $sp -lw $t1, 328($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 332($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 336($sp) -move $t0, $sp -lw $t1, 332($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 324($sp) -la $t0, s_32 -sw $t0, 344($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 348($sp) -move $t0, $sp -lw $t1, 344($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 348($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 352($sp) -move $t0, $sp -lw $t1, 348($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 340($sp) -move $t0, $sp -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 356($sp) -lw $a1, 356($sp) -lw $ra, 0($sp) -addi $sp, $sp, 364 -jr $ra -Main.prompt: -addi $sp, $sp, -36 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_1 -sw $t0, 8($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 4($sp) -la $t0, s_33 -sw $t0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 20($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 36($sp) -lw $a1, 36($sp) -lw $ra, 0($sp) -addi $sp, $sp, 44 -jr $ra -Main.get_int: -addi $sp, $sp, -32 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A2I_init -sw $a1, 8($sp) -lw $t1, 4($sp) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 16($sp) -lw $t1, 16($sp) -sw $t1, 20($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 24($sp) -lw $t1, 24($sp) -sw $t1, 28($sp) -lw $t1, 28($sp) -sw $t1, 32($sp) -lw $a1, 32($sp) -lw $ra, 0($sp) -addi $sp, $sp, 40 -jr $ra -Main.is_even: -addi $sp, $sp, -196 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t1, 204($sp) -sw $t1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t1, 24($sp) -slt $a0, $a0, $t1 -sw $a0, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 40($sp) -lw $t0, 12($sp) -lw $a0, 16($t0) -bnez $a0, label_69 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 64($sp) -li $t0, 0 -sw $t0, 68($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 72($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) -seq $a0, $a0, $t1 -sw $a0, 52($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 76($sp) -lw $t0, 48($sp) -lw $a0, 16($t0) -bnez $a0, label_70 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -li $t0, 1 -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 108($sp) -lw $t0, 100($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) -seq $a0, $a0, $t1 -sw $a0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 112($sp) -lw $t0, 84($sp) -lw $a0, 16($t0) -bnez $a0, label_71 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 136($sp) -li $t0, 2 -sw $t0, 140($sp) -move $t0, $sp -lw $t1, 140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 144($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 128($sp) -lw $t0, 136($sp) -lw $t1, 16($t0) -sw $t1, 132($sp) -lw $a0, 128($sp) -lw $t1, 132($sp) -sub $a0, $a0, $t1 -sw $a0, 124($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 120($sp) -move $t0, $sp -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 148($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 116($sp) -lw $t1, 116($sp) -sw $t1, 80($sp) -b label_72 -label_71: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 152($sp) -li $t0, 0 -sw $t0, 156($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 160($sp) -lw $t1, 152($sp) -sw $t1, 80($sp) -label_72: -lw $t1, 80($sp) -sw $t1, 44($sp) -b label_73 -label_70: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 164($sp) -li $t0, 1 -sw $t0, 168($sp) -move $t0, $sp -lw $t1, 168($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 164($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 172($sp) -lw $t1, 164($sp) -sw $t1, 44($sp) -label_73: -lw $t1, 44($sp) -sw $t1, 8($sp) -b label_74 -label_69: -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 188($sp) -lw $t1, 188($sp) -neg $a0, $t1 -sw $a0, 184($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 180($sp) -move $t0, $sp -lw $t1, 184($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 192($sp) -move $t0, $sp -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 176($sp) -lw $t1, 176($sp) -sw $t1, 8($sp) -label_74: -lw $t1, 8($sp) -sw $t1, 196($sp) -lw $a1, 196($sp) -lw $ra, 0($sp) -addi $sp, $sp, 208 -jr $ra -Main.class_type: -addi $sp, $sp, -124 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 132($sp) -lw $t1, 0($t0) -la $a0, void -bne $t1 $a0 label_76 -b case_void_error -label_76: -blt $t1 9 label_77 -bgt $t1 9 label_77 -lw $t1, 132($sp) -sw $t1, 8($sp) -la $t0, s_34 -sw $t0, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 24($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 12($sp) -lw $t1, 12($sp) -sw $t1, 4($sp) -b label_75 -label_77: -blt $t1 8 label_78 -bgt $t1 9 label_78 -lw $t1, 132($sp) -sw $t1, 28($sp) -la $t0, s_35 -sw $t0, 36($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 40($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 44($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 32($sp) -lw $t1, 32($sp) -sw $t1, 4($sp) -b label_75 -label_78: -blt $t1 7 label_79 -bgt $t1 7 label_79 -lw $t1, 132($sp) -sw $t1, 48($sp) -la $t0, s_36 -sw $t0, 56($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -move $t0, $sp -lw $t1, 56($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 64($sp) -move $t0, $sp -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 52($sp) -lw $t1, 52($sp) -sw $t1, 4($sp) -b label_75 -label_79: -blt $t1 6 label_80 -bgt $t1 9 label_80 -lw $t1, 132($sp) -sw $t1, 68($sp) -la $t0, s_37 -sw $t0, 76($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 80($sp) -move $t0, $sp -lw $t1, 76($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 84($sp) -move $t0, $sp -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 72($sp) -lw $t1, 72($sp) -sw $t1, 4($sp) -b label_75 -label_80: -blt $t1 5 label_81 -bgt $t1 9 label_81 -lw $t1, 132($sp) -sw $t1, 88($sp) -la $t0, s_38 -sw $t0, 96($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 104($sp) -move $t0, $sp -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 92($sp) -lw $t1, 92($sp) -sw $t1, 4($sp) -b label_75 -label_81: -blt $t1 0 label_82 -bgt $t1 9 label_82 -lw $t1, 132($sp) -sw $t1, 108($sp) -la $t0, s_39 -sw $t0, 116($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 120($sp) -move $t0, $sp -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 124($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 112($sp) -lw $t1, 112($sp) -sw $t1, 4($sp) -b label_75 -label_82: -b case_no_match_error -label_75: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 136 -jr $ra -Main.print: -addi $sp, $sp, -44 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A2I_init -sw $a1, 8($sp) -lw $t1, 4($sp) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 52($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 24($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 20($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 16($sp) -la $t0, s_40 -sw $t0, 32($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 36($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 40($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 28($sp) -lw $t1, 28($sp) -sw $t1, 44($sp) -lw $a1, 44($sp) -lw $ra, 0($sp) -addi $sp, $sp, 56 -jr $ra -Main.main: -addi $sp, $sp, -1136 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 8($sp) -lw $t0, 1140($sp) -lw $t1, 4($sp) -sw $t1, 20($t0) -label_83: -lw $t0, 1140($sp) -lw $t1, 28($t0) -sw $t1, 20($sp) -lw $t0, 20($sp) -lw $a0, 16($t0) -bnez $a0, label_84 -b label_85 -label_84: -la $t0, s_41 -sw $t0, 28($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 36($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 24($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 40($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 56($sp) -move $t0, $sp -lw $t1, 56($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 52($sp) -lw $t0, 52($sp) -lw $a0, 16($t0) -bnez $a0, label_86 -la $t0, s_42 -sw $t0, 68($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 72($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 76($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 64($sp) -lw $t1, 64($sp) -sw $t1, 48($sp) -b label_87 -label_86: -la $t0, s_43 -sw $t0, 84($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 88($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 92($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 80($sp) -lw $t1, 80($sp) -sw $t1, 48($sp) -label_87: -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 44($t2) -jal $t3 -sw $a1, 96($sp) -move $t0, $sp -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 104($sp) -lw $t0, 1140($sp) -lw $t1, 104($sp) -sw $t1, 16($t0) -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_44 -sw $t0, 136($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 140($sp) -move $t0, $sp -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 144($sp) -move $t0, $sp -lw $t1, 140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 116($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 148($sp) -lw $t0, 116($sp) -lw $a0, 16($t0) -bnez $a0, label_88 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_45 -sw $t0, 176($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 180($sp) -move $t0, $sp -lw $t1, 176($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 184($sp) -move $t0, $sp -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 160($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 156($sp) -move $t0, $sp -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 188($sp) -lw $t0, 156($sp) -lw $a0, 16($t0) -bnez $a0, label_89 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_46 -sw $t0, 216($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 220($sp) -move $t0, $sp -lw $t1, 216($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 220($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 224($sp) -move $t0, $sp -lw $t1, 220($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 200($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 196($sp) -move $t0, $sp -lw $t1, 200($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 228($sp) -lw $t0, 196($sp) -lw $a0, 16($t0) -bnez $a0, label_90 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_47 -sw $t0, 256($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 260($sp) -move $t0, $sp -lw $t1, 256($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 260($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 264($sp) -move $t0, $sp -lw $t1, 260($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 240($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 236($sp) -move $t0, $sp -lw $t1, 240($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 236($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 268($sp) -lw $t0, 236($sp) -lw $a0, 16($t0) -bnez $a0, label_91 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_48 -sw $t0, 296($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 300($sp) -move $t0, $sp -lw $t1, 296($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 300($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 304($sp) -move $t0, $sp -lw $t1, 300($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 280($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 276($sp) -move $t0, $sp -lw $t1, 280($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 308($sp) -lw $t0, 276($sp) -lw $a0, 16($t0) -bnez $a0, label_92 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_49 -sw $t0, 336($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 340($sp) -move $t0, $sp -lw $t1, 336($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 340($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 344($sp) -move $t0, $sp -lw $t1, 340($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 320($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 316($sp) -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 348($sp) -lw $t0, 316($sp) -lw $a0, 16($t0) -bnez $a0, label_93 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_50 -sw $t0, 376($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 380($sp) -move $t0, $sp -lw $t1, 376($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 380($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 384($sp) -move $t0, $sp -lw $t1, 380($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 360($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 356($sp) -move $t0, $sp -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 356($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 388($sp) -lw $t0, 356($sp) -lw $a0, 16($t0) -bnez $a0, label_94 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_51 -sw $t0, 416($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 420($sp) -move $t0, $sp -lw $t1, 416($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 420($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 424($sp) -move $t0, $sp -lw $t1, 420($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 400($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 396($sp) -move $t0, $sp -lw $t1, 400($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 396($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 428($sp) -lw $t0, 396($sp) -lw $a0, 16($t0) -bnez $a0, label_95 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_52 -sw $t0, 456($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 460($sp) -move $t0, $sp -lw $t1, 456($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 460($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 464($sp) -move $t0, $sp -lw $t1, 460($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 440($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 436($sp) -move $t0, $sp -lw $t1, 440($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 436($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 468($sp) -lw $t0, 436($sp) -lw $a0, 16($t0) -bnez $a0, label_96 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_53 -sw $t0, 496($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 500($sp) -move $t0, $sp -lw $t1, 496($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 500($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 504($sp) -move $t0, $sp -lw $t1, 500($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 480($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 476($sp) -move $t0, $sp -lw $t1, 480($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 476($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 508($sp) -lw $t0, 476($sp) -lw $a0, 16($t0) -bnez $a0, label_97 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 516($sp) -move $t0, $sp -lw $t1, 516($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 520($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 524($sp) -move $t0, $sp -lw $t1, 524($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 516($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 516($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 512($sp) -lw $t0, 1140($sp) -lw $t1, 512($sp) -sw $t1, 20($t0) -lw $t1, 512($sp) -sw $t1, 472($sp) -b label_98 -label_97: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 536($sp) -li $t0, 0 -sw $t0, 540($sp) -move $t0, $sp -lw $t1, 540($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 536($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 544($sp) -lw $t0, 1140($sp) -lw $t1, 536($sp) -sw $t1, 28($t0) -lw $t1, 536($sp) -sw $t1, 472($sp) -label_98: -lw $t1, 472($sp) -sw $t1, 432($sp) -b label_99 -label_96: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 552($sp) -move $t0, $sp -lw $t1, 552($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 556($sp) -lw $t0, 1140($sp) -lw $t1, 552($sp) -sw $t1, 20($t0) -lw $t1, 552($sp) -sw $t1, 432($sp) -label_99: -lw $t1, 432($sp) -sw $t1, 392($sp) -b label_100 -label_95: -la $t1, void -sw $t1, 564($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, E_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, E_methods -sw $t1, 12($t0) -sw $t0, 572($sp) -move $t0, $sp -lw $t1, 572($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal E_init -sw $a1, 576($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 580($sp) -move $t0, $sp -lw $t1, 580($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 572($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 572($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 44($t2) -jal $t3 -sw $a1, 568($sp) -lw $t1, 568($sp) -sw $t1, 564($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 608($sp) -move $t0, $sp -lw $t1, 564($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 564($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 632($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 636($sp) -li $t0, 8 -sw $t0, 640($sp) -move $t0, $sp -lw $t1, 640($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 636($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 644($sp) -lw $t0, 632($sp) -lw $t1, 16($t0) -sw $t1, 624($sp) -lw $t0, 636($sp) -lw $t1, 16($t0) -sw $t1, 628($sp) -lw $a0, 624($sp) -lw $t1, 628($sp) -mul $a0, $a0, $t1 -sw $a0, 620($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 616($sp) -move $t0, $sp -lw $t1, 620($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 616($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 648($sp) -lw $t0, 608($sp) -lw $t1, 16($t0) -sw $t1, 600($sp) -lw $t0, 616($sp) -lw $t1, 16($t0) -sw $t1, 604($sp) -lw $a0, 600($sp) -lw $t1, 604($sp) -sub $a0, $a0, $t1 -sw $a0, 596($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 592($sp) -move $t0, $sp -lw $t1, 596($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 592($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 652($sp) -lw $t1, 592($sp) -sw $t1, 656($sp) -la $t0, s_41 -sw $t0, 664($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 668($sp) -move $t0, $sp -lw $t1, 664($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 668($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 672($sp) -move $t0, $sp -lw $t1, 668($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 660($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 676($sp) -la $t0, s_54 -sw $t0, 688($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 692($sp) -move $t0, $sp -lw $t1, 688($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 692($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 696($sp) -move $t0, $sp -lw $t1, 692($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 684($sp) -move $t0, $sp -lw $t1, 564($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 700($sp) -la $t0, s_55 -sw $t0, 708($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 712($sp) -move $t0, $sp -lw $t1, 708($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 712($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 716($sp) -move $t0, $sp -lw $t1, 712($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 704($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 720($sp) -move $t0, $sp -lw $t1, 720($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A2I_init -sw $a1, 724($sp) -lw $t1, 720($sp) -sw $t1, 728($sp) -move $t0, $sp -lw $t1, 656($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 728($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 728($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 736($sp) -move $t0, $sp -lw $t1, 736($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 732($sp) -la $t0, s_1 -sw $t0, 744($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 748($sp) -move $t0, $sp -lw $t1, 744($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 748($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 752($sp) -move $t0, $sp -lw $t1, 748($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 740($sp) -lw $t1, 740($sp) -sw $t1, 756($sp) -lw $t1, 756($sp) -sw $t1, 760($sp) -lw $t0, 1140($sp) -lw $t1, 564($sp) -sw $t1, 20($t0) -lw $t1, 564($sp) -sw $t1, 768($sp) -lw $t1, 768($sp) -sw $t1, 392($sp) -label_100: -lw $t1, 392($sp) -sw $t1, 352($sp) -b label_101 -label_94: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 780($sp) -move $t0, $sp -lw $t1, 780($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 784($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 788($sp) -move $t0, $sp -lw $t1, 788($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 780($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 780($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 776($sp) -lw $t0, 776($sp) -lw $a0, 16($t0) -bnez $a0, label_102 -la $t0, s_41 -sw $t0, 800($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 804($sp) -move $t0, $sp -lw $t1, 800($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 804($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 808($sp) -move $t0, $sp -lw $t1, 804($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 796($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 812($sp) -la $t0, s_56 -sw $t0, 824($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 828($sp) -move $t0, $sp -lw $t1, 824($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 828($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 832($sp) -move $t0, $sp -lw $t1, 828($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 820($sp) -lw $t1, 820($sp) -sw $t1, 772($sp) -b label_103 -label_102: -la $t0, s_41 -sw $t0, 840($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 844($sp) -move $t0, $sp -lw $t1, 840($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 844($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 848($sp) -move $t0, $sp -lw $t1, 844($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 836($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 852($sp) -la $t0, s_57 -sw $t0, 864($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 868($sp) -move $t0, $sp -lw $t1, 864($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 868($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 872($sp) -move $t0, $sp -lw $t1, 868($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 860($sp) -lw $t1, 860($sp) -sw $t1, 772($sp) -label_103: -lw $t1, 772($sp) -sw $t1, 352($sp) -label_101: -lw $t1, 352($sp) -sw $t1, 312($sp) -b label_104 -label_93: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 880($sp) -move $t0, $sp -lw $t1, 880($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal C_init -sw $a1, 884($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 888($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 896($sp) -move $t0, $sp -lw $t1, 888($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 880($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 896($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 876($sp) -lw $t0, 1140($sp) -lw $t1, 876($sp) -sw $t1, 20($t0) -lw $t1, 876($sp) -sw $t1, 312($sp) -label_104: -lw $t1, 312($sp) -sw $t1, 272($sp) -b label_105 -label_92: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 908($sp) -move $t0, $sp -lw $t1, 908($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal C_init -sw $a1, 912($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 916($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, B_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, B_methods -sw $t1, 12($t0) -sw $t0, 924($sp) -move $t0, $sp -lw $t1, 916($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 908($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 924($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 904($sp) -lw $t0, 1140($sp) -lw $t1, 904($sp) -sw $t1, 20($t0) -lw $t1, 904($sp) -sw $t1, 272($sp) -label_105: -lw $t1, 272($sp) -sw $t1, 232($sp) -b label_106 -label_91: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 936($sp) -move $t0, $sp -lw $t1, 936($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal C_init -sw $a1, 940($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 944($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 952($sp) -move $t0, $sp -lw $t1, 944($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 936($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 952($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 932($sp) -lw $t0, 1140($sp) -lw $t1, 932($sp) -sw $t1, 20($t0) -lw $t1, 932($sp) -sw $t1, 232($sp) -label_106: -lw $t1, 232($sp) -sw $t1, 192($sp) -b label_107 -label_90: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 964($sp) -move $t0, $sp -lw $t1, 964($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 968($sp) -move $t0, $sp -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 972($sp) -move $t0, $sp -lw $t1, 972($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 964($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 964($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 960($sp) -lw $t0, 1140($sp) -lw $t1, 960($sp) -sw $t1, 24($t0) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 984($sp) -move $t0, $sp -lw $t1, 984($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 988($sp) -lw $t0, 1140($sp) -lw $t1, 24($t0) -sw $t1, 1124($sp) -move $t0, $sp -lw $t1, 1124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1124($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 992($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1000($sp) -move $t0, $sp -lw $t1, 992($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1000($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 984($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 984($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 980($sp) -lw $t0, 1140($sp) -lw $t1, 980($sp) -sw $t1, 20($t0) -lw $t1, 980($sp) -sw $t1, 192($sp) -label_107: -lw $t1, 192($sp) -sw $t1, 152($sp) -b label_108 -label_89: -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -lw $t0, 1132($sp) -lw $t1, 0($t0) -la $a0, void -bne $t1 $a0 label_110 -b case_void_error -label_110: -blt $t1 7 label_111 -bgt $t1 7 label_111 -lw $t1, 1132($sp) -sw $t1, 1020($sp) -move $t0, $sp -lw $t1, 1020($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1020($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1028($sp) -move $t0, $sp -lw $t1, 1028($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1020($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1020($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 1024($sp) -lw $t0, 1140($sp) -lw $t1, 1024($sp) -sw $t1, 20($t0) -lw $t1, 1024($sp) -sw $t1, 1012($sp) -b label_109 -label_111: -blt $t1 5 label_112 -bgt $t1 9 label_112 -lw $t1, 1132($sp) -sw $t1, 1036($sp) -move $t0, $sp -lw $t1, 1036($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1036($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1044($sp) -move $t0, $sp -lw $t1, 1044($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1036($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1036($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 1040($sp) -lw $t0, 1140($sp) -lw $t1, 1040($sp) -sw $t1, 20($t0) -lw $t1, 1040($sp) -sw $t1, 1012($sp) -b label_109 -label_112: -blt $t1 0 label_113 -bgt $t1 9 label_113 -lw $t1, 1132($sp) -sw $t1, 1052($sp) -la $t0, s_39 -sw $t0, 1060($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 1064($sp) -move $t0, $sp -lw $t1, 1060($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1064($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 1068($sp) -move $t0, $sp -lw $t1, 1064($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1056($sp) -move $t0, $sp -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 0($t2) -jal $t3 -sw $a1, 1072($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 1076($sp) -li $t0, 0 -sw $t0, 1080($sp) -move $t0, $sp -lw $t1, 1080($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1076($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 1084($sp) -lw $t1, 1076($sp) -sw $t1, 1012($sp) -b label_109 -label_113: -b case_no_match_error -label_109: -lw $t1, 1012($sp) -sw $t1, 152($sp) -label_108: -lw $t1, 152($sp) -sw $t1, 112($sp) -b label_114 -label_88: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 1092($sp) -move $t0, $sp -lw $t1, 1092($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 1096($sp) -move $t0, $sp -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 1100($sp) -move $t0, $sp -lw $t1, 1100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1092($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1092($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 1088($sp) -lw $t0, 1140($sp) -lw $t1, 1088($sp) -sw $t1, 24($t0) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, B_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, B_methods -sw $t1, 12($t0) -sw $t0, 1112($sp) -move $t0, $sp -lw $t1, 1112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal B_init -sw $a1, 1116($sp) -lw $t0, 1140($sp) -lw $t1, 24($t0) -sw $t1, 1124($sp) -move $t0, $sp -lw $t1, 1124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1124($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1120($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1128($sp) -move $t0, $sp -lw $t1, 1120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1112($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 24($t2) -jal $t3 -sw $a1, 1108($sp) -lw $t0, 1140($sp) -lw $t1, 1108($sp) -sw $t1, 20($t0) -lw $t1, 1108($sp) -sw $t1, 112($sp) -label_114: -b label_83 -label_85: -lw $a1, 16($sp) -lw $ra, 0($sp) -addi $sp, $sp, 1144 -jr $ra \ No newline at end of file diff --git a/tests/codegen/fib_test.cil b/tests/codegen/fib_test.cil new file mode 100644 index 00000000..e69de29b diff --git a/tests/codegen/hello_world.cil b/tests/codegen/hello_world.cil new file mode 100644 index 00000000..cecdc6bb --- /dev/null +++ b/tests/codegen/hello_world.cil @@ -0,0 +1,304 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: Hello, World. + + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT msg_0 + type_name_1 = TYPEOF self + PRINT type_name_1 + eol_2 = LOAD s_1 + PRINT eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_3 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL Main out_string + + RETURN result_0 +} \ No newline at end of file diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index d5b4e897..fded61db 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -53,6 +53,7 @@ s_0: .asciiz "Abort called from class " s_1: .asciiz " " empty_str: .asciiz "" +s_3: .asciiz "Hello, World.\n" .text dispatch_void_error: la $a0 dispatch_void @@ -99,7 +100,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, Main +li $t1, 2 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) @@ -169,7 +170,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, String +li $t1, 2 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -285,7 +286,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, String +li $t1, 2 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -319,7 +320,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, Int +li $t1, 4 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -372,7 +373,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, Int +li $t1, 4 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -454,7 +455,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, String +li $t1, 2 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -524,7 +525,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, String +li $t1, 2 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -613,10 +614,49 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, 0 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) -move $a1, $zero +la $t0, s_3 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 8 +addi $sp, $sp, 24 jr $ra \ No newline at end of file diff --git a/tests/codegen/hello_world_test.cil b/tests/codegen/hello_world_test.cil new file mode 100644 index 00000000..daf2a2a7 --- /dev/null +++ b/tests/codegen/hello_world_test.cil @@ -0,0 +1,303 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: Hello, World.\n + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_3 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL Main out_string + + RETURN result_0 +} \ No newline at end of file diff --git a/tests/codegen/print-cool_test.cil b/tests/codegen/print-cool_test.cil new file mode 100644 index 00000000..ad5c8722 --- /dev/null +++ b/tests/codegen/print-cool_test.cil @@ -0,0 +1,371 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: \n + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL result_2 + LOCAL result_3 + LOCAL result_4 + LOCAL init_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL instance_9 + LOCAL value_10 + LOCAL result_init_11 + LOCAL result_12 + LOCAL result_13 + LOCAL isvoid_result_14 + LOCAL instance_15 + LOCAL result_init_16 + LOCAL instance_17 + LOCAL value_18 + LOCAL result_init_19 + LOCAL instance_20 + LOCAL value_21 + LOCAL result_init_22 + LOCAL result_23 + LOCAL internal_24 + LOCAL instance_25 + LOCAL result_init_26 + + result_4 = ALLOCATE Object + init_5 = CALL Object_init + result_3 = VCALL type Object { + [method] abort(): Object; + [method] type_name(): String; + [method] copy(): Object; +} + type_name + instance_6 = ALLOCATE Int + value_7 = LOAD 1 + result_init_8 = CALL Int_init + instance_9 = ALLOCATE Int + value_10 = LOAD 4 + result_init_11 = CALL Int_init + result_2 = VCALL type String : Object { + [method] length(): Int; + [method] concat(s:String): String; + [method] substr(i:Int, l:Int): String; +} + substr + result_1 = VCALL Main out_string + isvoid_result_14 ISVOID self + instance_15 = ALLOCATE Bool + result_init_16 = CALL Bool_init + result_13 = VCALL type Bool : Object {} + type_name + instance_17 = ALLOCATE Int + value_18 = LOAD 3 + result_init_19 = CALL Int_init + instance_20 = ALLOCATE Int + value_21 = LOAD 1 + result_init_22 = CALL Int_init + result_12 = VCALL type String : Object { + [method] length(): Int; + [method] concat(s:String): String; + [method] substr(i:Int, l:Int): String; +} + substr + result_0 = VCALL type IO : Object { + [method] out_string(x:String): IO; + [method] out_int(x:Int): IO; + [method] in_string(): String; + [method] in_int(): Int; +} + out_string + internal_24 = LOAD s_3 + instance_25 = ALLOCATE String + result_init_26 = CALL String_init + result_23 = VCALL Main out_string + + RETURN result_23 +} \ No newline at end of file diff --git a/tests/codegen/test.py b/tests/codegen/test.py new file mode 100644 index 00000000..958bc4c5 --- /dev/null +++ b/tests/codegen/test.py @@ -0,0 +1,11 @@ +f1 = open('hello_world_test.mips', 'r') +lines_1 = f1.readlines() + +f2 = open('hello_world.mips', 'r') +lines_2 = f2.readlines() + +for i in range(0, len(lines_1)): + if lines_1[i] != lines_2[i]: + print('line: ',i) + print('f1: ', lines_1[i]) + print('f2: ', lines_2[i]) \ No newline at end of file From 575177b154254f995865c64723e848bdad119431 Mon Sep 17 00:00:00 2001 From: hros18 Date: Sat, 12 Dec 2020 22:27:09 -0500 Subject: [PATCH 117/140] some test already working --- src/main.py | 2 +- src/semantic/context.py | 8 +- src/visitors/transpilator.py | 16 +- tests/codegen/hello_world.mips | 662 --------------------------------- 4 files changed, 12 insertions(+), 676 deletions(-) delete mode 100644 tests/codegen/hello_world.mips diff --git a/src/main.py b/src/main.py index 1275e3a9..c8e63d54 100644 --- a/src/main.py +++ b/src/main.py @@ -49,7 +49,7 @@ def main(): cil_code = formatter(cil_ast) f2.write(f'{cil_code}') f2.close() - print('LEN:::::',len(cv.instructions)) + # print('LEN:::::',len(cv.instructions)) mips = MIPS() code = mips.visit(cil_ast) diff --git a/src/semantic/context.py b/src/semantic/context.py index 1208e07b..81c9db65 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -43,9 +43,9 @@ def create_type(self, name:str): if name in self.types: raise ContextError(f'Type with the same name ({name}) already in context.') typex = Type(name) - print('---CreateType---') - print('type: ', typex.name) - print('parent: ', typex.parent.name) + # print('---CreateType---') + # print('type: ', typex.name) + # print('parent: ', typex.parent.name) self.types[name] = typex if not self.graph.__contains__(name): self.graph[name] = [] @@ -86,7 +86,7 @@ def set_type_max_tags(self, node='Object'): for t in self.graph[node]: maximum = max(maximum, self.types[t].max_tag) self.types[node].max_tag = maximum - print('Done type max tags') + # print('Done type max tags') def __str__(self): return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 9f7b6730..30bf965a 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -387,24 +387,22 @@ def visit(self, node, scope, sscope): # print(node.id) # print('args:',node.args) result_local = self.define_internal_local(scope = scope, name = "result") - # expr_value = 'value' + expr_value = 'self' call_args = [] for arg in reversed(node.args): param_local = self.visit(arg, scope, sscope) call_args.append(ArgNodeIL(param_local)) - # call_args.append(ArgNodeIL(expr_value)) + call_args.append(ArgNodeIL(expr_value)) # dynamic_type = 'Void' - self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, self.current_type.name, 'value')) + self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, self.current_type.name, expr_value)) return result_local @visitor.when(FormalParamNode) def visit(self, node, scope, sscope): - print(node) - print(node.id) - print(node.type) + pass @visitor.when(ClassDeclarationNode) def visit(self, node, scope, sscope): @@ -484,7 +482,7 @@ def visit(self, node, scope, sscope): result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ArgNodeIL(value),ArgNodeIL(instance)], node.type)) - self.register_instruction(SetAttribNodeIL('self', node.id,instance, self.current_type.name)) + self.register_instruction(SetAttribNodeIL('self', node.id,instance, self.current_type.tag)) @visitor.when(VarDeclarationNode) def visit(self, node, scope, sscope): @@ -1240,7 +1238,7 @@ def visit(self, node, scope, sscope): right_type = 'Int' self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) else: - print('got here where somewhere else') + # print('got here where somewhere else') self.register_instruction(AssignNodeIL(left_local, left_value)) self.register_instruction(AssignNodeIL(right_local, right_value)) @@ -1298,7 +1296,7 @@ def visit(self, node, scope, sscope): if str(node.lex) == "true": boolean = 1 instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, instance)) + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, instance)) value = self.define_internal_local(scope=scope, name="value") self.register_instruction(LoadNodeIL(boolean, value)) result_init = self.define_internal_local(scope=scope, name="result_init") diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips deleted file mode 100644 index fded61db..00000000 --- a/tests/codegen/hello_world.mips +++ /dev/null @@ -1,662 +0,0 @@ -.data -dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" -case_void: .asciiz "Runtime Error: A case on void" -case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" -div_zero: .asciiz "Runtime Error: Division by zero" -substr: .asciiz "Runtime Error: Substring out of range" -heap: .asciiz "Runtime Error: Heap overflow" -temp_string: .space 2048 -void: .word 0 -Object_name: .asciiz "Object" -Object_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -Int_name: .asciiz "Int" -Int_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -String_name: .asciiz "String" -String_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word String.length -.word String.concat -.word String.substr -Bool_name: .asciiz "Bool" -Bool_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Main_name: .asciiz "Main" -Main_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -.word Main.main -s_0: .asciiz "Abort called from class " -s_1: .asciiz " -" -empty_str: .asciiz "" -s_3: .asciiz "Hello, World.\n" -.text -dispatch_void_error: -la $a0 dispatch_void -li $v0, 4 -syscall -li $v0, 10 -syscall -case_void_error: -la $a0 case_void -li $v0, 4 -syscall -li $v0, 10 -syscall -case_no_match_error: -la $a0 case_no_match -li $v0, 4 -syscall -li $v0, 10 -syscall -div_zero_error: -la $a0 div_zero -li $v0, 4 -syscall -li $v0, 10 -syscall -substr_error: -la $a0 substr -li $v0, 4 -syscall -li $v0, 10 -syscall -heap_error: -la $a0 heap -li $v0, 4 -syscall -li $v0, 10 -syscall -main: -addi $sp, $sp, -8 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Main_init -sw $a1, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Main.main -sw $a1, 8($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Object_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 8 -jr $ra -Object.abort: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_0 -sw $t0, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -li $v0, 4 -syscall -la $t0, s_1 -sw $t0, 12($sp) -lw $a0, 12($sp) -li $v0, 4 -syscall -li $v0, 10 -syscall -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -Object.type_name: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -Object.copy: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $a0, 8($t0) -mul $a0, $a0, 4 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t1, $v0 -li $a0, 0 -lw $t3, 8($t0) -copy_object_word: -lw $t2, 0($t0) -sw $t2, 0($t1) -addi $t0, $t0, 4 -addi $t1, $t1, 4 -addi $a0, $a0, 1 -blt $a0, $t3, copy_object_word -sw $v0, 4($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -IO_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 8 -jr $ra -IO.out_string: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -IO.out_int: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -li $v0 , 1 -lw $a0 , 4($sp) -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -IO.in_string: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $a0, temp_string -li $a1, 2048 -li $v0, 8 -syscall -move $t0, $a0 -jump_read_str_char: -li $t1, 0 -lb $t1, 0($t0) -beqz $t1, analize_str_end -addi $t0, $t0, 1 -j jump_read_str_char -analize_str_end: -addi $t0, $t0, -1 -li $t1, 0 -lb $t1, 0($t0) -bne $t1, 10, finish_jump_read_str_char -sb $0, 0($t0) -addi $t0, $t0, -1 -lb $t1, 0($t0) -bne $t1, 13, finish_jump_read_str_char -sb $0, 0($t0) -j analize_str_end -finish_jump_read_str_char: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -IO.in_int: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $v0, 5 -syscall -sw $v0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -String_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -String.length: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t0, 16($t0) -li $a0, 0 -count_char: -lb $t1, 0($t0) -beqz $t1, finish_chars_count -addi $t0, $t0, 1 -addi $a0, $a0, 1 -j count_char -finish_chars_count: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -String.concat: -addi $sp, $sp, -36 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 40($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 8($sp) -lw $t0, 44($sp) -lw $t1, 16($t0) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 16($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t0, 24($sp) -add $a0, $a0, $t0 -addi $a0, $a0, 1 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t3, $v0 -lw $t0, 4($sp) -lw $t1, 12($sp) -copy_arg1_char: -lb $t2, 0($t0) -sb $t2, 0($v0) -beqz $t2, concat_arg2_char -addi $t0, $t0, 1 -addi $v0, $v0, 1 -j copy_arg1_char -concat_arg2_char: -lb $t2, 0($t1) -sb $t2, 0($v0) -beqz $t2, finish_arg2_concat -addi $t1, $t1, 1 -addi $v0, $v0, 1 -j concat_arg2_char -finish_arg2_concat: -sb $0, ($v0) -sw $t3, 28($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 36($sp) -lw $a1, 32($sp) -lw $ra, 0($sp) -addi $sp, $sp, 48 -jr $ra -String.substr: -addi $sp, $sp, -20 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -addi $a0, $a0, 1 -li $v0, 9 -syscall -bge $v0, $sp heap_error -lw $t0, 4($sp) -lw $t1, 8($sp) -lw $t4, 24($sp) -lw $t2, 16($t4) -bltz $t0, substr_error -li $a0, 0 -jump_str_char: -beq $a0, $t0, finish_index_jump -addi $a0, $a0, 1 -addi $t2, $t2, 1 -beq $t2, $zero, substr_error -j jump_str_char -finish_index_jump: -li $a0, 0 -move $t3, $v0 -copy_substr_char: -beq $a0, $t1 finish_substr_copy -li $t0, 0 -lb $t0, 0($t2) -sb $t0, 0($v0) -addi $t2, $t2, 1 -beq $t2, $zero, substr_error -addi $v0, $v0, 1 -addi $a0, $a0, 1 -j copy_substr_char -finish_substr_copy: -sb $0, ($v0) -sw $t3, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 20($sp) -lw $a1, 16($sp) -lw $ra, 0($sp) -addi $sp, $sp, 36 -jr $ra -Bool_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Int_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -String_equals: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 20($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $t1, 4($sp) -lw $t2, 8($sp) -compare_str_char: -li $t3, 0 -lb $t3, 0($t1) -li $t4, 0 -lb $t4, 0($t2) -seq $a0, $t3, $t4 -beqz $a0, finish_compare_str -beqz $t3, finish_compare_str -beqz $t4, finish_compare_str -addi $t1, $t1, 1 -addi $t2, $t2, 1 -j compare_str_char -finish_compare_str: -sw $a0, 12($sp) -lw $a1, 12($sp) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -Main_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal IO_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Main.main: -addi $sp, $sp, -16 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_3 -sw $t0, 8($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 4($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra \ No newline at end of file From 09100cc29b3fc548d6de1b75061ccc6e1a46c9f4 Mon Sep 17 00:00:00 2001 From: hros18 Date: Sat, 12 Dec 2020 22:40:13 -0500 Subject: [PATCH 118/140] print-cool and hello_world PASSED --- src/visitors/transpilator.py | 2 +- tests/codegen/hello_world.mips | 662 ++++++++++++++++++++++ tests/codegen/print-cool.mips | 893 ++++++++++++++++++++++++++++++ tests/codegen/print-cool_test.cil | 32 +- 4 files changed, 1561 insertions(+), 28 deletions(-) create mode 100644 tests/codegen/hello_world.mips create mode 100644 tests/codegen/print-cool.mips diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 30bf965a..bc100623 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -581,7 +581,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(ArgNodeIL(arg)) dynamic_type = self.context.exprs_dict[node.obj] - self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, dynamic_type, expr_value)) + self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, dynamic_type.name, expr_value)) return result_local diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips new file mode 100644 index 00000000..8365ee9d --- /dev/null +++ b/tests/codegen/hello_world.mips @@ -0,0 +1,662 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "Hello, World.\n" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra \ No newline at end of file diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips new file mode 100644 index 00000000..5b9ef3d2 --- /dev/null +++ b/tests/codegen/print-cool.mips @@ -0,0 +1,893 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "\n" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -108 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 0 +sw $t1, 0($t0) +la $t1, Object_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Object_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Object_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 4($t2) +jal $t3 +sw $a1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 1 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +la $t0, 4 +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 8($sp) +la $t0, void +lw $t1, 112($sp) +seq $a0, $t0, $t1 +sw $a0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 4($t2) +jal $t3 +sw $a1, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +la $t0, 3 +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +la $t0, 1 +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +la $t0, s_3 +sw $t0, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 108($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 96($sp) +lw $a1, 96($sp) +lw $ra, 0($sp) +addi $sp, $sp, 116 +jr $ra \ No newline at end of file diff --git a/tests/codegen/print-cool_test.cil b/tests/codegen/print-cool_test.cil index ad5c8722..d9e46f2f 100644 --- a/tests/codegen/print-cool_test.cil +++ b/tests/codegen/print-cool_test.cil @@ -319,49 +319,27 @@ function Main.main { result_4 = ALLOCATE Object init_5 = CALL Object_init - result_3 = VCALL type Object { - [method] abort(): Object; - [method] type_name(): String; - [method] copy(): Object; -} - type_name + result_3 = VCALL Object type_name instance_6 = ALLOCATE Int value_7 = LOAD 1 result_init_8 = CALL Int_init instance_9 = ALLOCATE Int value_10 = LOAD 4 result_init_11 = CALL Int_init - result_2 = VCALL type String : Object { - [method] length(): Int; - [method] concat(s:String): String; - [method] substr(i:Int, l:Int): String; -} - substr + result_2 = VCALL String substr result_1 = VCALL Main out_string isvoid_result_14 ISVOID self instance_15 = ALLOCATE Bool result_init_16 = CALL Bool_init - result_13 = VCALL type Bool : Object {} - type_name + result_13 = VCALL Bool type_name instance_17 = ALLOCATE Int value_18 = LOAD 3 result_init_19 = CALL Int_init instance_20 = ALLOCATE Int value_21 = LOAD 1 result_init_22 = CALL Int_init - result_12 = VCALL type String : Object { - [method] length(): Int; - [method] concat(s:String): String; - [method] substr(i:Int, l:Int): String; -} - substr - result_0 = VCALL type IO : Object { - [method] out_string(x:String): IO; - [method] out_int(x:Int): IO; - [method] in_string(): String; - [method] in_int(): Int; -} - out_string + result_12 = VCALL String substr + result_0 = VCALL IO out_string internal_24 = LOAD s_3 instance_25 = ALLOCATE String result_init_26 = CALL String_init From 6a6d31dc0a3c712dd1f989fda222e4e995d043e3 Mon Sep 17 00:00:00 2001 From: hros18 Date: Sun, 13 Dec 2020 00:54:02 -0500 Subject: [PATCH 119/140] some changes in visitor --- .../nodesIL/operation_node_il.py | 3 +- src/main.py | 12 +- src/semantic/context.py | 29 +- src/visitors/to_mips.py | 10 +- src/visitors/transpilator.py | 65 +- tests/codegen/arith.mips | 9976 +++++++++++++++ tests/codegen/arith_test.cil | 0 tests/codegen/atoi.mips | 4401 +++++++ tests/codegen/book_list.mips | 1964 +++ tests/codegen/cells.mips | 2296 ++++ tests/codegen/fib.mips | 1027 ++ tests/codegen/graph.mips | 5317 ++++++++ tests/codegen/hairyscary.mips | 1097 ++ tests/codegen/hello_world.mips | 2 +- tests/codegen/io.mips | 1077 ++ tests/codegen/life.mips | 10312 ++++++++++++++++ tests/codegen/list.mips | 1374 ++ tests/codegen/palindrome.mips | 1442 +++ tests/codegen/primes.mips | 762 ++ tests/codegen/print-cool.mips | 2 +- tests/codegen/sort-list.mips | 1911 +++ 21 files changed, 43026 insertions(+), 53 deletions(-) create mode 100644 tests/codegen/arith.mips create mode 100644 tests/codegen/arith_test.cil create mode 100644 tests/codegen/atoi.mips create mode 100644 tests/codegen/book_list.mips create mode 100644 tests/codegen/cells.mips create mode 100644 tests/codegen/fib.mips create mode 100644 tests/codegen/graph.mips create mode 100644 tests/codegen/hairyscary.mips create mode 100644 tests/codegen/io.mips create mode 100644 tests/codegen/life.mips create mode 100644 tests/codegen/list.mips create mode 100644 tests/codegen/palindrome.mips create mode 100644 tests/codegen/primes.mips create mode 100644 tests/codegen/sort-list.mips diff --git a/src/code_generation/nodesIL/operation_node_il.py b/src/code_generation/nodesIL/operation_node_il.py index 28f74581..cf5faf7d 100644 --- a/src/code_generation/nodesIL/operation_node_il.py +++ b/src/code_generation/nodesIL/operation_node_il.py @@ -6,7 +6,7 @@ def __init__(self, dest, left, right, idx=None): self.dest = dest self.left = left self.right = right - + self.op = idx self.in1 = left self.in2 = right self.out = dest @@ -15,6 +15,7 @@ class UnaryNodeIL(InstructionNodeIL): def __init__(self, dest, expr, idx=None): super().__init__(idx) self.dest = dest + self.op = idx self.expr = expr self.in1 = expr diff --git a/src/main.py b/src/main.py index c8e63d54..cf28b511 100644 --- a/src/main.py +++ b/src/main.py @@ -42,13 +42,13 @@ def main(): cv = codeVisitor(context) cil_ast = cv.visit(ast, None, scope) - f2_n = program[:-3] + '_test.cil' - f2 = open(f2_n, 'w+') + # f2_n = program[:-3] + '_test.cil' + # f2 = open(f2_n, 'w+') - formatter = get_formatter() - cil_code = formatter(cil_ast) - f2.write(f'{cil_code}') - f2.close() + # formatter = get_formatter() + # cil_code = formatter(cil_ast) + # f2.write(f'{cil_code}') + # f2.close() # print('LEN:::::',len(cv.instructions)) mips = MIPS() code = mips.visit(cil_ast) diff --git a/src/semantic/context.py b/src/semantic/context.py index 81c9db65..6fcec616 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -62,19 +62,19 @@ def get_type(self, name:str): raise ContextError(f'Type "{name}" is not defined.') def set_type_tags(self, node='Object', tag=0): - # print('------Set-----') - # print('type: ', node) - # print('tag: ', tag) - # self.types[node].tag = tag - # for i,t in enumerate(self.graph[node]): - # self.set_type_tags(t, tag + i + 1) + print('------Set-----') + print('type: ', node) + print('tag: ', tag) + self.types[node].tag = tag + for i,t in enumerate(self.graph[node]): + self.set_type_tags(t, tag + i + 1) # print('Done type tags') - self.types['Object'].tag = 0 - self.types['IO'].tag = 1 - self.types['Main'].tag = 2 - self.types['String'].tag = 2 - self.types['Bool'].tag = 3 - self.types['Int'].tag = 4 + # self.types['Object'].tag = 0 + # self.types['IO'].tag = 1 + # self.types['Main'].tag = 2 + # self.types['String'].tag = 2 + # self.types['Bool'].tag = 3 + # self.types['Int'].tag = 4 def set_type_max_tags(self, node='Object'): if not self.graph[node]: @@ -84,7 +84,10 @@ def set_type_max_tags(self, node='Object'): self.set_type_max_tags(t) maximum = 0 for t in self.graph[node]: - maximum = max(maximum, self.types[t].max_tag) + try: + maximum = max(maximum, self.types[t].max_tag) + except: + maximum = 0 self.types[node].max_tag = maximum # print('Done type max tags') def __str__(self): diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index e7c60a02..dbfeaf8a 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -141,8 +141,8 @@ def visit(self, node): def visit(self, node): offset = self.var_offset[self.current_function.name][node.dest] if node.source: - if isinstance(node.right_expr, int): - self.text += f'li $t1, {node.right_expr}\n' + if isinstance(node.source, int): + self.text += f'li $t1, {node.source}\n' else: right_offset = self.var_offset[self.current_function.name][node.source] self.text += f'lw $t1, {right_offset}($sp)\n' @@ -204,6 +204,12 @@ def visit(self, node): @visitor.when(SetAttribNodeIL) def visit(self, node): + print('----------------::::::') + print('----------------::::::',node.obj) + # print('----------------::::::',node.dest) + print('----------------::::::',node.attr) + print('----------------::::::',node.attr_type) + # print('----------------::::::',self.attr_offset[node.attr_type][node.attr]) self_offset = self.var_offset[self.current_function.name][node.obj] self.text += f'lw $t0, {self_offset}($sp)\n' #get self address diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index bc100623..c7827574 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -467,14 +467,14 @@ def visit(self, node, scope, sscope): ascope = sscope.attr_scopes[node.id] instance = None - if node.type.name in ['Int', 'Bool']: + if node.type in ['Int', 'Bool']: instance = self.define_internal_local(scope=scope, name="instance") self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag, instance)) value = self.define_internal_local(scope=scope, name="value") self.register_instruction(LoadNodeIL(0,value)) result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ ArgNodeIL(value), ArgNodeIL(instance)], node.type)) - elif node.type.name == 'String': + elif node.type == 'String': instance = self.define_internal_local(scope=scope, name="instance") self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag ,instance)) value = self.define_internal_local(scope=scope, name="value") @@ -482,7 +482,7 @@ def visit(self, node, scope, sscope): result_init = self.define_internal_local(scope=scope, name="result_init") self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ArgNodeIL(value),ArgNodeIL(instance)], node.type)) - self.register_instruction(SetAttribNodeIL('self', node.id,instance, self.current_type.tag)) + self.register_instruction(SetAttribNodeIL('self', node.id,instance, self.current_type.name)) @visitor.when(VarDeclarationNode) def visit(self, node, scope, sscope): @@ -516,7 +516,7 @@ def visit(self, node, scope, sscope): return node.id elif self.current_type.has_attr(node.id): result_local = self.define_internal_local(scope=scope, name = node.id, class_type=None) - self.register_instruction(GetAttribNodeIL(result_local, 'self' , node.id, sscope.find_variable(node.id).type.name)) + self.register_instruction(GetAttribNodeIL(result_local, 'self' , node.id, self.current_type.name)) return result_local else: return scope.find_cil_local(node.id) @@ -678,7 +678,7 @@ def visit(self, node, scope, sscope): option_type = self.context.get_type(option.typex) #changes - self.register_instruction(OptionNodeIL(case_expr, option_type.name, 'Object', label)) + self.register_instruction(OptionNodeIL(case_expr, option_type.tag, option_type.max_tag, label)) option_scope = scope.create_child() option_id = self.define_internal_local(scope=option_scope, name=option.id, cool_var_name=option.id) @@ -739,7 +739,7 @@ def visit(self, node, scope, sscope): if hasattr(node.left, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) else: - left_type = 'Object' + left_type = 'Int' if isinstance(node.left, IntegerNode): left_type = 'Int' elif isinstance(node.left, BoolNode): @@ -756,7 +756,7 @@ def visit(self, node, scope, sscope): if hasattr(node.right, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) else: - right_type = 'Object' + right_type = 'Int' if isinstance(node.right, IntegerNode): right_type = 'Int' elif isinstance(node.right, BoolNode): @@ -801,7 +801,7 @@ def visit(self, node, scope, sscope): if hasattr(node.left, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) else: - left_type = 'Object' + left_type = 'Int' if isinstance(node.left, IntegerNode): left_type = 'Int' elif isinstance(node.left, BoolNode): @@ -818,7 +818,7 @@ def visit(self, node, scope, sscope): if hasattr(node.right, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) else: - right_type = 'Object' + right_type = 'Int' if isinstance(node.right, IntegerNode): right_type = 'Int' elif isinstance(node.right, BoolNode): @@ -860,7 +860,7 @@ def visit(self, node, scope, sscope): if hasattr(node.left, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) else: - left_type = 'Object' + left_type = 'Int' if isinstance(node.left, IntegerNode): left_type = 'Int' elif isinstance(node.left, BoolNode): @@ -874,10 +874,17 @@ def visit(self, node, scope, sscope): left_type = 'Int' self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) + right_type = 'Int' if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + if isinstance(node.right.expr, IntegerNode): + right_type = 'Int' + elif isinstance(node.right.expr, BoolNode): + right_type = 'Bool' + elif isinstance(node.right.expr, StringNode): + right_type = 'String' + else: + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) else: - right_type = 'Object' if isinstance(node.right, IntegerNode): right_type = 'Int' elif isinstance(node.right, BoolNode): @@ -915,7 +922,7 @@ def visit(self, node, scope, sscope): if hasattr(node.left, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) else: - left_type = 'Object' + left_type = 'Int' if isinstance(node.left, IntegerNode): left_type = 'Int' elif isinstance(node.left, BoolNode): @@ -932,7 +939,7 @@ def visit(self, node, scope, sscope): if hasattr(node.right, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) else: - right_type = 'Object' + right_type = 'Int' if isinstance(node.right, IntegerNode): right_type = 'Int' elif isinstance(node.right, BoolNode): @@ -965,17 +972,17 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", node.expr.computed_type.name)) if hasattr(node, 'expr') and (not isinstance(node.expr, VariableNode)): - typeX = 'Object' + typeX = 'Int' if isinstance(node, SelfCallNode): typeX = self.current_type.name else: try: typeX = self.context.exprs_dict[node.expr].name except: - typeX = 'Object' + typeX = 'Int' self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", typeX)) else: - right_type = 'Object' + right_type = 'Int' if isinstance(node.expr, IntegerNode): right_type = 'Int' elif isinstance(node.expr, BoolNode): @@ -1007,14 +1014,14 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", node.expr.computed_type.name)) if hasattr(node, 'expr') and (not isinstance(node.expr, VariableNode)): - typeX = 'Object' + typeX = 'Int' if isinstance(node, SelfCallNode): typeX = self.current_type.name else: try: typeX = self.context.exprs_dict[node.expr].name except: - typeX = 'Object' + typeX = 'Int' self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", typeX)) else: self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", (sscope.find_variable(node.expr.id)).type.name)) @@ -1045,7 +1052,7 @@ def visit(self, node, scope, sscope): if hasattr(node.left, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) else: - left_type = 'Object' + left_type = 'Int' if isinstance(node.left, IntegerNode): left_type = 'Int' elif isinstance(node.left, BoolNode): @@ -1062,7 +1069,7 @@ def visit(self, node, scope, sscope): if hasattr(node.right, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) else: - right_type = 'Object' + right_type = 'Int' if isinstance(node.right, IntegerNode): right_type = 'Int' elif isinstance(node.right, BoolNode): @@ -1104,7 +1111,7 @@ def visit(self, node, scope, sscope): if hasattr(node.left, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) else: - left_type = 'Object' + left_type = 'Int' if isinstance(node.left, IntegerNode): left_type = 'Int' elif isinstance(node.left, BoolNode): @@ -1121,7 +1128,7 @@ def visit(self, node, scope, sscope): if hasattr(node.right, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) else: - right_type = 'Object' + right_type = 'Int' if isinstance(node.right, IntegerNode): right_type = 'Int' elif isinstance(node.right, BoolNode): @@ -1164,12 +1171,12 @@ def visit(self, node, scope, sscope): # print('left_value: ',left_value) # print('right: ', node.right) # print('right_value: ',right_value) - left_type = 'Object' - right_type = 'Object' + left_type = 'Int' + right_type = 'Int' if hasattr(node.left, 'expr'): left_type = self.context.exprs_dict[node.left.expr].name else: - left_type = 'Object' + left_type = 'Int' if isinstance(node.left, IntegerNode): left_type = 'Int' elif isinstance(node.left, BoolNode): @@ -1207,7 +1214,7 @@ def visit(self, node, scope, sscope): if hasattr(node.left, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) else: - left_type = 'Object' + left_type = 'Int' if isinstance(node.left, IntegerNode): left_type = 'Int' elif isinstance(node.left, BoolNode): @@ -1224,7 +1231,7 @@ def visit(self, node, scope, sscope): if hasattr(node.right, 'expr'): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) else: - right_type = 'Object' + right_type = 'Int' if isinstance(node.right, IntegerNode): right_type = 'Int' elif isinstance(node.right, BoolNode): @@ -1296,7 +1303,7 @@ def visit(self, node, scope, sscope): if str(node.lex) == "true": boolean = 1 instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').name, instance)) + self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, instance)) value = self.define_internal_local(scope=scope, name="value") self.register_instruction(LoadNodeIL(boolean, value)) result_init = self.define_internal_local(scope=scope, name="result_init") diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips new file mode 100644 index 00000000..282985f3 --- /dev/null +++ b/tests/codegen/arith.mips @@ -0,0 +1,9976 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A_name: .asciiz "A" +A_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word A.method5 +B_name: .asciiz "B" +B_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +C_name: .asciiz "C" +C_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word C.method5 +.word C.method6 +D_name: .asciiz "D" +D_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +E_name: .asciiz "E" +E_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +.word E.method6 +A2I_name: .asciiz "A2I" +A2I_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.menu +.word Main.prompt +.word Main.get_int +.word Main.is_even +.word Main.class_type +.word Main.print +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "0" +s_4: .asciiz "1" +s_5: .asciiz "2" +s_6: .asciiz "3" +s_7: .asciiz "4" +s_8: .asciiz "5" +s_9: .asciiz "6" +s_10: .asciiz "7" +s_11: .asciiz "8" +s_12: .asciiz "9" +s_13: .asciiz "-" +s_14: .asciiz "+" +s_15: .asciiz "\n\tTo add a number to " +s_16: .asciiz "...enter a:\n" +s_17: .asciiz "\tTo negate " +s_18: .asciiz "...enter b:\n" +s_19: .asciiz "\tTo find the difference between " +s_20: .asciiz "and another number...enter c:\n" +s_21: .asciiz "\tTo find the factorial of " +s_22: .asciiz "...enter d:\n" +s_23: .asciiz "\tTo square " +s_24: .asciiz "...enter e:\n" +s_25: .asciiz "\tTo cube " +s_26: .asciiz "...enter f:\n" +s_27: .asciiz "\tTo find out if " +s_28: .asciiz "is a multiple of 3...enter g:\n" +s_29: .asciiz "\tTo divide " +s_30: .asciiz "by 8...enter h:\n" +s_31: .asciiz "\tTo get a new number...enter j:\n" +s_32: .asciiz "\tTo quit...enter q:\n\n" +s_33: .asciiz "\n" +s_34: .asciiz "Please enter a number... " +s_35: .asciiz "Oooops\n" +s_36: .asciiz "Class type is now E\n" +s_37: .asciiz "Class type is now D\n" +s_38: .asciiz "Class type is now C\n" +s_39: .asciiz "Class type is now B\n" +s_40: .asciiz "Class type is now A\n" +s_41: .asciiz " " +s_42: .asciiz "number " +s_43: .asciiz "is odd!\n" +s_44: .asciiz "is even!\n" +s_45: .asciiz "a" +s_46: .asciiz "b" +s_47: .asciiz "c" +s_48: .asciiz "d" +s_49: .asciiz "e" +s_50: .asciiz "f" +s_51: .asciiz "g" +s_52: .asciiz "h" +s_53: .asciiz "j" +s_54: .asciiz "q" +s_55: .asciiz "is equal to " +s_56: .asciiz "times 8 with a remainder of " +s_57: .asciiz "is not divisible by 3.\n" +s_58: .asciiz "is divisible by 3.\n" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 11 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +A_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +A.value: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A.set_var: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +A.method1: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A.method2: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +lw $t0, 52($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +add $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 24($sp) +lw $t1, 8($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 32($sp) +lw $t1, 32($sp) +sw $t1, 44($sp) +lw $a1, 44($sp) +lw $ra, 0($sp) +addi $sp, $sp, 60 +jr $ra +A.method3: +addi $sp, $sp, -40 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t1, 16($sp) +neg $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 20($sp) +lw $t1, 8($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 28($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) +lw $a1, 40($sp) +lw $ra, 0($sp) +addi $sp, $sp, 52 +jr $ra +A.method4: +addi $sp, $sp, -112 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 24($sp) +b result_1 +la $t1, void +sw $t1, 28($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 40($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 44($sp) +lw $a0, 40($sp) +lw $t1, 44($sp) +sub $a0, $a0, $t1 +sw $a0, 36($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 48($sp) +lw $t1, 32($sp) +sw $t1, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 56($sp) +lw $t1, 56($sp) +sw $t1, 68($sp) +lw $t1, 68($sp) +sw $t1, 4($sp) +b label_2 +label_1: +la $t1, void +sw $t1, 72($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 84($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $a0, 84($sp) +lw $t1, 88($sp) +sub $a0, $a0, $t1 +sw $a0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 92($sp) +lw $t1, 76($sp) +sw $t1, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 108($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 100($sp) +lw $t1, 100($sp) +sw $t1, 112($sp) +lw $t1, 112($sp) +sw $t1, 4($sp) +label_2: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 128 +jr $ra +A.method5: +addi $sp, $sp, -136 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 1 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +la $t0, 1 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t1, 20($sp) +sw $t1, 32($sp) +label_3: +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +sle $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 56($sp) +b result_9 +b label_5 +label_4: +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +mul $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +lw $t1, 60($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +la $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +add $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +lw $t1, 84($sp) +sw $t1, 32($sp) +b label_3 +label_5: +la $t0, None +sw $t0, 36($sp) +lw $t1, 36($sp) +sw $t1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 124($sp) +lw $t1, 124($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) +lw $ra, 0($sp) +addi $sp, $sp, 148 +jr $ra +B_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +B.method5: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +lw $t0, 52($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 52($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +mul $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 24($sp) +lw $t1, 8($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 32($sp) +lw $t1, 32($sp) +sw $t1, 44($sp) +lw $a1, 44($sp) +lw $ra, 0($sp) +addi $sp, $sp, 56 +jr $ra +C_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +C.method6: +addi $sp, $sp, -40 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t1, 16($sp) +neg $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 20($sp) +lw $t1, 8($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 28($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) +lw $a1, 40($sp) +lw $ra, 0($sp) +addi $sp, $sp, 52 +jr $ra +C.method5: +addi $sp, $sp, -64 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $a0, 32($sp) +lw $t1, 36($sp) +mul $a0, $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +mul $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +lw $t1, 8($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 60($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 52($sp) +lw $t1, 52($sp) +sw $t1, 64($sp) +lw $a1, 64($sp) +lw $ra, 0($sp) +addi $sp, $sp, 76 +jr $ra +D_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +D.method7: +addi $sp, $sp, -244 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t1, 252($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +slt $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_2 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +la $t0, 0 +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 72($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +b result_11 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +la $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +seq $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 112($sp) +b result_20 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +la $t0, 2 +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +lw $t0, 136($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +lw $a0, 128($sp) +lw $t1, 132($sp) +seq $a0, $a0, $t1 +sw $a0, 124($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 148($sp) +b result_29 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +la $t0, 3 +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 180($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 164($sp) +lw $t0, 172($sp) +lw $t1, 16($t0) +sw $t1, 168($sp) +lw $a0, 164($sp) +lw $t1, 168($sp) +sub $a0, $a0, $t1 +sw $a0, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 184($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 152($sp) +lw $t1, 152($sp) +sw $t1, 116($sp) +b label_10 +label_9: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +la $t0, 0 +sw $t0, 192($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 196($sp) +lw $t1, 188($sp) +sw $t1, 116($sp) +label_10: +lw $t1, 116($sp) +sw $t1, 80($sp) +b label_11 +label_8: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 200($sp) +la $t0, 0 +sw $t0, 204($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 208($sp) +lw $t1, 200($sp) +sw $t1, 80($sp) +label_11: +lw $t1, 80($sp) +sw $t1, 44($sp) +b label_12 +label_7: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 212($sp) +la $t0, 0 +sw $t0, 216($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 220($sp) +lw $t1, 212($sp) +sw $t1, 44($sp) +label_12: +lw $t1, 44($sp) +sw $t1, 8($sp) +b label_13 +label_6: +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 236($sp) +lw $t1, 236($sp) +neg $a0, $t1 +sw $a0, 232($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 228($sp) +move $t0, $sp +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 240($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 224($sp) +lw $t1, 224($sp) +sw $t1, 8($sp) +label_13: +lw $t1, 8($sp) +sw $t1, 244($sp) +lw $a1, 244($sp) +lw $ra, 0($sp) +addi $sp, $sp, 256 +jr $ra +E_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +E.method6: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +la $t0, 8 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 8($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 68 +jr $ra +A2I_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A2I.c2i: +addi $sp, $sp, -496 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +la $t0, s_4 +sw $t0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +b result_10 +la $t0, s_5 +sw $t0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +b result_19 +la $t0, s_6 +sw $t0, 132($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 144($sp) +b result_28 +la $t0, s_7 +sw $t0, 168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 180($sp) +b result_37 +la $t0, s_8 +sw $t0, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 212($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +b result_46 +la $t0, s_9 +sw $t0, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 252($sp) +b result_55 +la $t0, s_10 +sw $t0, 276($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 280($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 284($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 288($sp) +b result_64 +la $t0, s_11 +sw $t0, 312($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 320($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 296($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 324($sp) +b result_73 +la $t0, s_12 +sw $t0, 348($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 356($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 360($sp) +b result_82 +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 364($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 368($sp) +la $t0, 0 +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 376($sp) +lw $t1, 368($sp) +sw $t1, 328($sp) +b label_24 +label_23: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 380($sp) +la $t0, 9 +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 388($sp) +lw $t1, 380($sp) +sw $t1, 328($sp) +label_24: +lw $t1, 328($sp) +sw $t1, 292($sp) +b label_25 +label_22: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 392($sp) +la $t0, 8 +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 400($sp) +lw $t1, 392($sp) +sw $t1, 292($sp) +label_25: +lw $t1, 292($sp) +sw $t1, 256($sp) +b label_26 +label_21: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 404($sp) +la $t0, 7 +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 412($sp) +lw $t1, 404($sp) +sw $t1, 256($sp) +label_26: +lw $t1, 256($sp) +sw $t1, 220($sp) +b label_27 +label_20: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 416($sp) +la $t0, 6 +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 424($sp) +lw $t1, 416($sp) +sw $t1, 220($sp) +label_27: +lw $t1, 220($sp) +sw $t1, 184($sp) +b label_28 +label_19: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 428($sp) +la $t0, 5 +sw $t0, 432($sp) +move $t0, $sp +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 436($sp) +lw $t1, 428($sp) +sw $t1, 184($sp) +label_28: +lw $t1, 184($sp) +sw $t1, 148($sp) +b label_29 +label_18: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 440($sp) +la $t0, 4 +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 448($sp) +lw $t1, 440($sp) +sw $t1, 148($sp) +label_29: +lw $t1, 148($sp) +sw $t1, 112($sp) +b label_30 +label_17: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 452($sp) +la $t0, 3 +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 460($sp) +lw $t1, 452($sp) +sw $t1, 112($sp) +label_30: +lw $t1, 112($sp) +sw $t1, 76($sp) +b label_31 +label_16: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 464($sp) +la $t0, 2 +sw $t0, 468($sp) +move $t0, $sp +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 472($sp) +lw $t1, 464($sp) +sw $t1, 76($sp) +label_31: +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_32 +label_15: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +la $t0, 1 +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 484($sp) +lw $t1, 476($sp) +sw $t1, 40($sp) +label_32: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_33 +label_14: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 488($sp) +la $t0, 0 +sw $t0, 492($sp) +move $t0, $sp +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 496($sp) +lw $t1, 488($sp) +sw $t1, 4($sp) +label_33: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 508 +jr $ra +A2I.i2c: +addi $sp, $sp, -496 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +la $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +la $t0, 1 +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +seq $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +b result_10 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +la $t0, 2 +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 104($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) +seq $a0, $a0, $t1 +sw $a0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +b result_19 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +la $t0, 3 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 124($sp) +lw $t0, 132($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $a0, 124($sp) +lw $t1, 128($sp) +seq $a0, $a0, $t1 +sw $a0, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 144($sp) +b result_28 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 168($sp) +la $t0, 4 +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 176($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 160($sp) +lw $t0, 168($sp) +lw $t1, 16($t0) +sw $t1, 164($sp) +lw $a0, 160($sp) +lw $t1, 164($sp) +seq $a0, $a0, $t1 +sw $a0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 180($sp) +b result_37 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +la $t0, 5 +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 212($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $t0, 204($sp) +lw $t1, 16($t0) +sw $t1, 200($sp) +lw $a0, 196($sp) +lw $t1, 200($sp) +seq $a0, $a0, $t1 +sw $a0, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +b result_46 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 240($sp) +la $t0, 6 +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 248($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 232($sp) +lw $t0, 240($sp) +lw $t1, 16($t0) +sw $t1, 236($sp) +lw $a0, 232($sp) +lw $t1, 236($sp) +seq $a0, $a0, $t1 +sw $a0, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 252($sp) +b result_55 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +la $t0, 7 +sw $t0, 280($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 268($sp) +lw $t0, 276($sp) +lw $t1, 16($t0) +sw $t1, 272($sp) +lw $a0, 268($sp) +lw $t1, 272($sp) +seq $a0, $a0, $t1 +sw $a0, 264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 288($sp) +b result_64 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 312($sp) +la $t0, 8 +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 320($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 304($sp) +lw $t0, 312($sp) +lw $t1, 16($t0) +sw $t1, 308($sp) +lw $a0, 304($sp) +lw $t1, 308($sp) +seq $a0, $a0, $t1 +sw $a0, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 296($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 324($sp) +b result_73 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 348($sp) +la $t0, 9 +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 356($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 340($sp) +lw $t0, 348($sp) +lw $t1, 16($t0) +sw $t1, 344($sp) +lw $a0, 340($sp) +lw $t1, 344($sp) +seq $a0, $a0, $t1 +sw $a0, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 360($sp) +b result_82 +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 364($sp) +la $t0, empty_str +sw $t0, 368($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 376($sp) +lw $t1, 372($sp) +sw $t1, 328($sp) +b label_44 +label_43: +la $t0, s_12 +sw $t0, 380($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 388($sp) +lw $t1, 384($sp) +sw $t1, 328($sp) +label_44: +lw $t1, 328($sp) +sw $t1, 292($sp) +b label_45 +label_42: +la $t0, s_11 +sw $t0, 392($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 400($sp) +lw $t1, 396($sp) +sw $t1, 292($sp) +label_45: +lw $t1, 292($sp) +sw $t1, 256($sp) +b label_46 +label_41: +la $t0, s_10 +sw $t0, 404($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 412($sp) +lw $t1, 408($sp) +sw $t1, 256($sp) +label_46: +lw $t1, 256($sp) +sw $t1, 220($sp) +b label_47 +label_40: +la $t0, s_9 +sw $t0, 416($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 424($sp) +lw $t1, 420($sp) +sw $t1, 220($sp) +label_47: +lw $t1, 220($sp) +sw $t1, 184($sp) +b label_48 +label_39: +la $t0, s_8 +sw $t0, 428($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 432($sp) +move $t0, $sp +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 436($sp) +lw $t1, 432($sp) +sw $t1, 184($sp) +label_48: +lw $t1, 184($sp) +sw $t1, 148($sp) +b label_49 +label_38: +la $t0, s_7 +sw $t0, 440($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 448($sp) +lw $t1, 444($sp) +sw $t1, 148($sp) +label_49: +lw $t1, 148($sp) +sw $t1, 112($sp) +b label_50 +label_37: +la $t0, s_6 +sw $t0, 452($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 460($sp) +lw $t1, 456($sp) +sw $t1, 112($sp) +label_50: +lw $t1, 112($sp) +sw $t1, 76($sp) +b label_51 +label_36: +la $t0, s_5 +sw $t0, 464($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 468($sp) +move $t0, $sp +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 472($sp) +lw $t1, 468($sp) +sw $t1, 76($sp) +label_51: +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_52 +label_35: +la $t0, s_4 +sw $t0, 476($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 484($sp) +lw $t1, 480($sp) +sw $t1, 40($sp) +label_52: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_53 +label_34: +la $t0, s_3 +sw $t0, 488($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 492($sp) +move $t0, $sp +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 496($sp) +lw $t1, 492($sp) +sw $t1, 4($sp) +label_53: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 508 +jr $ra +A2I.a2i: +addi $sp, $sp, -312 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +la $t0, 1 +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +la $t0, 0 +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 64($sp) +la $t0, s_13 +sw $t0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 100($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 104($sp) +b result_11 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +la $t0, 1 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +la $t0, 0 +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 152($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 128($sp) +la $t0, s_14 +sw $t0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 164($sp) +lw $t0, 128($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 124($sp) +lw $a0, 120($sp) +lw $t1, 124($sp) +seq $a0, $a0, $t1 +sw $a0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 168($sp) +b result_27 +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 172($sp) +lw $t1, 172($sp) +sw $t1, 108($sp) +b label_57 +label_56: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +la $t0, 1 +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 212($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 192($sp) +lw $t0, 204($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $a0, 192($sp) +lw $t1, 196($sp) +sub $a0, $a0, $t1 +sw $a0, 188($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 184($sp) +move $t0, $sp +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 216($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +la $t0, 1 +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 228($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 180($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 176($sp) +lw $t1, 176($sp) +sw $t1, 108($sp) +label_57: +lw $t1, 108($sp) +sw $t1, 44($sp) +b label_58 +label_55: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 268($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 272($sp) +la $t0, 1 +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 280($sp) +lw $t0, 268($sp) +lw $t1, 16($t0) +sw $t1, 260($sp) +lw $t0, 272($sp) +lw $t1, 16($t0) +sw $t1, 264($sp) +lw $a0, 260($sp) +lw $t1, 264($sp) +sub $a0, $a0, $t1 +sw $a0, 256($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 288($sp) +la $t0, 1 +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 296($sp) +move $t0, $sp +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 244($sp) +lw $t0, 244($sp) +lw $t1, 16($t0) +sw $t1, 240($sp) +lw $t1, 240($sp) +neg $a0, $t1 +sw $a0, 236($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 232($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 300($sp) +lw $t1, 232($sp) +sw $t1, 44($sp) +label_58: +lw $t1, 44($sp) +sw $t1, 4($sp) +b label_59 +label_54: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 304($sp) +la $t0, 0 +sw $t0, 308($sp) +move $t0, $sp +lw $t1, 308($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 312($sp) +lw $t1, 304($sp) +sw $t1, 4($sp) +label_59: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 324 +jr $ra +A2I.a2i_aux: +addi $sp, $sp, -188 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +lw $t1, 20($sp) +sw $t1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) +label_60: +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +slt $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 64($sp) +b result_11 +b label_62 +label_61: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +la $t0, 10 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +mul $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +la $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 116($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +add $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t1, 68($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +la $t0, 1 +sw $t0, 164($sp) +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 168($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 152($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 156($sp) +lw $a0, 152($sp) +lw $t1, 156($sp) +add $a0, $a0, $t1 +sw $a0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 172($sp) +lw $t1, 144($sp) +sw $t1, 40($sp) +b label_60 +label_62: +la $t0, None +sw $t0, 44($sp) +lw $t1, 44($sp) +sw $t1, 180($sp) +lw $t1, 180($sp) +sw $t1, 184($sp) +lw $t1, 16($sp) +sw $t1, 188($sp) +lw $a1, 188($sp) +lw $ra, 0($sp) +addi $sp, $sp, 200 +jr $ra +A2I.i2a: +addi $sp, $sp, -156 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +la $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +la $t0, 0 +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +slt $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +b result_10 +la $t0, s_13 +sw $t0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +la $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $t1, 120($sp) +neg $a0, $t1 +sw $a0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +lw $a0, 104($sp) +lw $t1, 108($sp) +mul $a0, $a0, $t1 +sw $a0, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_65 +label_64: +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 144($sp) +lw $t1, 144($sp) +sw $t1, 40($sp) +label_65: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_66 +label_63: +la $t0, s_3 +sw $t0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 156($sp) +lw $t1, 152($sp) +sw $t1, 4($sp) +label_66: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 168 +jr $ra +A2I.i2a_aux: +addi $sp, $sp, -152 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +la $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +la $t0, 10 +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 64($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t1, 40($sp) +sw $t1, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +la $t0, 10 +sw $t0, 124($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 128($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +lw $a0, 112($sp) +lw $t1, 116($sp) +mul $a0, $a0, $t1 +sw $a0, 108($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) +sub $a0, $a0, $t1 +sw $a0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 140($sp) +lw $t1, 140($sp) +sw $t1, 4($sp) +b label_68 +label_67: +la $t0, empty_str +sw $t0, 144($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 152($sp) +lw $t1, 148($sp) +sw $t1, 4($sp) +label_68: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 164 +jr $ra +Main_init: +addi $sp, $sp, -28 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, empty_str +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +lw $t0, 32($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $t0, 32($sp) +la $t1, void +sw $t1, 20($t0) +lw $t0, 32($sp) +la $t1, void +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +la $t0, 0 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 28($sp) +lw $t0, 32($sp) +lw $t1, 20($sp) +sw $t1, 28($t0) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Main.menu: +addi $sp, $sp, -356 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_15 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 20($sp) +la $t0, s_16 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +la $t0, s_17 +sw $t0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 56($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 44($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 60($sp) +la $t0, s_18 +sw $t0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 80($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 68($sp) +la $t0, s_19 +sw $t0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 84($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 100($sp) +la $t0, s_20 +sw $t0, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 108($sp) +la $t0, s_21 +sw $t0, 128($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 124($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 144($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 140($sp) +la $t0, s_22 +sw $t0, 152($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 160($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 148($sp) +la $t0, s_23 +sw $t0, 168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 164($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 184($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 180($sp) +la $t0, s_24 +sw $t0, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 196($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 200($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 188($sp) +la $t0, s_25 +sw $t0, 208($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 212($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 216($sp) +move $t0, $sp +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 204($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 224($sp) +move $t0, $sp +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 220($sp) +la $t0, s_26 +sw $t0, 232($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 236($sp) +move $t0, $sp +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 240($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 228($sp) +la $t0, s_27 +sw $t0, 248($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 256($sp) +move $t0, $sp +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 244($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 264($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 260($sp) +la $t0, s_28 +sw $t0, 272($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 280($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 268($sp) +la $t0, s_29 +sw $t0, 288($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 296($sp) +move $t0, $sp +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 284($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 300($sp) +la $t0, s_30 +sw $t0, 312($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 320($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 308($sp) +la $t0, s_31 +sw $t0, 328($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 328($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 336($sp) +move $t0, $sp +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 324($sp) +la $t0, s_32 +sw $t0, 344($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 348($sp) +move $t0, $sp +lw $t1, 344($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 352($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 340($sp) +move $t0, $sp +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 356($sp) +lw $a1, 356($sp) +lw $ra, 0($sp) +addi $sp, $sp, 364 +jr $ra +Main.prompt: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_33 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +la $t0, s_34 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 36($sp) +lw $a1, 36($sp) +lw $ra, 0($sp) +addi $sp, $sp, 44 +jr $ra +Main.get_int: +addi $sp, $sp, -32 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 10 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 8($sp) +lw $t1, 4($sp) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 16($sp) +lw $t1, 16($sp) +sw $t1, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 24($sp) +lw $t1, 24($sp) +sw $t1, 28($sp) +lw $t1, 28($sp) +sw $t1, 32($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 40 +jr $ra +Main.is_even: +addi $sp, $sp, -196 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t1, 204($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +slt $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_2 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +la $t0, 0 +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 72($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +b result_11 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +la $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +seq $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 112($sp) +b result_20 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +la $t0, 2 +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $t0, 136($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +lw $a0, 128($sp) +lw $t1, 132($sp) +sub $a0, $a0, $t1 +sw $a0, 124($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 148($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 116($sp) +lw $t1, 116($sp) +sw $t1, 80($sp) +b label_72 +label_71: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +la $t0, 0 +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 160($sp) +lw $t1, 152($sp) +sw $t1, 80($sp) +label_72: +lw $t1, 80($sp) +sw $t1, 44($sp) +b label_73 +label_70: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 164($sp) +la $t0, 0 +sw $t0, 168($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 172($sp) +lw $t1, 164($sp) +sw $t1, 44($sp) +label_73: +lw $t1, 44($sp) +sw $t1, 8($sp) +b label_74 +label_69: +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 188($sp) +lw $t1, 188($sp) +neg $a0, $t1 +sw $a0, 184($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 180($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 192($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 176($sp) +lw $t1, 176($sp) +sw $t1, 8($sp) +label_74: +lw $t1, 8($sp) +sw $t1, 196($sp) +lw $a1, 196($sp) +lw $ra, 0($sp) +addi $sp, $sp, 208 +jr $ra +Main.class_type: +addi $sp, $sp, -124 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 132($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_76 +b case_void_error +label_76: +blt $t1 0 label_77 +bgt $t1 11 label_77 +lw $t1, 132($sp) +sw $t1, 8($sp) +la $t0, s_35 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 12($sp) +lw $t1, 12($sp) +sw $t1, 4($sp) +b label_75 +label_77: +blt $t1 9 label_78 +bgt $t1 9 label_78 +lw $t1, 132($sp) +sw $t1, 28($sp) +la $t0, s_36 +sw $t0, 36($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 44($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 32($sp) +lw $t1, 32($sp) +sw $t1, 4($sp) +b label_75 +label_78: +blt $t1 8 label_79 +bgt $t1 8 label_79 +lw $t1, 132($sp) +sw $t1, 48($sp) +la $t0, s_37 +sw $t0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 52($sp) +lw $t1, 52($sp) +sw $t1, 4($sp) +b label_75 +label_79: +blt $t1 7 label_80 +bgt $t1 7 label_80 +lw $t1, 132($sp) +sw $t1, 68($sp) +la $t0, s_38 +sw $t0, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 72($sp) +lw $t1, 72($sp) +sw $t1, 4($sp) +b label_75 +label_80: +blt $t1 6 label_81 +bgt $t1 6 label_81 +lw $t1, 132($sp) +sw $t1, 88($sp) +la $t0, s_39 +sw $t0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 92($sp) +lw $t1, 92($sp) +sw $t1, 4($sp) +b label_75 +label_81: +blt $t1 5 label_82 +bgt $t1 5 label_82 +lw $t1, 132($sp) +sw $t1, 108($sp) +la $t0, s_40 +sw $t0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 124($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 112($sp) +lw $t1, 112($sp) +sw $t1, 4($sp) +b label_75 +label_82: +b case_no_match_error +label_75: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 136 +jr $ra +Main.print: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 10 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 8($sp) +lw $t1, 4($sp) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 16($sp) +la $t0, s_41 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +lw $t1, 28($sp) +sw $t1, 44($sp) +lw $a1, 44($sp) +lw $ra, 0($sp) +addi $sp, $sp, 56 +jr $ra +Main.main: +addi $sp, $sp, -1136 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 8($sp) +lw $t0, 1140($sp) +lw $t1, 4($sp) +sw $t1, 20($t0) +label_83: +lw $t0, 1140($sp) +lw $t1, 28($t0) +sw $t1, 20($sp) +b flag_4 +b label_85 +label_84: +la $t0, s_42 +sw $t0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 44($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 40($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 56($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 52($sp) +b result_12 +la $t0, s_43 +sw $t0, 68($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 76($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 48($sp) +b label_87 +label_86: +la $t0, s_44 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 80($sp) +lw $t1, 80($sp) +sw $t1, 48($sp) +label_87: +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 100($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 104($sp) +lw $t0, 1140($sp) +lw $t1, 104($sp) +sw $t1, 16($t0) +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +la $t0, s_45 +sw $t0, 136($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 144($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 148($sp) +b result_28 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 172($sp) +la $t0, s_46 +sw $t0, 176($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 180($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 184($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 188($sp) +b result_38 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 212($sp) +la $t0, s_47 +sw $t0, 216($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 224($sp) +move $t0, $sp +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 196($sp) +move $t0, $sp +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 228($sp) +b result_48 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 252($sp) +la $t0, s_48 +sw $t0, 256($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 264($sp) +move $t0, $sp +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 236($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 268($sp) +b result_58 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 292($sp) +la $t0, s_49 +sw $t0, 296($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 300($sp) +move $t0, $sp +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 304($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 280($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 308($sp) +b result_68 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 332($sp) +la $t0, s_50 +sw $t0, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 340($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 340($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 344($sp) +move $t0, $sp +lw $t1, 340($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 320($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 348($sp) +b result_78 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 372($sp) +la $t0, s_51 +sw $t0, 376($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 380($sp) +move $t0, $sp +lw $t1, 376($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 384($sp) +move $t0, $sp +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 360($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 356($sp) +move $t0, $sp +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 356($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 388($sp) +b result_88 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 412($sp) +la $t0, s_52 +sw $t0, 416($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 424($sp) +move $t0, $sp +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 412($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 400($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 400($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 428($sp) +b result_98 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 452($sp) +la $t0, s_53 +sw $t0, 456($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 460($sp) +move $t0, $sp +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 460($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 464($sp) +move $t0, $sp +lw $t1, 460($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 440($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 436($sp) +move $t0, $sp +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 436($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 468($sp) +b result_108 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_54 +sw $t0, 496($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 500($sp) +move $t0, $sp +lw $t1, 496($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 504($sp) +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 480($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 508($sp) +b result_118 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 516($sp) +move $t0, $sp +lw $t1, 516($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 520($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 528($sp) +move $t0, $sp +lw $t1, 528($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 528($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 524($sp) +move $t0, $sp +lw $t1, 524($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 516($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 516($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 512($sp) +lw $t0, 1140($sp) +lw $t1, 512($sp) +sw $t1, 20($t0) +lw $t1, 512($sp) +sw $t1, 472($sp) +b label_98 +label_97: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 536($sp) +la $t0, 0 +sw $t0, 540($sp) +move $t0, $sp +lw $t1, 540($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 536($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 544($sp) +lw $t0, 1140($sp) +lw $t1, 536($sp) +sw $t1, 28($t0) +lw $t1, 536($sp) +sw $t1, 472($sp) +label_98: +lw $t1, 472($sp) +sw $t1, 432($sp) +b label_99 +label_96: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 552($sp) +move $t0, $sp +lw $t1, 552($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 556($sp) +lw $t0, 1140($sp) +lw $t1, 552($sp) +sw $t1, 20($t0) +lw $t1, 552($sp) +sw $t1, 432($sp) +label_99: +lw $t1, 432($sp) +sw $t1, 392($sp) +b label_100 +label_95: +la $t1, void +sw $t1, 564($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 572($sp) +move $t0, $sp +lw $t1, 572($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 576($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 584($sp) +move $t0, $sp +lw $t1, 584($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 584($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 580($sp) +move $t0, $sp +lw $t1, 580($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 572($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 572($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 568($sp) +lw $t1, 568($sp) +sw $t1, 564($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 612($sp) +move $t0, $sp +lw $t1, 612($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 612($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 608($sp) +move $t0, $sp +lw $t1, 564($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 564($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 632($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 636($sp) +la $t0, 8 +sw $t0, 640($sp) +move $t0, $sp +lw $t1, 640($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 636($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 644($sp) +lw $t0, 632($sp) +lw $t1, 16($t0) +sw $t1, 624($sp) +lw $t0, 636($sp) +lw $t1, 16($t0) +sw $t1, 628($sp) +lw $a0, 624($sp) +lw $t1, 628($sp) +mul $a0, $a0, $t1 +sw $a0, 620($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 616($sp) +move $t0, $sp +lw $t1, 620($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 616($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 648($sp) +lw $t0, 608($sp) +lw $t1, 16($t0) +sw $t1, 600($sp) +lw $t0, 616($sp) +lw $t1, 16($t0) +sw $t1, 604($sp) +lw $a0, 600($sp) +lw $t1, 604($sp) +sub $a0, $a0, $t1 +sw $a0, 596($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 592($sp) +move $t0, $sp +lw $t1, 596($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 592($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 652($sp) +lw $t1, 592($sp) +sw $t1, 656($sp) +la $t0, s_42 +sw $t0, 664($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 668($sp) +move $t0, $sp +lw $t1, 664($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 668($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 672($sp) +move $t0, $sp +lw $t1, 668($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 660($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 680($sp) +move $t0, $sp +lw $t1, 680($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 676($sp) +la $t0, s_55 +sw $t0, 688($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 692($sp) +move $t0, $sp +lw $t1, 688($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 692($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 696($sp) +move $t0, $sp +lw $t1, 692($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 684($sp) +move $t0, $sp +lw $t1, 564($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 700($sp) +la $t0, s_56 +sw $t0, 708($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 712($sp) +move $t0, $sp +lw $t1, 708($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 712($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 716($sp) +move $t0, $sp +lw $t1, 712($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 704($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 10 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 720($sp) +move $t0, $sp +lw $t1, 720($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 724($sp) +lw $t1, 720($sp) +sw $t1, 728($sp) +move $t0, $sp +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 728($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 728($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 736($sp) +move $t0, $sp +lw $t1, 736($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 732($sp) +la $t0, s_33 +sw $t0, 744($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 748($sp) +move $t0, $sp +lw $t1, 744($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 748($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 752($sp) +move $t0, $sp +lw $t1, 748($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 740($sp) +lw $t1, 740($sp) +sw $t1, 756($sp) +lw $t1, 756($sp) +sw $t1, 760($sp) +lw $t0, 1140($sp) +lw $t1, 564($sp) +sw $t1, 20($t0) +lw $t1, 564($sp) +sw $t1, 768($sp) +lw $t1, 768($sp) +sw $t1, 392($sp) +label_100: +lw $t1, 392($sp) +sw $t1, 352($sp) +b label_101 +label_94: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 780($sp) +move $t0, $sp +lw $t1, 780($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 784($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 792($sp) +move $t0, $sp +lw $t1, 792($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 792($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 788($sp) +move $t0, $sp +lw $t1, 788($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 780($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 780($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 776($sp) +b result_193 +la $t0, s_42 +sw $t0, 800($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 804($sp) +move $t0, $sp +lw $t1, 800($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 804($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 808($sp) +move $t0, $sp +lw $t1, 804($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 796($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 816($sp) +move $t0, $sp +lw $t1, 816($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 812($sp) +la $t0, s_57 +sw $t0, 824($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 828($sp) +move $t0, $sp +lw $t1, 824($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 828($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 832($sp) +move $t0, $sp +lw $t1, 828($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 820($sp) +lw $t1, 820($sp) +sw $t1, 772($sp) +b label_103 +label_102: +la $t0, s_42 +sw $t0, 840($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 844($sp) +move $t0, $sp +lw $t1, 840($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 844($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 848($sp) +move $t0, $sp +lw $t1, 844($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 836($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 856($sp) +move $t0, $sp +lw $t1, 856($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 852($sp) +la $t0, s_58 +sw $t0, 864($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 868($sp) +move $t0, $sp +lw $t1, 864($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 868($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 872($sp) +move $t0, $sp +lw $t1, 868($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 860($sp) +lw $t1, 860($sp) +sw $t1, 772($sp) +label_103: +lw $t1, 772($sp) +sw $t1, 352($sp) +label_101: +lw $t1, 352($sp) +sw $t1, 312($sp) +b label_104 +label_93: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 880($sp) +move $t0, $sp +lw $t1, 880($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 884($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 892($sp) +move $t0, $sp +lw $t1, 892($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 892($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 888($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 896($sp) +move $t0, $sp +lw $t1, 888($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 880($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 896($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 876($sp) +lw $t0, 1140($sp) +lw $t1, 876($sp) +sw $t1, 20($t0) +lw $t1, 876($sp) +sw $t1, 312($sp) +label_104: +lw $t1, 312($sp) +sw $t1, 272($sp) +b label_105 +label_92: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 908($sp) +move $t0, $sp +lw $t1, 908($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 912($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 920($sp) +move $t0, $sp +lw $t1, 920($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 920($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 916($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 924($sp) +move $t0, $sp +lw $t1, 916($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 908($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 924($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 904($sp) +lw $t0, 1140($sp) +lw $t1, 904($sp) +sw $t1, 20($t0) +lw $t1, 904($sp) +sw $t1, 272($sp) +label_105: +lw $t1, 272($sp) +sw $t1, 232($sp) +b label_106 +label_91: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 936($sp) +move $t0, $sp +lw $t1, 936($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 940($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 948($sp) +move $t0, $sp +lw $t1, 948($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 948($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 944($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 952($sp) +move $t0, $sp +lw $t1, 944($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 936($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 952($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 932($sp) +lw $t0, 1140($sp) +lw $t1, 932($sp) +sw $t1, 20($t0) +lw $t1, 932($sp) +sw $t1, 232($sp) +label_106: +lw $t1, 232($sp) +sw $t1, 192($sp) +b label_107 +label_90: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 964($sp) +move $t0, $sp +lw $t1, 964($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 968($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 972($sp) +move $t0, $sp +lw $t1, 972($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 964($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 964($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 960($sp) +lw $t0, 1140($sp) +lw $t1, 960($sp) +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 984($sp) +move $t0, $sp +lw $t1, 984($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 988($sp) +lw $t0, 1140($sp) +lw $t1, 24($t0) +sw $t1, 996($sp) +move $t0, $sp +lw $t1, 996($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 996($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 992($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1004($sp) +move $t0, $sp +lw $t1, 1004($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1004($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1000($sp) +move $t0, $sp +lw $t1, 992($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1000($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 984($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 984($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 980($sp) +lw $t0, 1140($sp) +lw $t1, 980($sp) +sw $t1, 20($t0) +lw $t1, 980($sp) +sw $t1, 192($sp) +label_107: +lw $t1, 192($sp) +sw $t1, 152($sp) +b label_108 +label_89: +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1016($sp) +lw $t0, 1016($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_110 +b case_void_error +label_110: +blt $t1 0 label_111 +bgt $t1 11 label_111 +lw $t1, 1016($sp) +sw $t1, 1020($sp) +la $t0, s_35 +sw $t0, 1028($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1032($sp) +move $t0, $sp +lw $t1, 1028($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1032($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1036($sp) +move $t0, $sp +lw $t1, 1032($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1024($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 1040($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 1044($sp) +la $t0, 0 +sw $t0, 1048($sp) +move $t0, $sp +lw $t1, 1048($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1044($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1052($sp) +lw $t1, 1044($sp) +sw $t1, 1012($sp) +b label_109 +label_111: +blt $t1 7 label_112 +bgt $t1 7 label_112 +lw $t1, 1016($sp) +sw $t1, 1056($sp) +move $t0, $sp +lw $t1, 1056($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1056($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1064($sp) +move $t0, $sp +lw $t1, 1064($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1056($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1056($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 1060($sp) +lw $t0, 1140($sp) +lw $t1, 1060($sp) +sw $t1, 20($t0) +lw $t1, 1060($sp) +sw $t1, 1012($sp) +b label_109 +label_112: +blt $t1 5 label_113 +bgt $t1 5 label_113 +lw $t1, 1016($sp) +sw $t1, 1072($sp) +move $t0, $sp +lw $t1, 1072($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1072($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1080($sp) +move $t0, $sp +lw $t1, 1080($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1072($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1072($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 1076($sp) +lw $t0, 1140($sp) +lw $t1, 1076($sp) +sw $t1, 20($t0) +lw $t1, 1076($sp) +sw $t1, 1012($sp) +b label_109 +label_113: +b case_no_match_error +label_109: +lw $t1, 1012($sp) +sw $t1, 152($sp) +label_108: +lw $t1, 152($sp) +sw $t1, 112($sp) +b label_114 +label_88: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 1092($sp) +move $t0, $sp +lw $t1, 1092($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 1096($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 1100($sp) +move $t0, $sp +lw $t1, 1100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1092($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1092($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 1088($sp) +lw $t0, 1140($sp) +lw $t1, 1088($sp) +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 1112($sp) +move $t0, $sp +lw $t1, 1112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 1116($sp) +lw $t0, 1140($sp) +lw $t1, 24($t0) +sw $t1, 1124($sp) +move $t0, $sp +lw $t1, 1124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1124($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1120($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1128($sp) +move $t0, $sp +lw $t1, 1120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1112($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 1108($sp) +lw $t0, 1140($sp) +lw $t1, 1108($sp) +sw $t1, 20($t0) +lw $t1, 1108($sp) +sw $t1, 112($sp) +label_114: +b label_83 +label_85: +la $t0, None +sw $t0, 16($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 1144 +jr $ra \ No newline at end of file diff --git a/tests/codegen/arith_test.cil b/tests/codegen/arith_test.cil new file mode 100644 index 00000000..e69de29b diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips new file mode 100644 index 00000000..685c9777 --- /dev/null +++ b/tests/codegen/atoi.mips @@ -0,0 +1,4401 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A2I_name: .asciiz "A2I" +A2I_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "0" +s_4: .asciiz "1" +s_5: .asciiz "2" +s_6: .asciiz "3" +s_7: .asciiz "4" +s_8: .asciiz "5" +s_9: .asciiz "6" +s_10: .asciiz "7" +s_11: .asciiz "8" +s_12: .asciiz "9" +s_13: .asciiz "-" +s_14: .asciiz "+" +s_15: .asciiz "678987" +s_16: .asciiz " == " +s_17: .asciiz "\n" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +A2I_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A2I.c2i: +addi $sp, $sp, -496 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +la $t0, s_4 +sw $t0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +b result_10 +la $t0, s_5 +sw $t0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +b result_19 +la $t0, s_6 +sw $t0, 132($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 144($sp) +b result_28 +la $t0, s_7 +sw $t0, 168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 180($sp) +b result_37 +la $t0, s_8 +sw $t0, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 212($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +b result_46 +la $t0, s_9 +sw $t0, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 252($sp) +b result_55 +la $t0, s_10 +sw $t0, 276($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 280($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 284($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 288($sp) +b result_64 +la $t0, s_11 +sw $t0, 312($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 320($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 296($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 324($sp) +b result_73 +la $t0, s_12 +sw $t0, 348($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 356($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 360($sp) +b result_82 +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 364($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 368($sp) +la $t0, 0 +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 376($sp) +lw $t1, 368($sp) +sw $t1, 328($sp) +b label_11 +label_10: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 380($sp) +la $t0, 9 +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 388($sp) +lw $t1, 380($sp) +sw $t1, 328($sp) +label_11: +lw $t1, 328($sp) +sw $t1, 292($sp) +b label_12 +label_9: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 392($sp) +la $t0, 8 +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 400($sp) +lw $t1, 392($sp) +sw $t1, 292($sp) +label_12: +lw $t1, 292($sp) +sw $t1, 256($sp) +b label_13 +label_8: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 404($sp) +la $t0, 7 +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 412($sp) +lw $t1, 404($sp) +sw $t1, 256($sp) +label_13: +lw $t1, 256($sp) +sw $t1, 220($sp) +b label_14 +label_7: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 416($sp) +la $t0, 6 +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 424($sp) +lw $t1, 416($sp) +sw $t1, 220($sp) +label_14: +lw $t1, 220($sp) +sw $t1, 184($sp) +b label_15 +label_6: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 428($sp) +la $t0, 5 +sw $t0, 432($sp) +move $t0, $sp +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 436($sp) +lw $t1, 428($sp) +sw $t1, 184($sp) +label_15: +lw $t1, 184($sp) +sw $t1, 148($sp) +b label_16 +label_5: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 440($sp) +la $t0, 4 +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 448($sp) +lw $t1, 440($sp) +sw $t1, 148($sp) +label_16: +lw $t1, 148($sp) +sw $t1, 112($sp) +b label_17 +label_4: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 452($sp) +la $t0, 3 +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 460($sp) +lw $t1, 452($sp) +sw $t1, 112($sp) +label_17: +lw $t1, 112($sp) +sw $t1, 76($sp) +b label_18 +label_3: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 464($sp) +la $t0, 2 +sw $t0, 468($sp) +move $t0, $sp +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 472($sp) +lw $t1, 464($sp) +sw $t1, 76($sp) +label_18: +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_19 +label_2: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +la $t0, 1 +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 484($sp) +lw $t1, 476($sp) +sw $t1, 40($sp) +label_19: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_20 +label_1: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 488($sp) +la $t0, 0 +sw $t0, 492($sp) +move $t0, $sp +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 496($sp) +lw $t1, 488($sp) +sw $t1, 4($sp) +label_20: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 508 +jr $ra +A2I.i2c: +addi $sp, $sp, -496 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +la $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +la $t0, 1 +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +seq $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +b result_10 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +la $t0, 2 +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 104($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) +seq $a0, $a0, $t1 +sw $a0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +b result_19 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +la $t0, 3 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 124($sp) +lw $t0, 132($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $a0, 124($sp) +lw $t1, 128($sp) +seq $a0, $a0, $t1 +sw $a0, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 144($sp) +b result_28 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 168($sp) +la $t0, 4 +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 176($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 160($sp) +lw $t0, 168($sp) +lw $t1, 16($t0) +sw $t1, 164($sp) +lw $a0, 160($sp) +lw $t1, 164($sp) +seq $a0, $a0, $t1 +sw $a0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 180($sp) +b result_37 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +la $t0, 5 +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 212($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $t0, 204($sp) +lw $t1, 16($t0) +sw $t1, 200($sp) +lw $a0, 196($sp) +lw $t1, 200($sp) +seq $a0, $a0, $t1 +sw $a0, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +b result_46 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 240($sp) +la $t0, 6 +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 248($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 232($sp) +lw $t0, 240($sp) +lw $t1, 16($t0) +sw $t1, 236($sp) +lw $a0, 232($sp) +lw $t1, 236($sp) +seq $a0, $a0, $t1 +sw $a0, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 252($sp) +b result_55 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +la $t0, 7 +sw $t0, 280($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 268($sp) +lw $t0, 276($sp) +lw $t1, 16($t0) +sw $t1, 272($sp) +lw $a0, 268($sp) +lw $t1, 272($sp) +seq $a0, $a0, $t1 +sw $a0, 264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 288($sp) +b result_64 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 312($sp) +la $t0, 8 +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 320($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 304($sp) +lw $t0, 312($sp) +lw $t1, 16($t0) +sw $t1, 308($sp) +lw $a0, 304($sp) +lw $t1, 308($sp) +seq $a0, $a0, $t1 +sw $a0, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 296($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 324($sp) +b result_73 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 348($sp) +la $t0, 9 +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 356($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 340($sp) +lw $t0, 348($sp) +lw $t1, 16($t0) +sw $t1, 344($sp) +lw $a0, 340($sp) +lw $t1, 344($sp) +seq $a0, $a0, $t1 +sw $a0, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 360($sp) +b result_82 +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 364($sp) +la $t0, empty_str +sw $t0, 368($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 376($sp) +lw $t1, 372($sp) +sw $t1, 328($sp) +b label_31 +label_30: +la $t0, s_12 +sw $t0, 380($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 388($sp) +lw $t1, 384($sp) +sw $t1, 328($sp) +label_31: +lw $t1, 328($sp) +sw $t1, 292($sp) +b label_32 +label_29: +la $t0, s_11 +sw $t0, 392($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 400($sp) +lw $t1, 396($sp) +sw $t1, 292($sp) +label_32: +lw $t1, 292($sp) +sw $t1, 256($sp) +b label_33 +label_28: +la $t0, s_10 +sw $t0, 404($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 412($sp) +lw $t1, 408($sp) +sw $t1, 256($sp) +label_33: +lw $t1, 256($sp) +sw $t1, 220($sp) +b label_34 +label_27: +la $t0, s_9 +sw $t0, 416($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 424($sp) +lw $t1, 420($sp) +sw $t1, 220($sp) +label_34: +lw $t1, 220($sp) +sw $t1, 184($sp) +b label_35 +label_26: +la $t0, s_8 +sw $t0, 428($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 432($sp) +move $t0, $sp +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 436($sp) +lw $t1, 432($sp) +sw $t1, 184($sp) +label_35: +lw $t1, 184($sp) +sw $t1, 148($sp) +b label_36 +label_25: +la $t0, s_7 +sw $t0, 440($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 448($sp) +lw $t1, 444($sp) +sw $t1, 148($sp) +label_36: +lw $t1, 148($sp) +sw $t1, 112($sp) +b label_37 +label_24: +la $t0, s_6 +sw $t0, 452($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 460($sp) +lw $t1, 456($sp) +sw $t1, 112($sp) +label_37: +lw $t1, 112($sp) +sw $t1, 76($sp) +b label_38 +label_23: +la $t0, s_5 +sw $t0, 464($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 468($sp) +move $t0, $sp +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 472($sp) +lw $t1, 468($sp) +sw $t1, 76($sp) +label_38: +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_39 +label_22: +la $t0, s_4 +sw $t0, 476($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 484($sp) +lw $t1, 480($sp) +sw $t1, 40($sp) +label_39: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_40 +label_21: +la $t0, s_3 +sw $t0, 488($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 492($sp) +move $t0, $sp +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 496($sp) +lw $t1, 492($sp) +sw $t1, 4($sp) +label_40: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 508 +jr $ra +A2I.a2i: +addi $sp, $sp, -312 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +la $t0, 1 +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +la $t0, 0 +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 64($sp) +la $t0, s_13 +sw $t0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 100($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 104($sp) +b result_11 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +la $t0, 1 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +la $t0, 0 +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 152($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 128($sp) +la $t0, s_14 +sw $t0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 164($sp) +lw $t0, 128($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 124($sp) +lw $a0, 120($sp) +lw $t1, 124($sp) +seq $a0, $a0, $t1 +sw $a0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 168($sp) +b result_27 +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 172($sp) +lw $t1, 172($sp) +sw $t1, 108($sp) +b label_44 +label_43: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +la $t0, 1 +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 212($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 192($sp) +lw $t0, 204($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $a0, 192($sp) +lw $t1, 196($sp) +sub $a0, $a0, $t1 +sw $a0, 188($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 184($sp) +move $t0, $sp +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 216($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +la $t0, 1 +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 228($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 180($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 176($sp) +lw $t1, 176($sp) +sw $t1, 108($sp) +label_44: +lw $t1, 108($sp) +sw $t1, 44($sp) +b label_45 +label_42: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 268($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 272($sp) +la $t0, 1 +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 280($sp) +lw $t0, 268($sp) +lw $t1, 16($t0) +sw $t1, 260($sp) +lw $t0, 272($sp) +lw $t1, 16($t0) +sw $t1, 264($sp) +lw $a0, 260($sp) +lw $t1, 264($sp) +sub $a0, $a0, $t1 +sw $a0, 256($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 288($sp) +la $t0, 1 +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 296($sp) +move $t0, $sp +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 244($sp) +lw $t0, 244($sp) +lw $t1, 16($t0) +sw $t1, 240($sp) +lw $t1, 240($sp) +neg $a0, $t1 +sw $a0, 236($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 232($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 300($sp) +lw $t1, 232($sp) +sw $t1, 44($sp) +label_45: +lw $t1, 44($sp) +sw $t1, 4($sp) +b label_46 +label_41: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 304($sp) +la $t0, 0 +sw $t0, 308($sp) +move $t0, $sp +lw $t1, 308($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 312($sp) +lw $t1, 304($sp) +sw $t1, 4($sp) +label_46: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 324 +jr $ra +A2I.a2i_aux: +addi $sp, $sp, -188 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +lw $t1, 20($sp) +sw $t1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) +label_47: +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +slt $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 64($sp) +b result_11 +b label_49 +label_48: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +la $t0, 10 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +mul $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +la $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 116($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +add $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t1, 68($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +la $t0, 1 +sw $t0, 164($sp) +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 168($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 152($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 156($sp) +lw $a0, 152($sp) +lw $t1, 156($sp) +add $a0, $a0, $t1 +sw $a0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 172($sp) +lw $t1, 144($sp) +sw $t1, 40($sp) +b label_47 +label_49: +la $t0, None +sw $t0, 44($sp) +lw $t1, 44($sp) +sw $t1, 180($sp) +lw $t1, 180($sp) +sw $t1, 184($sp) +lw $t1, 16($sp) +sw $t1, 188($sp) +lw $a1, 188($sp) +lw $ra, 0($sp) +addi $sp, $sp, 200 +jr $ra +A2I.i2a: +addi $sp, $sp, -156 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +la $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +la $t0, 0 +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +slt $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +b result_10 +la $t0, s_13 +sw $t0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +la $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $t1, 120($sp) +neg $a0, $t1 +sw $a0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +lw $a0, 104($sp) +lw $t1, 108($sp) +mul $a0, $a0, $t1 +sw $a0, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_52 +label_51: +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 144($sp) +lw $t1, 144($sp) +sw $t1, 40($sp) +label_52: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_53 +label_50: +la $t0, s_3 +sw $t0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 156($sp) +lw $t1, 152($sp) +sw $t1, 4($sp) +label_53: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 168 +jr $ra +A2I.i2a_aux: +addi $sp, $sp, -152 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +la $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +la $t0, 10 +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 64($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t1, 40($sp) +sw $t1, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +la $t0, 10 +sw $t0, 124($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 128($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +lw $a0, 112($sp) +lw $t1, 116($sp) +mul $a0, $a0, $t1 +sw $a0, 108($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) +sub $a0, $a0, $t1 +sw $a0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 140($sp) +lw $t1, 140($sp) +sw $t1, 4($sp) +b label_55 +label_54: +la $t0, empty_str +sw $t0, 144($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 152($sp) +lw $t1, 148($sp) +sw $t1, 4($sp) +label_55: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 164 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -100 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 12($sp) +la $t0, s_15 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 4($sp) +lw $t1, 4($sp) +sw $t1, 28($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +la $t0, 678987 +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 32($sp) +lw $t1, 32($sp) +sw $t1, 56($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 60($sp) +la $t0, s_16 +sw $t0, 68($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 76($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 80($sp) +la $t0, s_17 +sw $t0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 84($sp) +lw $t1, 84($sp) +sw $t1, 100($sp) +lw $a1, 100($sp) +lw $ra, 0($sp) +addi $sp, $sp, 108 +jr $ra \ No newline at end of file diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips new file mode 100644 index 00000000..9997653b --- /dev/null +++ b/tests/codegen/book_list.mips @@ -0,0 +1,1964 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Book_name: .asciiz "Book" +Book_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Book.initBook +.word Book.print +Article_name: .asciiz "Article" +Article_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Book.initBook +.word Article.print +.word Article.initArticle +BookList_name: .asciiz "BookList" +BookList_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word BookList.isNil +.word BookList.cons +.word BookList.car +.word BookList.cdr +.word BookList.print_list +Cons_name: .asciiz "Cons" +Cons_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Cons.isNil +.word BookList.cons +.word Cons.car +.word Cons.cdr +.word Cons.print_list +.word Cons.init +Nil_name: .asciiz "Nil" +Nil_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Nil.isNil +.word BookList.cons +.word BookList.car +.word BookList.cdr +.word Nil.print_list +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "title: " +s_4: .asciiz "\n" +s_5: .asciiz "author: " +s_6: .asciiz "periodical: " +s_7: .asciiz "- dynamic type was Book -\n" +s_8: .asciiz "- dynamic type was Article -\n" +s_9: .asciiz "Aho, Sethi, and Ullman" +s_10: .asciiz "Compilers, Principles, Techniques, and Tools" +s_11: .asciiz "PC Magazine" +s_12: .asciiz "Ulanoff" +s_13: .asciiz "The Top 100 CD_ROMs" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 10 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Book_init: +addi $sp, $sp, -28 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, empty_str +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +lw $t0, 32($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +la $t0, empty_str +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 28($sp) +lw $t0, 32($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Book.initBook: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($sp) +sw $t1, 16($t0) +lw $t0, 12($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Book.print: +addi $sp, $sp, -80 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 12($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 8($sp) +la $t0, s_4 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +la $t0, s_5 +sw $t0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 52($sp) +lw $t0, 84($sp) +lw $t1, 20($t0) +sw $t1, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 48($sp) +la $t0, s_4 +sw $t0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 80($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 44($sp) +lw $a1, 84($sp) +lw $ra, 0($sp) +addi $sp, $sp, 88 +jr $ra +Article_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Book_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, empty_str +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 24($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Article.initArticle: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 12($sp) +lw $t1, 24($sp) +sw $t1, 24($t0) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 28 +jr $ra +Article.print: +addi $sp, $sp, -48 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Book_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Book_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 4($sp) +la $t0, s_6 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +lw $t0, 52($sp) +lw $t1, 24($t0) +sw $t1, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 16($sp) +la $t0, s_4 +sw $t0, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 12($sp) +lw $a1, 52($sp) +lw $ra, 0($sp) +addi $sp, $sp, 56 +jr $ra +BookList_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +BookList.isNil: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 16($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +BookList.cons: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Cons_init +sw $a1, 8($sp) +lw $t1, 4($sp) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 16($sp) +lw $t1, 16($sp) +sw $t1, 20($sp) +lw $a1, 20($sp) +lw $ra, 0($sp) +addi $sp, $sp, 32 +jr $ra +BookList.car: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Book_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Book_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Book_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +BookList.cdr: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, BookList_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, BookList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal BookList_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +BookList.print_list: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Cons_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal BookList_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $t0, 8($sp) +la $t1, void +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Cons.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Cons.init: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($sp) +sw $t1, 16($t0) +lw $t0, 12($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Cons.car: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Cons.cdr: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 20($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Cons.print_list: +addi $sp, $sp, -60 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 8($sp) +lw $t0, 8($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_2 +b case_void_error +label_2: +blt $t1 5 label_3 +bgt $t1 5 label_3 +lw $t1, 8($sp) +sw $t1, 16($sp) +la $t0, s_7 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +lw $t1, 20($sp) +sw $t1, 4($sp) +b label_1 +label_3: +blt $t1 6 label_4 +bgt $t1 6 label_4 +lw $t1, 8($sp) +sw $t1, 36($sp) +la $t0, s_8 +sw $t0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 40($sp) +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_1 +label_4: +b case_no_match_error +label_1: +lw $t0, 64($sp) +lw $t1, 20($t0) +sw $t1, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 68 +jr $ra +Nil_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal BookList_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Nil.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Nil.print_list: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -128 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Book_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Book_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Book_init +sw $a1, 12($sp) +la $t0, s_9 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +la $t0, s_10 +sw $t0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 4($sp) +lw $t1, 4($sp) +sw $t1, 40($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Article_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Article_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Article_init +sw $a1, 52($sp) +la $t0, s_11 +sw $t0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 64($sp) +la $t0, s_12 +sw $t0, 68($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 76($sp) +la $t0, s_13 +sw $t0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 92($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Nil_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Nil_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Nil_init +sw $a1, 108($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 100($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 96($sp) +lw $t0, 132($sp) +lw $t1, 96($sp) +sw $t1, 16($t0) +lw $t0, 132($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 116($sp) +lw $t1, 116($sp) +sw $t1, 124($sp) +lw $t1, 124($sp) +sw $t1, 128($sp) +lw $a1, 128($sp) +lw $ra, 0($sp) +addi $sp, $sp, 136 +jr $ra \ No newline at end of file diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips new file mode 100644 index 00000000..6ef476b7 --- /dev/null +++ b/tests/codegen/cells.mips @@ -0,0 +1,2296 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +CellularAutomaton_name: .asciiz "CellularAutomaton" +CellularAutomaton_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word CellularAutomaton.init +.word CellularAutomaton.print +.word CellularAutomaton.num_cells +.word CellularAutomaton.cell +.word CellularAutomaton.cell_left_neighbor +.word CellularAutomaton.cell_right_neighbor +.word CellularAutomaton.cell_at_next_evolution +.word CellularAutomaton.evolve +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "\n" +s_4: .asciiz "X" +s_5: .asciiz "." +s_6: .asciiz " X " +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +CellularAutomaton_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, empty_str +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +CellularAutomaton.init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +CellularAutomaton.print: +addi $sp, $sp, -24 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +la $t0, s_3 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 28($sp) +lw $ra, 0($sp) +addi $sp, $sp, 32 +jr $ra +CellularAutomaton.num_cells: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +CellularAutomaton.cell: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +la $t0, 1 +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 32 +jr $ra +CellularAutomaton.cell_left_neighbor: +addi $sp, $sp, -112 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +la $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +la $t0, 1 +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +sub $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 72($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 40($sp) +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_2 +label_1: +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +la $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) +sub $a0, $a0, $t1 +sw $a0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 4($sp) +label_2: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 124 +jr $ra +CellularAutomaton.cell_right_neighbor: +addi $sp, $sp, -112 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +la $t0, 1 +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 52($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $a0, 32($sp) +lw $t1, 36($sp) +sub $a0, $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 56($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 60($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +la $t0, 1 +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 92($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +add $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 4($sp) +b label_4 +label_3: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +la $t0, 0 +sw $t0, 108($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 100($sp) +lw $t1, 100($sp) +sw $t1, 4($sp) +label_4: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 124 +jr $ra +CellularAutomaton.cell_at_next_evolution: +addi $sp, $sp, -292 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 76($sp) +la $t0, s_4 +sw $t0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 88($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +seq $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 92($sp) +b result_14 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +la $t0, 0 +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 104($sp) +lw $t1, 96($sp) +sw $t1, 56($sp) +b label_6 +label_5: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 108($sp) +la $t0, 1 +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 116($sp) +lw $t1, 108($sp) +sw $t1, 56($sp) +label_6: +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 140($sp) +la $t0, s_4 +sw $t0, 144($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 152($sp) +lw $t0, 140($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 136($sp) +lw $a0, 132($sp) +lw $t1, 136($sp) +seq $a0, $a0, $t1 +sw $a0, 128($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 156($sp) +b result_30 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +la $t0, 0 +sw $t0, 164($sp) +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 168($sp) +lw $t1, 160($sp) +sw $t1, 120($sp) +b label_8 +label_7: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +la $t0, 1 +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 180($sp) +lw $t1, 172($sp) +sw $t1, 120($sp) +label_8: +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +add $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 184($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 208($sp) +la $t0, s_4 +sw $t0, 212($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 216($sp) +move $t0, $sp +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 220($sp) +lw $t0, 208($sp) +lw $t1, 16($t0) +sw $t1, 200($sp) +lw $t0, 216($sp) +lw $t1, 16($t0) +sw $t1, 204($sp) +lw $a0, 200($sp) +lw $t1, 204($sp) +seq $a0, $a0, $t1 +sw $a0, 196($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 192($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 224($sp) +b result_47 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 228($sp) +la $t0, 0 +sw $t0, 232($sp) +move $t0, $sp +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 236($sp) +lw $t1, 228($sp) +sw $t1, 188($sp) +b label_10 +label_9: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 240($sp) +la $t0, 1 +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 248($sp) +lw $t1, 240($sp) +sw $t1, 188($sp) +label_10: +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 188($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $a0, 32($sp) +lw $t1, 36($sp) +add $a0, $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 252($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 256($sp) +la $t0, 1 +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 264($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 256($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 268($sp) +b result_1 +la $t0, s_5 +sw $t0, 272($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 280($sp) +lw $t1, 276($sp) +sw $t1, 4($sp) +b label_12 +label_11: +la $t0, s_4 +sw $t0, 284($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 288($sp) +move $t0, $sp +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 292($sp) +lw $t1, 288($sp) +sw $t1, 4($sp) +label_12: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 304 +jr $ra +CellularAutomaton.evolve: +addi $sp, $sp, -104 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 8($sp) +lw $t1, 8($sp) +sw $t1, 12($sp) +la $t1, void +sw $t1, 16($sp) +label_13: +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $a0, 32($sp) +lw $t1, 36($sp) +slt $a0, $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_5 +b label_15 +label_14: +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 52($t2) +jal $t3 +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +la $t0, 1 +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 80($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $a0, 64($sp) +lw $t1, 68($sp) +add $a0, $a0, $t1 +sw $a0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 84($sp) +lw $t1, 56($sp) +sw $t1, 4($sp) +b label_13 +label_15: +la $t0, None +sw $t0, 20($sp) +lw $t0, 108($sp) +lw $t1, 16($sp) +sw $t1, 16($t0) +lw $t1, 108($sp) +sw $t1, 96($sp) +lw $t1, 96($sp) +sw $t1, 100($sp) +lw $t1, 100($sp) +sw $t1, 104($sp) +lw $a1, 104($sp) +lw $ra, 0($sp) +addi $sp, $sp, 112 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -144 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal CellularAutomaton_init +sw $a1, 12($sp) +la $t0, s_6 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 148($sp) +lw $t1, 4($sp) +sw $t1, 16($t0) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +la $t0, 20 +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 48($sp) +lw $t1, 40($sp) +sw $t1, 52($sp) +label_16: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +la $t0, 0 +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 84($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 52($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +slt $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 88($sp) +b result_14 +b label_18 +label_17: +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 56($t2) +jal $t3 +sw $a1, 92($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +la $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 52($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $a0, 116($sp) +lw $t1, 120($sp) +sub $a0, $a0, $t1 +sw $a0, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 108($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t1, 108($sp) +sw $t1, 52($sp) +b label_16 +label_18: +la $t0, None +sw $t0, 56($sp) +lw $t1, 56($sp) +sw $t1, 144($sp) +lw $a1, 148($sp) +lw $ra, 0($sp) +addi $sp, $sp, 152 +jr $ra \ No newline at end of file diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips new file mode 100644 index 00000000..9b431a80 --- /dev/null +++ b/tests/codegen/fib.mips @@ -0,0 +1,1027 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.main +.word Main.fib +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "Enter n to find nth fibonacci number!\n" +s_4: .asciiz "\n" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 20($sp) +la $t0, s_4 +sw $t0, 36($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 44($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 32($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 52 +jr $ra +Main.fib: +addi $sp, $sp, -172 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 1 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +la $t0, 0 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t1, 20($sp) +sw $t1, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +la $t0, 0 +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +lw $t1, 36($sp) +sw $t1, 48($sp) +label_1: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +la $t0, 0 +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 92($sp) +lw $t0, 180($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +seq $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 96($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $t1, 64($sp) +xor $a0, $t1, 1 +sw $a0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 100($sp) +b result_13 +b label_3 +label_2: +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +lw $a0, 112($sp) +lw $t1, 116($sp) +add $a0, $a0, $t1 +sw $a0, 108($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 120($sp) +lw $t1, 104($sp) +sw $t1, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +la $t0, 1 +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 152($sp) +lw $t0, 180($sp) +lw $t1, 16($t0) +sw $t1, 136($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 140($sp) +lw $a0, 136($sp) +lw $t1, 140($sp) +sub $a0, $a0, $t1 +sw $a0, 132($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 156($sp) +lw $t1, 128($sp) +sw $t1, 180($sp) +lw $t1, 16($sp) +sw $t1, 32($sp) +lw $t1, 48($sp) +sw $t1, 16($sp) +b label_1 +label_3: +la $t0, None +sw $t0, 52($sp) +lw $t1, 48($sp) +sw $t1, 172($sp) +lw $a1, 172($sp) +lw $ra, 0($sp) +addi $sp, $sp, 184 +jr $ra \ No newline at end of file diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips new file mode 100644 index 00000000..f30cefc6 --- /dev/null +++ b/tests/codegen/graph.mips @@ -0,0 +1,5317 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Graph_name: .asciiz "Graph" +Graph_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word Graph.add_vertice +.word Graph.print_E +.word Graph.print_V +Vertice_name: .asciiz "Vertice" +Vertice_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Vertice.outgoing +.word Vertice.number +.word Vertice.init +.word Vertice.add_out +.word Vertice.print +Edge_name: .asciiz "Edge" +Edge_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Edge.init +.word Edge.print +EList_name: .asciiz "EList" +EList_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word EList.isNil +.word EList.head +.word EList.tail +.word EList.cons +.word EList.append +.word EList.print +ECons_name: .asciiz "ECons" +ECons_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word ECons.isNil +.word ECons.head +.word ECons.tail +.word EList.cons +.word EList.append +.word ECons.print +.word ECons.init +VList_name: .asciiz "VList" +VList_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word VList.isNil +.word VList.head +.word VList.tail +.word VList.cons +.word VList.print +VCons_name: .asciiz "VCons" +VCons_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word VCons.isNil +.word VCons.head +.word VCons.tail +.word VList.cons +.word VCons.print +.word VCons.init +Parse_name: .asciiz "Parse" +Parse_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Parse.read_input +.word Parse.parse_line +.word Parse.c2i +.word Parse.a2i +.word Parse.a2i_aux +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Parse.read_input +.word Parse.parse_line +.word Parse.c2i +.word Parse.a2i +.word Parse.a2i_aux +.word Main.main +BoolOp_name: .asciiz "BoolOp" +BoolOp_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word BoolOp.and +.word BoolOp.or +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz " (" +s_4: .asciiz "," +s_5: .asciiz ")" +s_6: .asciiz "\n" +s_7: .asciiz "0" +s_8: .asciiz "1" +s_9: .asciiz "2" +s_10: .asciiz "3" +s_11: .asciiz "4" +s_12: .asciiz "5" +s_13: .asciiz "6" +s_14: .asciiz "7" +s_15: .asciiz "8" +s_16: .asciiz "9" +s_17: .asciiz "-" +s_18: .asciiz " " +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 13 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Graph_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $t0, 8($sp) +la $t1, void +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Graph.add_vertice: +addi $sp, $sp, -28 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 8($sp) +lw $t0, 32($sp) +lw $t1, 20($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 32($sp) +lw $t1, 4($sp) +sw $t1, 20($t0) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 20($sp) +lw $t0, 32($sp) +lw $t1, 20($sp) +sw $t1, 16($t0) +lw $a1, 20($sp) +lw $ra, 0($sp) +addi $sp, $sp, 40 +jr $ra +Graph.print_E: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 20($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +Graph.print_V: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +Vertice_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $t0, 20($sp) +la $t1, void +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Vertice.outgoing: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 20($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Vertice.number: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Vertice.init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +Vertice.add_out: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 20($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 16($sp) +lw $t1, 4($sp) +sw $t1, 20($t0) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Vertice.print: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 20($sp) +lw $t1, 20($t0) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Edge_init: +addi $sp, $sp, -40 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 44($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +la $t0, 0 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t0, 44($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +la $t0, 0 +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 44($sp) +lw $t1, 32($sp) +sw $t1, 24($t0) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +Edge.init: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 20($sp) +sw $t1, 16($t0) +lw $t0, 16($sp) +lw $t1, 24($sp) +sw $t1, 20($t0) +lw $t0, 16($sp) +lw $t1, 28($sp) +sw $t1, 24($t0) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 32 +jr $ra +Edge.print: +addi $sp, $sp, -72 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 20($sp) +la $t0, s_4 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +lw $t0, 76($sp) +lw $t1, 20($t0) +sw $t1, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 44($sp) +la $t0, s_5 +sw $t0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 52($sp) +lw $t0, 76($sp) +lw $t1, 24($t0) +sw $t1, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 68($sp) +lw $a1, 68($sp) +lw $ra, 0($sp) +addi $sp, $sp, 80 +jr $ra +EList_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +EList.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +EList.head: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +EList.tail: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +EList.cons: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, ECons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, ECons_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal ECons_init +sw $a1, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 52($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +EList.append: +addi $sp, $sp, -24 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 8($sp) +b result_1 +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 12($sp) +lw $t1, 12($sp) +sw $t1, 4($sp) +b label_2 +label_1: +lw $t1, 32($sp) +sw $t1, 4($sp) +label_2: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +EList.print: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_6 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +ECons_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal EList_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +ECons.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +ECons.head: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +ECons.tail: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 20($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +ECons.init: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($sp) +sw $t1, 16($t0) +lw $t0, 12($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +ECons.print: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 20($sp) +lw $t1, 20($t0) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +VList_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +VList.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +VList.head: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +VList.tail: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +VList.cons: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 11 +sw $t1, 0($t0) +la $t1, VCons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, VCons_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal VCons_init +sw $a1, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +VList.print: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_6 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +VCons_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal VList_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +VCons.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +VCons.head: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +VCons.tail: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 20($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +VCons.init: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($sp) +sw $t1, 16($t0) +lw $t0, 12($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +VCons.print: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 20($sp) +lw $t1, 20($t0) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Parse_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 20($sp) +la $t1, void +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, empty_str +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Parse.read_input: +addi $sp, $sp, -152 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Graph_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Graph_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Graph_init +sw $a1, 8($sp) +lw $t1, 4($sp) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 16($sp) +lw $t1, 16($sp) +sw $t1, 20($sp) +label_3: +lw $t0, 156($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +la $t0, empty_str +sw $t0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 72($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 44($sp) +lw $t1, 44($sp) +xor $a0, $t1, 1 +sw $a0, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 80($sp) +la $t0, s_6 +sw $t0, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 124($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t1, 92($sp) +xor $a0, $t1, 1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 128($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +b result_6 +b label_5 +label_4: +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 140($sp) +lw $t1, 140($sp) +sw $t1, 20($sp) +b label_3 +label_5: +la $t0, None +sw $t0, 24($sp) +lw $t1, 24($sp) +sw $t1, 148($sp) +lw $t1, 12($sp) +sw $t1, 152($sp) +lw $a1, 152($sp) +lw $ra, 0($sp) +addi $sp, $sp, 160 +jr $ra +Parse.parse_line: +addi $sp, $sp, -136 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Vertice_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Vertice_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Vertice_init +sw $a1, 12($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 4($sp) +lw $t1, 4($sp) +sw $t1, 20($sp) +label_6: +lw $t0, 140($sp) +lw $t1, 20($t0) +sw $t1, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +la $t0, 0 +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 72($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +seq $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t1, 36($sp) +xor $a0, $t1, 1 +sw $a0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 80($sp) +b result_6 +b label_8 +label_7: +lw $t0, 140($sp) +lw $t1, 20($t0) +sw $t1, 88($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 84($sp) +lw $t1, 84($sp) +sw $t1, 92($sp) +lw $t0, 140($sp) +lw $t1, 20($t0) +sw $t1, 100($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 96($sp) +lw $t1, 96($sp) +sw $t1, 104($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Edge_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Edge_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Edge_init +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 124($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 112($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 108($sp) +lw $t1, 108($sp) +sw $t1, 128($sp) +lw $t1, 128($sp) +sw $t1, 132($sp) +b label_6 +label_8: +la $t0, None +sw $t0, 24($sp) +lw $t1, 20($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) +lw $ra, 0($sp) +addi $sp, $sp, 148 +jr $ra +Parse.c2i: +addi $sp, $sp, -496 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_7 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +la $t0, s_8 +sw $t0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +b result_10 +la $t0, s_9 +sw $t0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +b result_19 +la $t0, s_10 +sw $t0, 132($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 144($sp) +b result_28 +la $t0, s_11 +sw $t0, 168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 180($sp) +b result_37 +la $t0, s_12 +sw $t0, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 212($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +b result_46 +la $t0, s_13 +sw $t0, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 252($sp) +b result_55 +la $t0, s_14 +sw $t0, 276($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 280($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 284($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 288($sp) +b result_64 +la $t0, s_15 +sw $t0, 312($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 320($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 296($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 324($sp) +b result_73 +la $t0, s_16 +sw $t0, 348($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 356($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 360($sp) +b result_82 +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 364($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 368($sp) +la $t0, 0 +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 376($sp) +lw $t1, 368($sp) +sw $t1, 328($sp) +b label_19 +label_18: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 380($sp) +la $t0, 9 +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 388($sp) +lw $t1, 380($sp) +sw $t1, 328($sp) +label_19: +lw $t1, 328($sp) +sw $t1, 292($sp) +b label_20 +label_17: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 392($sp) +la $t0, 8 +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 400($sp) +lw $t1, 392($sp) +sw $t1, 292($sp) +label_20: +lw $t1, 292($sp) +sw $t1, 256($sp) +b label_21 +label_16: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 404($sp) +la $t0, 7 +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 412($sp) +lw $t1, 404($sp) +sw $t1, 256($sp) +label_21: +lw $t1, 256($sp) +sw $t1, 220($sp) +b label_22 +label_15: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 416($sp) +la $t0, 6 +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 424($sp) +lw $t1, 416($sp) +sw $t1, 220($sp) +label_22: +lw $t1, 220($sp) +sw $t1, 184($sp) +b label_23 +label_14: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 428($sp) +la $t0, 5 +sw $t0, 432($sp) +move $t0, $sp +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 436($sp) +lw $t1, 428($sp) +sw $t1, 184($sp) +label_23: +lw $t1, 184($sp) +sw $t1, 148($sp) +b label_24 +label_13: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 440($sp) +la $t0, 4 +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 448($sp) +lw $t1, 440($sp) +sw $t1, 148($sp) +label_24: +lw $t1, 148($sp) +sw $t1, 112($sp) +b label_25 +label_12: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 452($sp) +la $t0, 3 +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 460($sp) +lw $t1, 452($sp) +sw $t1, 112($sp) +label_25: +lw $t1, 112($sp) +sw $t1, 76($sp) +b label_26 +label_11: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 464($sp) +la $t0, 2 +sw $t0, 468($sp) +move $t0, $sp +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 472($sp) +lw $t1, 464($sp) +sw $t1, 76($sp) +label_26: +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_27 +label_10: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +la $t0, 1 +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 484($sp) +lw $t1, 476($sp) +sw $t1, 40($sp) +label_27: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_28 +label_9: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 488($sp) +la $t0, 0 +sw $t0, 492($sp) +move $t0, $sp +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 496($sp) +lw $t1, 488($sp) +sw $t1, 4($sp) +label_28: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 508 +jr $ra +Parse.a2i: +addi $sp, $sp, -312 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +la $t0, 1 +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +la $t0, 0 +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 64($sp) +la $t0, s_17 +sw $t0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 100($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 104($sp) +b result_11 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +la $t0, 1 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +la $t0, 0 +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 152($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 128($sp) +la $t0, s_18 +sw $t0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 164($sp) +lw $t0, 128($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 124($sp) +lw $a0, 120($sp) +lw $t1, 124($sp) +seq $a0, $a0, $t1 +sw $a0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 168($sp) +b result_27 +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 172($sp) +lw $t1, 172($sp) +sw $t1, 108($sp) +b label_32 +label_31: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +la $t0, 1 +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 212($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 192($sp) +lw $t0, 204($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $a0, 192($sp) +lw $t1, 196($sp) +sub $a0, $a0, $t1 +sw $a0, 188($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 184($sp) +move $t0, $sp +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 216($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +la $t0, 1 +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 228($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 180($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 176($sp) +lw $t1, 176($sp) +sw $t1, 108($sp) +label_32: +lw $t1, 108($sp) +sw $t1, 44($sp) +b label_33 +label_30: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 268($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 272($sp) +la $t0, 1 +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 280($sp) +lw $t0, 268($sp) +lw $t1, 16($t0) +sw $t1, 260($sp) +lw $t0, 272($sp) +lw $t1, 16($t0) +sw $t1, 264($sp) +lw $a0, 260($sp) +lw $t1, 264($sp) +sub $a0, $a0, $t1 +sw $a0, 256($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 288($sp) +la $t0, 1 +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 296($sp) +move $t0, $sp +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 244($sp) +lw $t0, 244($sp) +lw $t1, 16($t0) +sw $t1, 240($sp) +lw $t1, 240($sp) +neg $a0, $t1 +sw $a0, 236($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 232($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 300($sp) +lw $t1, 232($sp) +sw $t1, 44($sp) +label_33: +lw $t1, 44($sp) +sw $t1, 4($sp) +b label_34 +label_29: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 304($sp) +la $t0, 0 +sw $t0, 308($sp) +move $t0, $sp +lw $t1, 308($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 312($sp) +lw $t1, 304($sp) +sw $t1, 4($sp) +label_34: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 324 +jr $ra +Parse.a2i_aux: +addi $sp, $sp, -536 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +lw $t1, 20($sp) +sw $t1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) +label_35: +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +slt $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 64($sp) +b result_11 +b label_37 +label_36: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +la $t0, 1 +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 80($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 84($sp) +la $t0, s_18 +sw $t0, 108($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 116($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 120($sp) +b result_22 +la $t0, s_4 +sw $t0, 144($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 152($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 132($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 156($sp) +b result_31 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 192($sp) +la $t0, 10 +sw $t0, 196($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 200($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 184($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 188($sp) +lw $a0, 184($sp) +lw $t1, 188($sp) +mul $a0, $a0, $t1 +sw $a0, 180($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 216($sp) +la $t0, 1 +sw $t0, 220($sp) +move $t0, $sp +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 224($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 212($sp) +move $t0, $sp +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 540($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 540($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 208($sp) +lw $t0, 176($sp) +lw $t1, 16($t0) +sw $t1, 168($sp) +lw $t0, 208($sp) +lw $t1, 16($t0) +sw $t1, 172($sp) +lw $a0, 168($sp) +lw $t1, 172($sp) +add $a0, $a0, $t1 +sw $a0, 164($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 228($sp) +lw $t1, 160($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +la $t0, 1 +sw $t0, 256($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 260($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 244($sp) +lw $t0, 252($sp) +lw $t1, 16($t0) +sw $t1, 248($sp) +lw $a0, 244($sp) +lw $t1, 248($sp) +add $a0, $a0, $t1 +sw $a0, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 236($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 264($sp) +lw $t1, 236($sp) +sw $t1, 40($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 284($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 288($sp) +lw $a0, 284($sp) +lw $t1, 288($sp) +seq $a0, $a0, $t1 +sw $a0, 280($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 292($sp) +b result_68 +la $t0, empty_str +sw $t0, 296($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 300($sp) +move $t0, $sp +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 304($sp) +lw $t1, 300($sp) +sw $t1, 272($sp) +b label_41 +label_40: +la $t0, empty_str +sw $t0, 308($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 312($sp) +move $t0, $sp +lw $t1, 308($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 316($sp) +lw $t0, 540($sp) +lw $t1, 312($sp) +sw $t1, 20($t0) +lw $t1, 312($sp) +sw $t1, 272($sp) +label_41: +lw $t1, 272($sp) +sw $t1, 124($sp) +b label_42 +label_39: +move $t0, $sp +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 360($sp) +lw $t0, 360($sp) +lw $t1, 16($t0) +sw $t1, 352($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 356($sp) +lw $a0, 352($sp) +lw $t1, 356($sp) +sub $a0, $a0, $t1 +sw $a0, 348($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 344($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 344($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 364($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 368($sp) +la $t0, 1 +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 376($sp) +lw $t0, 344($sp) +lw $t1, 16($t0) +sw $t1, 336($sp) +lw $t0, 368($sp) +lw $t1, 16($t0) +sw $t1, 340($sp) +lw $a0, 336($sp) +lw $t1, 340($sp) +sub $a0, $a0, $t1 +sw $a0, 332($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 328($sp) +move $t0, $sp +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 328($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 380($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 400($sp) +la $t0, 1 +sw $t0, 404($sp) +move $t0, $sp +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 400($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 408($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 392($sp) +lw $t0, 400($sp) +lw $t1, 16($t0) +sw $t1, 396($sp) +lw $a0, 392($sp) +lw $t1, 396($sp) +add $a0, $a0, $t1 +sw $a0, 388($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 388($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 412($sp) +move $t0, $sp +lw $t1, 328($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 324($sp) +lw $t0, 540($sp) +lw $t1, 324($sp) +sw $t1, 20($t0) +lw $t1, 24($sp) +sw $t1, 40($sp) +lw $t1, 24($sp) +sw $t1, 124($sp) +label_42: +lw $t1, 124($sp) +sw $t1, 88($sp) +b label_43 +label_38: +move $t0, $sp +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 460($sp) +lw $t0, 460($sp) +lw $t1, 16($t0) +sw $t1, 452($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 456($sp) +lw $a0, 452($sp) +lw $t1, 456($sp) +sub $a0, $a0, $t1 +sw $a0, 448($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 448($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 464($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 468($sp) +la $t0, 1 +sw $t0, 472($sp) +move $t0, $sp +lw $t1, 472($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 476($sp) +lw $t0, 444($sp) +lw $t1, 16($t0) +sw $t1, 436($sp) +lw $t0, 468($sp) +lw $t1, 16($t0) +sw $t1, 440($sp) +lw $a0, 436($sp) +lw $t1, 440($sp) +sub $a0, $a0, $t1 +sw $a0, 432($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 428($sp) +move $t0, $sp +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 480($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 500($sp) +la $t0, 1 +sw $t0, 504($sp) +move $t0, $sp +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 508($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +lw $t0, 500($sp) +lw $t1, 16($t0) +sw $t1, 496($sp) +lw $a0, 492($sp) +lw $t1, 496($sp) +add $a0, $a0, $t1 +sw $a0, 488($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 484($sp) +move $t0, $sp +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 484($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 512($sp) +move $t0, $sp +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 484($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 424($sp) +lw $t0, 540($sp) +lw $t1, 424($sp) +sw $t1, 20($t0) +lw $t1, 24($sp) +sw $t1, 40($sp) +lw $t1, 24($sp) +sw $t1, 88($sp) +label_43: +lw $t1, 88($sp) +sw $t1, 524($sp) +b label_35 +label_37: +la $t0, None +sw $t0, 44($sp) +lw $t1, 44($sp) +sw $t1, 528($sp) +lw $t1, 528($sp) +sw $t1, 532($sp) +lw $t1, 16($sp) +sw $t1, 536($sp) +lw $a1, 536($sp) +lw $ra, 0($sp) +addi $sp, $sp, 548 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Parse_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 24($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 20($sp) +lw $t1, 24($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 20($sp) +lw $t1, 24($t0) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +BoolOp_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +BoolOp.and: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +b b1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 16($sp) +lw $t1, 8($sp) +sw $t1, 4($sp) +b label_45 +label_44: +lw $t1, 28($sp) +sw $t1, 4($sp) +label_45: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 32 +jr $ra +BoolOp.or: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +b b1 +lw $t1, 28($sp) +sw $t1, 4($sp) +b label_47 +label_46: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 16($sp) +lw $t1, 8($sp) +sw $t1, 4($sp) +label_47: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 32 +jr $ra \ No newline at end of file diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips new file mode 100644 index 00000000..a861cdda --- /dev/null +++ b/tests/codegen/hairyscary.mips @@ -0,0 +1,1097 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Foo_name: .asciiz "Foo" +Foo_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Bazz.printh +.word Foo.doh +Bar_name: .asciiz "Bar" +Bar_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Bazz.printh +.word Foo.doh +Razz_name: .asciiz "Razz" +Razz_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Bazz.printh +.word Foo.doh +Bazz_name: .asciiz "Bazz" +Bazz_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Bazz.printh +.word Bazz.doh +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "do nothing" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Foo_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bazz_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 20($sp) +la $t1, void +sw $t1, 28($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 32($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Foo.doh: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t1, 4($sp) +sw $t1, 8($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +la $t0, 2 +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +add $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +lw $t0, 60($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +lw $t0, 60($sp) +lw $t1, 24($t0) +sw $t1, 52($sp) +lw $t1, 52($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +Bar_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Razz_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 44($t0) +lw $t0, 20($sp) +la $t1, void +sw $t1, 48($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Razz_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Foo_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 20($sp) +la $t1, void +sw $t1, 36($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 40($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Bazz_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $t0, 20($sp) +la $t1, void +sw $t1, 20($t0) +lw $t0, 20($sp) +la $t1, void +sw $t1, 24($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Bazz.printh: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +la $t0, 0 +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 20($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 28 +jr $ra +Bazz.doh: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t1, 4($sp) +sw $t1, 8($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +la $t0, 1 +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +add $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +lw $t0, 60($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +lw $t0, 60($sp) +lw $t1, 24($t0) +sw $t1, 52($sp) +lw $t1, 52($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $t0, 8($sp) +la $t1, void +sw $t1, 20($t0) +lw $t0, 8($sp) +la $t1, void +sw $t1, 24($t0) +lw $t0, 8($sp) +la $t1, void +sw $t1, 28($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra \ No newline at end of file diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index 8365ee9d..0117d667 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -100,7 +100,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 5 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips new file mode 100644 index 00000000..4b6ee1f3 --- /dev/null +++ b/tests/codegen/io.mips @@ -0,0 +1,1077 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A_name: .asciiz "A" +A_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.out_a +B_name: .asciiz "B" +B_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.out_a +.word B.out_b +C_name: .asciiz "C" +C_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word C.out_c +D_name: .asciiz "D" +D_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word C.out_c +.word D.out_d +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "A: Hello world\n" +s_4: .asciiz "B: Hello world\n" +s_5: .asciiz "C: Hello world\n" +s_6: .asciiz "D: Hello world\n" +s_7: .asciiz "Done.\n" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +A_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A.out_a: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +la $t0, s_3 +sw $t0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 28 +jr $ra +B_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +B.out_b: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +la $t0, s_4 +sw $t0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 28 +jr $ra +C_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +C.out_c: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_5 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +D_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +D.out_d: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_6 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -64 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 16($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 28($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 40($sp) +la $t0, s_7 +sw $t0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 52($sp) +lw $a1, 52($sp) +lw $ra, 0($sp) +addi $sp, $sp, 72 +jr $ra \ No newline at end of file diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips new file mode 100644 index 00000000..7b0556f3 --- /dev/null +++ b/tests/codegen/life.mips @@ -0,0 +1,10312 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Board_name: .asciiz "Board" +Board_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Board.size_of_board +.word Board.board_init +CellularAutomaton_name: .asciiz "CellularAutomaton" +CellularAutomaton_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Board.size_of_board +.word Board.board_init +.word CellularAutomaton.init +.word CellularAutomaton.print +.word CellularAutomaton.num_cells +.word CellularAutomaton.cell +.word CellularAutomaton.north +.word CellularAutomaton.south +.word CellularAutomaton.east +.word CellularAutomaton.west +.word CellularAutomaton.northwest +.word CellularAutomaton.northeast +.word CellularAutomaton.southeast +.word CellularAutomaton.southwest +.word CellularAutomaton.neighbors +.word CellularAutomaton.cell_at_next_evolution +.word CellularAutomaton.evolve +.word CellularAutomaton.option +.word CellularAutomaton.prompt +.word CellularAutomaton.prompt2 +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Board.size_of_board +.word Board.board_init +.word CellularAutomaton.init +.word CellularAutomaton.print +.word CellularAutomaton.num_cells +.word CellularAutomaton.cell +.word CellularAutomaton.north +.word CellularAutomaton.south +.word CellularAutomaton.east +.word CellularAutomaton.west +.word CellularAutomaton.northwest +.word CellularAutomaton.northeast +.word CellularAutomaton.southeast +.word CellularAutomaton.southwest +.word CellularAutomaton.neighbors +.word CellularAutomaton.cell_at_next_evolution +.word CellularAutomaton.evolve +.word CellularAutomaton.option +.word CellularAutomaton.prompt +.word CellularAutomaton.prompt2 +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "\n" +s_4: .asciiz " " +s_5: .asciiz "X" +s_6: .asciiz "-" +s_7: .asciiz "\nPlease chose a number:\n" +s_8: .asciiz "\t1: A cross\n" +s_9: .asciiz "\t2: A slash from the upper left to lower right\n" +s_10: .asciiz "\t3: A slash from the upper right to lower left\n" +s_11: .asciiz "\t4: An X\n" +s_12: .asciiz "\t5: A greater than sign \n" +s_13: .asciiz "\t6: A less than sign\n" +s_14: .asciiz "\t7: Two greater than signs\n" +s_15: .asciiz "\t8: Two less than signs\n" +s_16: .asciiz "\t9: A 'V'\n" +s_17: .asciiz "\t10: An inverse 'V'\n" +s_18: .asciiz "\t11: Numbers 9 and 10 combined\n" +s_19: .asciiz "\t12: A full grid\n" +s_20: .asciiz "\t13: A 'T'\n" +s_21: .asciiz "\t14: A plus '+'\n" +s_22: .asciiz "\t15: A 'W'\n" +s_23: .asciiz "\t16: An 'M'\n" +s_24: .asciiz "\t17: An 'E'\n" +s_25: .asciiz "\t18: A '3'\n" +s_26: .asciiz "\t19: An 'O'\n" +s_27: .asciiz "\t20: An '8'\n" +s_28: .asciiz "\t21: An 'S'\n" +s_29: .asciiz "Your choice => " +s_30: .asciiz " " +s_31: .asciiz " XXXX X XX X XXXX " +s_32: .asciiz " XX X XX X XX X XX X XX " +s_33: .asciiz " XX X XX X XX " +s_34: .asciiz "XXX X X X X XXXX " +s_35: .asciiz "XXXXX X XXXXX X XXXX" +s_36: .asciiz " X X X X X X X" +s_37: .asciiz "X X X X X X X " +s_38: .asciiz " X X XXXXX X X " +s_39: .asciiz "XXXXX X X X X " +s_40: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" +s_41: .asciiz "X X X X X X X X" +s_42: .asciiz " X X X X X" +s_43: .asciiz "X X X X X " +s_44: .asciiz " X XX X X X " +s_45: .asciiz "X X X XX X " +s_46: .asciiz " X X X X X" +s_47: .asciiz "X X X X X " +s_48: .asciiz "X X X X X X X X X" +s_49: .asciiz "X X X X X" +s_50: .asciiz " X X X X X " +s_51: .asciiz " XX XXXX XXXX XX " +s_52: .asciiz "Would you like to continue with the next generation? \n" +s_53: .asciiz "Please use lowercase y or n for your answer [y]: " +s_54: .asciiz "n" +s_55: .asciiz "\n\n" +s_56: .asciiz "Would you like to choose a background pattern? \n" +s_57: .asciiz "Please use lowercase y or n for your answer [n]: " +s_58: .asciiz "y" +s_59: .asciiz "Welcome to the Game of Life.\n" +s_60: .asciiz "There are many initial states to choose from. \n" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Board_init: +addi $sp, $sp, -40 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 44($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +la $t0, 0 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t0, 44($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +la $t0, 0 +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 44($sp) +lw $t1, 32($sp) +sw $t1, 24($t0) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +Board.size_of_board: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +Board.board_init: +addi $sp, $sp, -480 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 484($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 484($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 4($sp) +lw $t1, 4($sp) +sw $t1, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +la $t0, 15 +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $a0, 24($sp) +lw $t1, 28($sp) +seq $a0, $a0, $t1 +sw $a0, 20($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 44($sp) +b result_3 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +la $t0, 16 +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $a0, 60($sp) +lw $t1, 64($sp) +seq $a0, $a0, $t1 +sw $a0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 80($sp) +b result_12 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +la $t0, 20 +sw $t0, 108($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) +seq $a0, $a0, $t1 +sw $a0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 116($sp) +b result_21 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 140($sp) +la $t0, 21 +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 148($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +lw $t0, 140($sp) +lw $t1, 16($t0) +sw $t1, 136($sp) +lw $a0, 132($sp) +lw $t1, 136($sp) +seq $a0, $a0, $t1 +sw $a0, 128($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 152($sp) +b result_30 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 176($sp) +la $t0, 25 +sw $t0, 180($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 184($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 168($sp) +lw $t0, 176($sp) +lw $t1, 16($t0) +sw $t1, 172($sp) +lw $a0, 168($sp) +lw $t1, 172($sp) +seq $a0, $a0, $t1 +sw $a0, 164($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 188($sp) +b result_39 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 212($sp) +la $t0, 28 +sw $t0, 216($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 220($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 204($sp) +lw $t0, 212($sp) +lw $t1, 16($t0) +sw $t1, 208($sp) +lw $a0, 204($sp) +lw $t1, 208($sp) +seq $a0, $a0, $t1 +sw $a0, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 196($sp) +move $t0, $sp +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 224($sp) +b result_48 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 228($sp) +la $t0, 5 +sw $t0, 232($sp) +move $t0, $sp +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 236($sp) +lw $t0, 484($sp) +lw $t1, 228($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 244($sp) +la $t0, 5 +sw $t0, 248($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 252($sp) +lw $t0, 484($sp) +lw $t1, 244($sp) +sw $t1, 20($t0) +lw $t0, 484($sp) +lw $t1, 8($sp) +sw $t1, 24($t0) +lw $t1, 8($sp) +sw $t1, 192($sp) +b label_7 +label_6: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 264($sp) +la $t0, 7 +sw $t0, 268($sp) +move $t0, $sp +lw $t1, 268($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 272($sp) +lw $t0, 484($sp) +lw $t1, 264($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 280($sp) +la $t0, 4 +sw $t0, 284($sp) +move $t0, $sp +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 288($sp) +lw $t0, 484($sp) +lw $t1, 280($sp) +sw $t1, 20($t0) +lw $t0, 484($sp) +lw $t1, 8($sp) +sw $t1, 24($t0) +lw $t1, 8($sp) +sw $t1, 192($sp) +label_7: +lw $t1, 192($sp) +sw $t1, 156($sp) +b label_8 +label_5: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 300($sp) +la $t0, 5 +sw $t0, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 308($sp) +lw $t0, 484($sp) +lw $t1, 300($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +la $t0, 5 +sw $t0, 320($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 324($sp) +lw $t0, 484($sp) +lw $t1, 316($sp) +sw $t1, 20($t0) +lw $t0, 484($sp) +lw $t1, 8($sp) +sw $t1, 24($t0) +lw $t1, 8($sp) +sw $t1, 156($sp) +label_8: +lw $t1, 156($sp) +sw $t1, 120($sp) +b label_9 +label_4: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 336($sp) +la $t0, 3 +sw $t0, 340($sp) +move $t0, $sp +lw $t1, 340($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 344($sp) +lw $t0, 484($sp) +lw $t1, 336($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 352($sp) +la $t0, 7 +sw $t0, 356($sp) +move $t0, $sp +lw $t1, 356($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 360($sp) +lw $t0, 484($sp) +lw $t1, 352($sp) +sw $t1, 20($t0) +lw $t0, 484($sp) +lw $t1, 8($sp) +sw $t1, 24($t0) +lw $t1, 8($sp) +sw $t1, 120($sp) +label_9: +lw $t1, 120($sp) +sw $t1, 84($sp) +b label_10 +label_3: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 372($sp) +la $t0, 4 +sw $t0, 376($sp) +move $t0, $sp +lw $t1, 376($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 380($sp) +lw $t0, 484($sp) +lw $t1, 372($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 388($sp) +la $t0, 5 +sw $t0, 392($sp) +move $t0, $sp +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 388($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 396($sp) +lw $t0, 484($sp) +lw $t1, 388($sp) +sw $t1, 20($t0) +lw $t0, 484($sp) +lw $t1, 8($sp) +sw $t1, 24($t0) +lw $t1, 8($sp) +sw $t1, 84($sp) +label_10: +lw $t1, 84($sp) +sw $t1, 48($sp) +b label_11 +label_2: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 408($sp) +la $t0, 4 +sw $t0, 412($sp) +move $t0, $sp +lw $t1, 412($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 416($sp) +lw $t0, 484($sp) +lw $t1, 408($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 424($sp) +la $t0, 4 +sw $t0, 428($sp) +move $t0, $sp +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 432($sp) +lw $t0, 484($sp) +lw $t1, 424($sp) +sw $t1, 20($t0) +lw $t0, 484($sp) +lw $t1, 8($sp) +sw $t1, 24($t0) +lw $t1, 8($sp) +sw $t1, 48($sp) +label_11: +lw $t1, 48($sp) +sw $t1, 12($sp) +b label_12 +label_1: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 444($sp) +la $t0, 3 +sw $t0, 448($sp) +move $t0, $sp +lw $t1, 448($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 452($sp) +lw $t0, 484($sp) +lw $t1, 444($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 460($sp) +la $t0, 5 +sw $t0, 464($sp) +move $t0, $sp +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 460($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 468($sp) +lw $t0, 484($sp) +lw $t1, 460($sp) +sw $t1, 20($t0) +lw $t0, 484($sp) +lw $t1, 8($sp) +sw $t1, 24($t0) +lw $t1, 8($sp) +sw $t1, 12($sp) +label_12: +lw $t1, 484($sp) +sw $t1, 480($sp) +lw $a1, 480($sp) +lw $ra, 0($sp) +addi $sp, $sp, 492 +jr $ra +CellularAutomaton_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Board_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, empty_str +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 28($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +CellularAutomaton.init: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($sp) +sw $t1, 28($t0) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 8($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +CellularAutomaton.print: +addi $sp, $sp, -148 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 152($sp) +lw $t1, 24($t0) +sw $t1, 20($sp) +lw $t1, 20($sp) +sw $t1, 24($sp) +la $t0, s_3 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +label_13: +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +slt $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 64($sp) +b result_11 +b label_15 +label_14: +lw $t0, 152($sp) +lw $t1, 28($t0) +sw $t1, 76($sp) +lw $t0, 152($sp) +lw $t1, 20($t0) +sw $t1, 80($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 68($sp) +la $t0, s_3 +sw $t0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 84($sp) +lw $t0, 152($sp) +lw $t1, 20($t0) +sw $t1, 116($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $a0, 108($sp) +lw $t1, 112($sp) +add $a0, $a0, $t1 +sw $a0, 104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 120($sp) +lw $t1, 100($sp) +sw $t1, 16($sp) +b label_13 +label_15: +la $t0, None +sw $t0, 44($sp) +la $t0, s_3 +sw $t0, 132($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 128($sp) +lw $t1, 152($sp) +sw $t1, 144($sp) +lw $t1, 144($sp) +sw $t1, 148($sp) +lw $a1, 148($sp) +lw $ra, 0($sp) +addi $sp, $sp, 156 +jr $ra +CellularAutomaton.num_cells: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 28($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +CellularAutomaton.cell: +addi $sp, $sp, -92 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 96($sp) +lw $t1, 24($t0) +sw $t1, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +la $t0, 1 +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 52($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $a0, 32($sp) +lw $t1, 36($sp) +sub $a0, $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 60($sp) +b result_1 +lw $t0, 96($sp) +lw $t1, 28($t0) +sw $t1, 68($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +la $t0, 1 +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 80($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 4($sp) +b label_17 +label_16: +la $t0, s_4 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +lw $t1, 88($sp) +sw $t1, 4($sp) +label_17: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 104 +jr $ra +CellularAutomaton.north: +addi $sp, $sp, -100 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 104($sp) +lw $t1, 20($t0) +sw $t1, 40($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $a0, 32($sp) +lw $t1, 36($sp) +sub $a0, $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +la $t0, 0 +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 60($sp) +b result_1 +lw $t0, 104($sp) +lw $t1, 20($t0) +sw $t1, 84($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +sub $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 4($sp) +b label_19 +label_18: +la $t0, s_4 +sw $t0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 100($sp) +lw $t1, 96($sp) +sw $t1, 4($sp) +label_19: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 112 +jr $ra +CellularAutomaton.south: +addi $sp, $sp, -92 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 96($sp) +lw $t1, 24($t0) +sw $t1, 24($sp) +lw $t0, 96($sp) +lw $t1, 20($t0) +sw $t1, 44($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 40($sp) +lw $a0, 36($sp) +lw $t1, 40($sp) +add $a0, $a0, $t1 +sw $a0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 48($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 52($sp) +b result_1 +lw $t0, 96($sp) +lw $t1, 20($t0) +sw $t1, 76($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +add $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 80($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 56($sp) +lw $t1, 56($sp) +sw $t1, 4($sp) +b label_21 +label_20: +la $t0, s_4 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +lw $t1, 88($sp) +sw $t1, 4($sp) +label_21: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 104 +jr $ra +CellularAutomaton.east: +addi $sp, $sp, -184 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +la $t0, 1 +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 80($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $a0, 64($sp) +lw $t1, 68($sp) +add $a0, $a0, $t1 +sw $a0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 84($sp) +lw $t0, 188($sp) +lw $t1, 20($t0) +sw $t1, 88($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 88($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 92($sp) +lw $t0, 188($sp) +lw $t1, 20($t0) +sw $t1, 96($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $a0, 32($sp) +lw $t1, 36($sp) +mul $a0, $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +la $t0, 1 +sw $t0, 124($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 128($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +lw $a0, 112($sp) +lw $t1, 116($sp) +add $a0, $a0, $t1 +sw $a0, 108($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 136($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +la $t0, 1 +sw $t0, 164($sp) +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 168($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 152($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 156($sp) +lw $a0, 152($sp) +lw $t1, 156($sp) +add $a0, $a0, $t1 +sw $a0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 172($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 140($sp) +lw $t1, 140($sp) +sw $t1, 4($sp) +b label_23 +label_22: +la $t0, s_4 +sw $t0, 176($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 180($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 184($sp) +lw $t1, 180($sp) +sw $t1, 4($sp) +label_23: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 196 +jr $ra +CellularAutomaton.west: +addi $sp, $sp, -168 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +la $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 176($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +b result_1 +lw $t0, 172($sp) +lw $t1, 20($t0) +sw $t1, 92($sp) +lw $t0, 176($sp) +lw $t1, 16($t0) +sw $t1, 84($sp) +lw $t0, 92($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $a0, 84($sp) +lw $t1, 88($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 96($sp) +lw $t0, 172($sp) +lw $t1, 20($t0) +sw $t1, 100($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +mul $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 104($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 176($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +seq $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +b result_10 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +la $t0, 1 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +lw $t0, 176($sp) +lw $t1, 16($t0) +sw $t1, 124($sp) +lw $t0, 132($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $a0, 124($sp) +lw $t1, 128($sp) +sub $a0, $a0, $t1 +sw $a0, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 112($sp) +lw $t1, 112($sp) +sw $t1, 40($sp) +b label_26 +label_25: +la $t0, s_4 +sw $t0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 156($sp) +lw $t1, 152($sp) +sw $t1, 40($sp) +label_26: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_27 +label_24: +la $t0, s_4 +sw $t0, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 164($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 168($sp) +lw $t1, 164($sp) +sw $t1, 4($sp) +label_27: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 180 +jr $ra +CellularAutomaton.northwest: +addi $sp, $sp, -192 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 196($sp) +lw $t1, 20($t0) +sw $t1, 40($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $a0, 32($sp) +lw $t1, 36($sp) +sub $a0, $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +la $t0, 0 +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 60($sp) +b result_1 +lw $t0, 196($sp) +lw $t1, 20($t0) +sw $t1, 116($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $a0, 108($sp) +lw $t1, 112($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 120($sp) +lw $t0, 196($sp) +lw $t1, 20($t0) +sw $t1, 124($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +mul $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 128($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +seq $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 132($sp) +b result_16 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +la $t0, 1 +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 164($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 148($sp) +lw $t0, 156($sp) +lw $t1, 16($t0) +sw $t1, 152($sp) +lw $a0, 148($sp) +lw $t1, 152($sp) +sub $a0, $a0, $t1 +sw $a0, 144($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 168($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 52($t2) +jal $t3 +sw $a1, 136($sp) +lw $t1, 136($sp) +sw $t1, 64($sp) +b label_30 +label_29: +la $t0, s_4 +sw $t0, 172($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 180($sp) +lw $t1, 176($sp) +sw $t1, 64($sp) +label_30: +lw $t1, 64($sp) +sw $t1, 4($sp) +b label_31 +label_28: +la $t0, s_4 +sw $t0, 184($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 192($sp) +lw $t1, 188($sp) +sw $t1, 4($sp) +label_31: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 204 +jr $ra +CellularAutomaton.northeast: +addi $sp, $sp, -256 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 260($sp) +lw $t1, 20($t0) +sw $t1, 40($sp) +lw $t0, 264($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $a0, 32($sp) +lw $t1, 36($sp) +sub $a0, $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +la $t0, 0 +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 60($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +la $t0, 1 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +lw $t0, 264($sp) +lw $t1, 16($t0) +sw $t1, 124($sp) +lw $t0, 132($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $a0, 124($sp) +lw $t1, 128($sp) +add $a0, $a0, $t1 +sw $a0, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +lw $t0, 260($sp) +lw $t1, 20($t0) +sw $t1, 148($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $a0, 108($sp) +lw $t1, 112($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 152($sp) +lw $t0, 260($sp) +lw $t1, 20($t0) +sw $t1, 156($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 156($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +mul $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 180($sp) +la $t0, 1 +sw $t0, 184($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 188($sp) +lw $t0, 264($sp) +lw $t1, 16($t0) +sw $t1, 172($sp) +lw $t0, 180($sp) +lw $t1, 16($t0) +sw $t1, 176($sp) +lw $a0, 172($sp) +lw $t1, 176($sp) +add $a0, $a0, $t1 +sw $a0, 168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 164($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 192($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +seq $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 196($sp) +b result_16 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +la $t0, 1 +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 228($sp) +lw $t0, 264($sp) +lw $t1, 16($t0) +sw $t1, 212($sp) +lw $t0, 220($sp) +lw $t1, 16($t0) +sw $t1, 216($sp) +lw $a0, 212($sp) +lw $t1, 216($sp) +add $a0, $a0, $t1 +sw $a0, 208($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 232($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 52($t2) +jal $t3 +sw $a1, 200($sp) +lw $t1, 200($sp) +sw $t1, 64($sp) +b label_34 +label_33: +la $t0, s_4 +sw $t0, 236($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 240($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 244($sp) +lw $t1, 240($sp) +sw $t1, 64($sp) +label_34: +lw $t1, 64($sp) +sw $t1, 4($sp) +b label_35 +label_32: +la $t0, s_4 +sw $t0, 248($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 256($sp) +lw $t1, 252($sp) +sw $t1, 4($sp) +label_35: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 268 +jr $ra +CellularAutomaton.southeast: +addi $sp, $sp, -248 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 252($sp) +lw $t1, 24($t0) +sw $t1, 24($sp) +lw $t0, 252($sp) +lw $t1, 20($t0) +sw $t1, 44($sp) +lw $t0, 256($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 40($sp) +lw $a0, 36($sp) +lw $t1, 40($sp) +add $a0, $a0, $t1 +sw $a0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 48($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 52($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +la $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 256($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $a0, 116($sp) +lw $t1, 120($sp) +add $a0, $a0, $t1 +sw $a0, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 108($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t0, 252($sp) +lw $t1, 20($t0) +sw $t1, 140($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $t0, 140($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +lw $a0, 100($sp) +lw $t1, 104($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +lw $t0, 252($sp) +lw $t1, 20($t0) +sw $t1, 148($sp) +lw $t0, 92($sp) +lw $t1, 16($t0) +sw $t1, 84($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $a0, 84($sp) +lw $t1, 88($sp) +mul $a0, $a0, $t1 +sw $a0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 152($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +la $t0, 1 +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 180($sp) +lw $t0, 256($sp) +lw $t1, 16($t0) +sw $t1, 164($sp) +lw $t0, 172($sp) +lw $t1, 16($t0) +sw $t1, 168($sp) +lw $a0, 164($sp) +lw $t1, 168($sp) +add $a0, $a0, $t1 +sw $a0, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 184($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 156($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +seq $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 188($sp) +b result_14 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 212($sp) +la $t0, 1 +sw $t0, 216($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 220($sp) +lw $t0, 256($sp) +lw $t1, 16($t0) +sw $t1, 204($sp) +lw $t0, 212($sp) +lw $t1, 16($t0) +sw $t1, 208($sp) +lw $a0, 204($sp) +lw $t1, 208($sp) +add $a0, $a0, $t1 +sw $a0, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 196($sp) +move $t0, $sp +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 224($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 56($t2) +jal $t3 +sw $a1, 192($sp) +lw $t1, 192($sp) +sw $t1, 56($sp) +b label_38 +label_37: +la $t0, s_4 +sw $t0, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 232($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 236($sp) +lw $t1, 232($sp) +sw $t1, 56($sp) +label_38: +lw $t1, 56($sp) +sw $t1, 4($sp) +b label_39 +label_36: +la $t0, s_4 +sw $t0, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 248($sp) +lw $t1, 244($sp) +sw $t1, 4($sp) +label_39: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 260 +jr $ra +CellularAutomaton.southwest: +addi $sp, $sp, -184 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 188($sp) +lw $t1, 24($t0) +sw $t1, 24($sp) +lw $t0, 188($sp) +lw $t1, 20($t0) +sw $t1, 44($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 40($sp) +lw $a0, 36($sp) +lw $t1, 40($sp) +add $a0, $a0, $t1 +sw $a0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 48($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 52($sp) +b result_1 +lw $t0, 188($sp) +lw $t1, 20($t0) +sw $t1, 108($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +lw $a0, 100($sp) +lw $t1, 104($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +lw $t0, 188($sp) +lw $t1, 20($t0) +sw $t1, 116($sp) +lw $t0, 92($sp) +lw $t1, 16($t0) +sw $t1, 84($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $a0, 84($sp) +lw $t1, 88($sp) +mul $a0, $a0, $t1 +sw $a0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 120($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +seq $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 124($sp) +b result_14 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 148($sp) +la $t0, 1 +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 156($sp) +lw $t0, 192($sp) +lw $t1, 16($t0) +sw $t1, 140($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 144($sp) +lw $a0, 140($sp) +lw $t1, 144($sp) +sub $a0, $a0, $t1 +sw $a0, 136($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 160($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 56($t2) +jal $t3 +sw $a1, 128($sp) +lw $t1, 128($sp) +sw $t1, 56($sp) +b label_42 +label_41: +la $t0, s_4 +sw $t0, 164($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 168($sp) +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 172($sp) +lw $t1, 168($sp) +sw $t1, 56($sp) +label_42: +lw $t1, 56($sp) +sw $t1, 4($sp) +b label_43 +label_40: +la $t0, s_4 +sw $t0, 176($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 180($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 184($sp) +lw $t1, 180($sp) +sw $t1, 4($sp) +label_43: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 196 +jr $ra +CellularAutomaton.neighbors: +addi $sp, $sp, -652 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 660($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 52($t2) +jal $t3 +sw $a1, 136($sp) +la $t0, s_5 +sw $t0, 140($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 148($sp) +lw $t0, 136($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +lw $a0, 128($sp) +lw $t1, 132($sp) +seq $a0, $a0, $t1 +sw $a0, 124($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 152($sp) +b result_29 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +la $t0, 0 +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 164($sp) +lw $t1, 156($sp) +sw $t1, 116($sp) +b label_45 +label_44: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 168($sp) +la $t0, 1 +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 176($sp) +lw $t1, 168($sp) +sw $t1, 116($sp) +label_45: +move $t0, $sp +lw $t1, 660($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 56($t2) +jal $t3 +sw $a1, 200($sp) +la $t0, s_5 +sw $t0, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 212($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 192($sp) +lw $t0, 208($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $a0, 192($sp) +lw $t1, 196($sp) +seq $a0, $a0, $t1 +sw $a0, 188($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 184($sp) +move $t0, $sp +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +b result_45 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +la $t0, 0 +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 228($sp) +lw $t1, 220($sp) +sw $t1, 180($sp) +b label_47 +label_46: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 232($sp) +la $t0, 1 +sw $t0, 236($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 240($sp) +lw $t1, 232($sp) +sw $t1, 180($sp) +label_47: +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $t0, 180($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $a0, 108($sp) +lw $t1, 112($sp) +add $a0, $a0, $t1 +sw $a0, 104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 244($sp) +move $t0, $sp +lw $t1, 660($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 60($t2) +jal $t3 +sw $a1, 268($sp) +la $t0, s_5 +sw $t0, 272($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 280($sp) +lw $t0, 268($sp) +lw $t1, 16($t0) +sw $t1, 260($sp) +lw $t0, 276($sp) +lw $t1, 16($t0) +sw $t1, 264($sp) +lw $a0, 260($sp) +lw $t1, 264($sp) +seq $a0, $a0, $t1 +sw $a0, 256($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 284($sp) +b result_62 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 288($sp) +la $t0, 0 +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 296($sp) +lw $t1, 288($sp) +sw $t1, 248($sp) +b label_49 +label_48: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 300($sp) +la $t0, 1 +sw $t0, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 308($sp) +lw $t1, 300($sp) +sw $t1, 248($sp) +label_49: +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 248($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +add $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 312($sp) +move $t0, $sp +lw $t1, 660($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 64($t2) +jal $t3 +sw $a1, 336($sp) +la $t0, s_5 +sw $t0, 340($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 344($sp) +move $t0, $sp +lw $t1, 340($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 344($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 348($sp) +lw $t0, 336($sp) +lw $t1, 16($t0) +sw $t1, 328($sp) +lw $t0, 344($sp) +lw $t1, 16($t0) +sw $t1, 332($sp) +lw $a0, 328($sp) +lw $t1, 332($sp) +seq $a0, $a0, $t1 +sw $a0, 324($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 320($sp) +move $t0, $sp +lw $t1, 324($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 352($sp) +b result_79 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 356($sp) +la $t0, 0 +sw $t0, 360($sp) +move $t0, $sp +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 356($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 364($sp) +lw $t1, 356($sp) +sw $t1, 316($sp) +b label_51 +label_50: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 368($sp) +la $t0, 1 +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 376($sp) +lw $t1, 368($sp) +sw $t1, 316($sp) +label_51: +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 316($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +add $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 380($sp) +move $t0, $sp +lw $t1, 660($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 72($t2) +jal $t3 +sw $a1, 404($sp) +la $t0, s_5 +sw $t0, 408($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 412($sp) +move $t0, $sp +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 412($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 416($sp) +lw $t0, 404($sp) +lw $t1, 16($t0) +sw $t1, 396($sp) +lw $t0, 412($sp) +lw $t1, 16($t0) +sw $t1, 400($sp) +lw $a0, 396($sp) +lw $t1, 400($sp) +seq $a0, $a0, $t1 +sw $a0, 392($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 388($sp) +move $t0, $sp +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 388($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 420($sp) +b result_96 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 424($sp) +la $t0, 0 +sw $t0, 428($sp) +move $t0, $sp +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 432($sp) +lw $t1, 424($sp) +sw $t1, 384($sp) +b label_53 +label_52: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 436($sp) +la $t0, 1 +sw $t0, 440($sp) +move $t0, $sp +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 436($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 444($sp) +lw $t1, 436($sp) +sw $t1, 384($sp) +label_53: +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $t0, 384($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $a0, 60($sp) +lw $t1, 64($sp) +add $a0, $a0, $t1 +sw $a0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 448($sp) +move $t0, $sp +lw $t1, 660($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 68($t2) +jal $t3 +sw $a1, 472($sp) +la $t0, s_5 +sw $t0, 476($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 484($sp) +lw $t0, 472($sp) +lw $t1, 16($t0) +sw $t1, 464($sp) +lw $t0, 480($sp) +lw $t1, 16($t0) +sw $t1, 468($sp) +lw $a0, 464($sp) +lw $t1, 468($sp) +seq $a0, $a0, $t1 +sw $a0, 460($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 460($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 488($sp) +b result_113 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 492($sp) +la $t0, 0 +sw $t0, 496($sp) +move $t0, $sp +lw $t1, 496($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 500($sp) +lw $t1, 492($sp) +sw $t1, 452($sp) +b label_55 +label_54: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 504($sp) +la $t0, 1 +sw $t0, 508($sp) +move $t0, $sp +lw $t1, 508($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 512($sp) +lw $t1, 504($sp) +sw $t1, 452($sp) +label_55: +lw $t0, 52($sp) +lw $t1, 16($t0) +sw $t1, 44($sp) +lw $t0, 452($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $a0, 44($sp) +lw $t1, 48($sp) +add $a0, $a0, $t1 +sw $a0, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 516($sp) +move $t0, $sp +lw $t1, 660($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 76($t2) +jal $t3 +sw $a1, 540($sp) +la $t0, s_5 +sw $t0, 544($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 548($sp) +move $t0, $sp +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 548($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 552($sp) +lw $t0, 540($sp) +lw $t1, 16($t0) +sw $t1, 532($sp) +lw $t0, 548($sp) +lw $t1, 16($t0) +sw $t1, 536($sp) +lw $a0, 532($sp) +lw $t1, 536($sp) +seq $a0, $a0, $t1 +sw $a0, 528($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 524($sp) +move $t0, $sp +lw $t1, 528($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 524($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 556($sp) +b result_130 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 560($sp) +la $t0, 0 +sw $t0, 564($sp) +move $t0, $sp +lw $t1, 564($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 560($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 568($sp) +lw $t1, 560($sp) +sw $t1, 520($sp) +b label_57 +label_56: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 572($sp) +la $t0, 1 +sw $t0, 576($sp) +move $t0, $sp +lw $t1, 576($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 572($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 580($sp) +lw $t1, 572($sp) +sw $t1, 520($sp) +label_57: +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t0, 520($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) +add $a0, $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 584($sp) +move $t0, $sp +lw $t1, 660($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 80($t2) +jal $t3 +sw $a1, 608($sp) +la $t0, s_5 +sw $t0, 612($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 616($sp) +move $t0, $sp +lw $t1, 612($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 616($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 620($sp) +lw $t0, 608($sp) +lw $t1, 16($t0) +sw $t1, 600($sp) +lw $t0, 616($sp) +lw $t1, 16($t0) +sw $t1, 604($sp) +lw $a0, 600($sp) +lw $t1, 604($sp) +seq $a0, $a0, $t1 +sw $a0, 596($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 592($sp) +move $t0, $sp +lw $t1, 596($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 592($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 624($sp) +b result_147 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 628($sp) +la $t0, 0 +sw $t0, 632($sp) +move $t0, $sp +lw $t1, 632($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 628($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 636($sp) +lw $t1, 628($sp) +sw $t1, 588($sp) +b label_59 +label_58: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 640($sp) +la $t0, 1 +sw $t0, 644($sp) +move $t0, $sp +lw $t1, 644($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 640($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 648($sp) +lw $t1, 640($sp) +sw $t1, 588($sp) +label_59: +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 588($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $a0, 12($sp) +lw $t1, 16($sp) +add $a0, $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 652($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 664 +jr $ra +CellularAutomaton.cell_at_next_evolution: +addi $sp, $sp, -168 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 84($t2) +jal $t3 +sw $a1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 3 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_1 +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 84($t2) +jal $t3 +sw $a1, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +la $t0, 2 +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 80($sp) +b result_11 +la $t0, s_6 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +lw $t1, 88($sp) +sw $t1, 44($sp) +b label_62 +label_61: +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 116($sp) +la $t0, s_5 +sw $t0, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 128($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $a0, 108($sp) +lw $t1, 112($sp) +seq $a0, $a0, $t1 +sw $a0, 104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 132($sp) +b result_24 +la $t0, s_6 +sw $t0, 136($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 144($sp) +lw $t1, 140($sp) +sw $t1, 96($sp) +b label_64 +label_63: +la $t0, s_5 +sw $t0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 156($sp) +lw $t1, 152($sp) +sw $t1, 96($sp) +label_64: +lw $t1, 96($sp) +sw $t1, 44($sp) +label_62: +lw $t1, 44($sp) +sw $t1, 4($sp) +b label_65 +label_60: +la $t0, s_5 +sw $t0, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 164($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 168($sp) +lw $t1, 164($sp) +sw $t1, 4($sp) +label_65: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 180 +jr $ra +CellularAutomaton.evolve: +addi $sp, $sp, -116 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 20($sp) +lw $t1, 20($sp) +sw $t1, 24($sp) +la $t1, void +sw $t1, 28($sp) +label_66: +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 44($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $a0, 44($sp) +lw $t1, 48($sp) +slt $a0, $a0, $t1 +sw $a0, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 52($sp) +b result_8 +b label_68 +label_67: +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 88($t2) +jal $t3 +sw $a1, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 56($sp) +lw $t1, 56($sp) +sw $t1, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +la $t0, 1 +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 92($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +add $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 96($sp) +lw $t1, 68($sp) +sw $t1, 16($sp) +b label_66 +label_68: +la $t0, None +sw $t0, 32($sp) +lw $t0, 120($sp) +lw $t1, 28($sp) +sw $t1, 28($t0) +lw $t1, 120($sp) +sw $t1, 108($sp) +lw $t1, 108($sp) +sw $t1, 112($sp) +lw $t1, 112($sp) +sw $t1, 116($sp) +lw $a1, 116($sp) +lw $ra, 0($sp) +addi $sp, $sp, 124 +jr $ra +CellularAutomaton.option: +addi $sp, $sp, -1420 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +la $t0, s_7 +sw $t0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 8($sp) +la $t0, s_8 +sw $t0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +la $t0, s_9 +sw $t0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 40($sp) +la $t0, s_10 +sw $t0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 56($sp) +la $t0, s_11 +sw $t0, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 72($sp) +la $t0, s_12 +sw $t0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 88($sp) +la $t0, s_13 +sw $t0, 108($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 116($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 104($sp) +la $t0, s_14 +sw $t0, 124($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 120($sp) +la $t0, s_15 +sw $t0, 140($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 148($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 136($sp) +la $t0, s_16 +sw $t0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 164($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 152($sp) +la $t0, s_17 +sw $t0, 172($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 180($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 168($sp) +la $t0, s_18 +sw $t0, 188($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 192($sp) +move $t0, $sp +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 196($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 184($sp) +la $t0, s_19 +sw $t0, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 212($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 200($sp) +la $t0, s_20 +sw $t0, 220($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 228($sp) +move $t0, $sp +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 216($sp) +la $t0, s_21 +sw $t0, 236($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 240($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 244($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 232($sp) +la $t0, s_22 +sw $t0, 252($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 256($sp) +move $t0, $sp +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 260($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 248($sp) +la $t0, s_23 +sw $t0, 268($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 272($sp) +move $t0, $sp +lw $t1, 268($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 276($sp) +move $t0, $sp +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 264($sp) +la $t0, s_24 +sw $t0, 284($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 288($sp) +move $t0, $sp +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 292($sp) +move $t0, $sp +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 280($sp) +la $t0, s_25 +sw $t0, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 304($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 308($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 296($sp) +la $t0, s_26 +sw $t0, 316($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 320($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 324($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 312($sp) +la $t0, s_27 +sw $t0, 332($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 336($sp) +move $t0, $sp +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 340($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 328($sp) +la $t0, s_28 +sw $t0, 348($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 356($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 344($sp) +la $t0, s_29 +sw $t0, 364($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 368($sp) +move $t0, $sp +lw $t1, 364($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 372($sp) +move $t0, $sp +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 360($sp) +move $t0, $sp +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 376($sp) +lw $t1, 376($sp) +sw $t1, 4($sp) +la $t0, s_3 +sw $t0, 388($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 392($sp) +move $t0, $sp +lw $t1, 388($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 396($sp) +move $t0, $sp +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 384($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 420($sp) +la $t0, 1 +sw $t0, 424($sp) +move $t0, $sp +lw $t1, 424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 428($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 412($sp) +lw $t0, 420($sp) +lw $t1, 16($t0) +sw $t1, 416($sp) +lw $a0, 412($sp) +lw $t1, 416($sp) +seq $a0, $a0, $t1 +sw $a0, 408($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 404($sp) +move $t0, $sp +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 432($sp) +b result_100 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 456($sp) +la $t0, 2 +sw $t0, 460($sp) +move $t0, $sp +lw $t1, 460($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 464($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 448($sp) +lw $t0, 456($sp) +lw $t1, 16($t0) +sw $t1, 452($sp) +lw $a0, 448($sp) +lw $t1, 452($sp) +seq $a0, $a0, $t1 +sw $a0, 444($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 440($sp) +move $t0, $sp +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 468($sp) +b result_109 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 492($sp) +la $t0, 3 +sw $t0, 496($sp) +move $t0, $sp +lw $t1, 496($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 500($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 484($sp) +lw $t0, 492($sp) +lw $t1, 16($t0) +sw $t1, 488($sp) +lw $a0, 484($sp) +lw $t1, 488($sp) +seq $a0, $a0, $t1 +sw $a0, 480($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 504($sp) +b result_118 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 528($sp) +la $t0, 4 +sw $t0, 532($sp) +move $t0, $sp +lw $t1, 532($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 528($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 536($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 520($sp) +lw $t0, 528($sp) +lw $t1, 16($t0) +sw $t1, 524($sp) +lw $a0, 520($sp) +lw $t1, 524($sp) +seq $a0, $a0, $t1 +sw $a0, 516($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 512($sp) +move $t0, $sp +lw $t1, 516($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 512($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 540($sp) +b result_127 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 564($sp) +la $t0, 5 +sw $t0, 568($sp) +move $t0, $sp +lw $t1, 568($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 564($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 572($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 556($sp) +lw $t0, 564($sp) +lw $t1, 16($t0) +sw $t1, 560($sp) +lw $a0, 556($sp) +lw $t1, 560($sp) +seq $a0, $a0, $t1 +sw $a0, 552($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 548($sp) +move $t0, $sp +lw $t1, 552($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 548($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 576($sp) +b result_136 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 600($sp) +la $t0, 6 +sw $t0, 604($sp) +move $t0, $sp +lw $t1, 604($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 600($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 608($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 592($sp) +lw $t0, 600($sp) +lw $t1, 16($t0) +sw $t1, 596($sp) +lw $a0, 592($sp) +lw $t1, 596($sp) +seq $a0, $a0, $t1 +sw $a0, 588($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 584($sp) +move $t0, $sp +lw $t1, 588($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 584($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 612($sp) +b result_145 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 636($sp) +la $t0, 7 +sw $t0, 640($sp) +move $t0, $sp +lw $t1, 640($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 636($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 644($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 628($sp) +lw $t0, 636($sp) +lw $t1, 16($t0) +sw $t1, 632($sp) +lw $a0, 628($sp) +lw $t1, 632($sp) +seq $a0, $a0, $t1 +sw $a0, 624($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 620($sp) +move $t0, $sp +lw $t1, 624($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 620($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 648($sp) +b result_154 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 672($sp) +la $t0, 8 +sw $t0, 676($sp) +move $t0, $sp +lw $t1, 676($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 672($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 680($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 664($sp) +lw $t0, 672($sp) +lw $t1, 16($t0) +sw $t1, 668($sp) +lw $a0, 664($sp) +lw $t1, 668($sp) +seq $a0, $a0, $t1 +sw $a0, 660($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 656($sp) +move $t0, $sp +lw $t1, 660($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 684($sp) +b result_163 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 708($sp) +la $t0, 9 +sw $t0, 712($sp) +move $t0, $sp +lw $t1, 712($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 708($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 716($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 700($sp) +lw $t0, 708($sp) +lw $t1, 16($t0) +sw $t1, 704($sp) +lw $a0, 700($sp) +lw $t1, 704($sp) +seq $a0, $a0, $t1 +sw $a0, 696($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 692($sp) +move $t0, $sp +lw $t1, 696($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 692($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 720($sp) +b result_172 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 744($sp) +la $t0, 10 +sw $t0, 748($sp) +move $t0, $sp +lw $t1, 748($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 744($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 752($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 736($sp) +lw $t0, 744($sp) +lw $t1, 16($t0) +sw $t1, 740($sp) +lw $a0, 736($sp) +lw $t1, 740($sp) +seq $a0, $a0, $t1 +sw $a0, 732($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 728($sp) +move $t0, $sp +lw $t1, 732($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 728($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 756($sp) +b result_181 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 780($sp) +la $t0, 11 +sw $t0, 784($sp) +move $t0, $sp +lw $t1, 784($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 780($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 788($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 772($sp) +lw $t0, 780($sp) +lw $t1, 16($t0) +sw $t1, 776($sp) +lw $a0, 772($sp) +lw $t1, 776($sp) +seq $a0, $a0, $t1 +sw $a0, 768($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 764($sp) +move $t0, $sp +lw $t1, 768($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 764($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 792($sp) +b result_190 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 816($sp) +la $t0, 12 +sw $t0, 820($sp) +move $t0, $sp +lw $t1, 820($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 816($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 824($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 808($sp) +lw $t0, 816($sp) +lw $t1, 16($t0) +sw $t1, 812($sp) +lw $a0, 808($sp) +lw $t1, 812($sp) +seq $a0, $a0, $t1 +sw $a0, 804($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 800($sp) +move $t0, $sp +lw $t1, 804($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 800($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 828($sp) +b result_199 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 852($sp) +la $t0, 13 +sw $t0, 856($sp) +move $t0, $sp +lw $t1, 856($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 852($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 860($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 844($sp) +lw $t0, 852($sp) +lw $t1, 16($t0) +sw $t1, 848($sp) +lw $a0, 844($sp) +lw $t1, 848($sp) +seq $a0, $a0, $t1 +sw $a0, 840($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 836($sp) +move $t0, $sp +lw $t1, 840($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 836($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 864($sp) +b result_208 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 888($sp) +la $t0, 14 +sw $t0, 892($sp) +move $t0, $sp +lw $t1, 892($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 888($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 896($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 880($sp) +lw $t0, 888($sp) +lw $t1, 16($t0) +sw $t1, 884($sp) +lw $a0, 880($sp) +lw $t1, 884($sp) +seq $a0, $a0, $t1 +sw $a0, 876($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 872($sp) +move $t0, $sp +lw $t1, 876($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 872($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 900($sp) +b result_217 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 924($sp) +la $t0, 15 +sw $t0, 928($sp) +move $t0, $sp +lw $t1, 928($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 924($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 932($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 916($sp) +lw $t0, 924($sp) +lw $t1, 16($t0) +sw $t1, 920($sp) +lw $a0, 916($sp) +lw $t1, 920($sp) +seq $a0, $a0, $t1 +sw $a0, 912($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 908($sp) +move $t0, $sp +lw $t1, 912($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 908($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 936($sp) +b result_226 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 960($sp) +la $t0, 16 +sw $t0, 964($sp) +move $t0, $sp +lw $t1, 964($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 960($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 968($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 952($sp) +lw $t0, 960($sp) +lw $t1, 16($t0) +sw $t1, 956($sp) +lw $a0, 952($sp) +lw $t1, 956($sp) +seq $a0, $a0, $t1 +sw $a0, 948($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 944($sp) +move $t0, $sp +lw $t1, 948($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 944($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 972($sp) +b result_235 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 996($sp) +la $t0, 17 +sw $t0, 1000($sp) +move $t0, $sp +lw $t1, 1000($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 996($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1004($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 988($sp) +lw $t0, 996($sp) +lw $t1, 16($t0) +sw $t1, 992($sp) +lw $a0, 988($sp) +lw $t1, 992($sp) +seq $a0, $a0, $t1 +sw $a0, 984($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 980($sp) +move $t0, $sp +lw $t1, 984($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 980($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1008($sp) +b result_244 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 1032($sp) +la $t0, 18 +sw $t0, 1036($sp) +move $t0, $sp +lw $t1, 1036($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1032($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1040($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 1024($sp) +lw $t0, 1032($sp) +lw $t1, 16($t0) +sw $t1, 1028($sp) +lw $a0, 1024($sp) +lw $t1, 1028($sp) +seq $a0, $a0, $t1 +sw $a0, 1020($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 1016($sp) +move $t0, $sp +lw $t1, 1020($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1016($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1044($sp) +b result_253 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 1068($sp) +la $t0, 19 +sw $t0, 1072($sp) +move $t0, $sp +lw $t1, 1072($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1068($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1076($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 1060($sp) +lw $t0, 1068($sp) +lw $t1, 16($t0) +sw $t1, 1064($sp) +lw $a0, 1060($sp) +lw $t1, 1064($sp) +seq $a0, $a0, $t1 +sw $a0, 1056($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 1052($sp) +move $t0, $sp +lw $t1, 1056($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1052($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1080($sp) +b result_262 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 1104($sp) +la $t0, 20 +sw $t0, 1108($sp) +move $t0, $sp +lw $t1, 1108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1112($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 1096($sp) +lw $t0, 1104($sp) +lw $t1, 16($t0) +sw $t1, 1100($sp) +lw $a0, 1096($sp) +lw $t1, 1100($sp) +seq $a0, $a0, $t1 +sw $a0, 1092($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 1088($sp) +move $t0, $sp +lw $t1, 1092($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1088($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1116($sp) +b result_271 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 1140($sp) +la $t0, 21 +sw $t0, 1144($sp) +move $t0, $sp +lw $t1, 1144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1148($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 1132($sp) +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 1136($sp) +lw $a0, 1132($sp) +lw $t1, 1136($sp) +seq $a0, $a0, $t1 +sw $a0, 1128($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 1124($sp) +move $t0, $sp +lw $t1, 1128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 1152($sp) +b result_280 +la $t0, s_30 +sw $t0, 1156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1160($sp) +move $t0, $sp +lw $t1, 1156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1164($sp) +lw $t1, 1160($sp) +sw $t1, 1120($sp) +b label_90 +label_89: +la $t0, s_31 +sw $t0, 1168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1172($sp) +move $t0, $sp +lw $t1, 1168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1176($sp) +lw $t1, 1172($sp) +sw $t1, 1120($sp) +label_90: +lw $t1, 1120($sp) +sw $t1, 1084($sp) +b label_91 +label_88: +la $t0, s_32 +sw $t0, 1180($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1184($sp) +move $t0, $sp +lw $t1, 1180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1188($sp) +lw $t1, 1184($sp) +sw $t1, 1084($sp) +label_91: +lw $t1, 1084($sp) +sw $t1, 1048($sp) +b label_92 +label_87: +la $t0, s_33 +sw $t0, 1192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1196($sp) +move $t0, $sp +lw $t1, 1192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1200($sp) +lw $t1, 1196($sp) +sw $t1, 1048($sp) +label_92: +lw $t1, 1048($sp) +sw $t1, 1012($sp) +b label_93 +label_86: +la $t0, s_34 +sw $t0, 1204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1208($sp) +move $t0, $sp +lw $t1, 1204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1212($sp) +lw $t1, 1208($sp) +sw $t1, 1012($sp) +label_93: +lw $t1, 1012($sp) +sw $t1, 976($sp) +b label_94 +label_85: +la $t0, s_35 +sw $t0, 1216($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1220($sp) +move $t0, $sp +lw $t1, 1216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1224($sp) +lw $t1, 1220($sp) +sw $t1, 976($sp) +label_94: +lw $t1, 976($sp) +sw $t1, 940($sp) +b label_95 +label_84: +la $t0, s_36 +sw $t0, 1228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1232($sp) +move $t0, $sp +lw $t1, 1228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1236($sp) +lw $t1, 1232($sp) +sw $t1, 940($sp) +label_95: +lw $t1, 940($sp) +sw $t1, 904($sp) +b label_96 +label_83: +la $t0, s_37 +sw $t0, 1240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1244($sp) +move $t0, $sp +lw $t1, 1240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1248($sp) +lw $t1, 1244($sp) +sw $t1, 904($sp) +label_96: +lw $t1, 904($sp) +sw $t1, 868($sp) +b label_97 +label_82: +la $t0, s_38 +sw $t0, 1252($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1256($sp) +move $t0, $sp +lw $t1, 1252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1260($sp) +lw $t1, 1256($sp) +sw $t1, 868($sp) +label_97: +lw $t1, 868($sp) +sw $t1, 832($sp) +b label_98 +label_81: +la $t0, s_39 +sw $t0, 1264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1268($sp) +move $t0, $sp +lw $t1, 1264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1268($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1272($sp) +lw $t1, 1268($sp) +sw $t1, 832($sp) +label_98: +lw $t1, 832($sp) +sw $t1, 796($sp) +b label_99 +label_80: +la $t0, s_40 +sw $t0, 1276($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1280($sp) +move $t0, $sp +lw $t1, 1276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1284($sp) +lw $t1, 1280($sp) +sw $t1, 796($sp) +label_99: +lw $t1, 796($sp) +sw $t1, 760($sp) +b label_100 +label_79: +la $t0, s_41 +sw $t0, 1288($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1292($sp) +move $t0, $sp +lw $t1, 1288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1296($sp) +lw $t1, 1292($sp) +sw $t1, 760($sp) +label_100: +lw $t1, 760($sp) +sw $t1, 724($sp) +b label_101 +label_78: +la $t0, s_42 +sw $t0, 1300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1304($sp) +move $t0, $sp +lw $t1, 1300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1308($sp) +lw $t1, 1304($sp) +sw $t1, 724($sp) +label_101: +lw $t1, 724($sp) +sw $t1, 688($sp) +b label_102 +label_77: +la $t0, s_43 +sw $t0, 1312($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1316($sp) +move $t0, $sp +lw $t1, 1312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1320($sp) +lw $t1, 1316($sp) +sw $t1, 688($sp) +label_102: +lw $t1, 688($sp) +sw $t1, 652($sp) +b label_103 +label_76: +la $t0, s_44 +sw $t0, 1324($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1328($sp) +move $t0, $sp +lw $t1, 1324($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1328($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1332($sp) +lw $t1, 1328($sp) +sw $t1, 652($sp) +label_103: +lw $t1, 652($sp) +sw $t1, 616($sp) +b label_104 +label_75: +la $t0, s_45 +sw $t0, 1336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1340($sp) +move $t0, $sp +lw $t1, 1336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1340($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1344($sp) +lw $t1, 1340($sp) +sw $t1, 616($sp) +label_104: +lw $t1, 616($sp) +sw $t1, 580($sp) +b label_105 +label_74: +la $t0, s_46 +sw $t0, 1348($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1352($sp) +move $t0, $sp +lw $t1, 1348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1356($sp) +lw $t1, 1352($sp) +sw $t1, 580($sp) +label_105: +lw $t1, 580($sp) +sw $t1, 544($sp) +b label_106 +label_73: +la $t0, s_47 +sw $t0, 1360($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1364($sp) +move $t0, $sp +lw $t1, 1360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1364($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1368($sp) +lw $t1, 1364($sp) +sw $t1, 544($sp) +label_106: +lw $t1, 544($sp) +sw $t1, 508($sp) +b label_107 +label_72: +la $t0, s_48 +sw $t0, 1372($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1376($sp) +move $t0, $sp +lw $t1, 1372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1376($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1380($sp) +lw $t1, 1376($sp) +sw $t1, 508($sp) +label_107: +lw $t1, 508($sp) +sw $t1, 472($sp) +b label_108 +label_71: +la $t0, s_49 +sw $t0, 1384($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1388($sp) +move $t0, $sp +lw $t1, 1384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1388($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1392($sp) +lw $t1, 1388($sp) +sw $t1, 472($sp) +label_108: +lw $t1, 472($sp) +sw $t1, 436($sp) +b label_109 +label_70: +la $t0, s_50 +sw $t0, 1396($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1400($sp) +move $t0, $sp +lw $t1, 1396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1400($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1404($sp) +lw $t1, 1400($sp) +sw $t1, 436($sp) +label_109: +lw $t1, 436($sp) +sw $t1, 400($sp) +b label_110 +label_69: +la $t0, s_51 +sw $t0, 1408($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1412($sp) +move $t0, $sp +lw $t1, 1408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1412($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1416($sp) +lw $t1, 1412($sp) +sw $t1, 400($sp) +label_110: +lw $t1, 400($sp) +sw $t1, 1420($sp) +lw $a1, 1420($sp) +lw $ra, 0($sp) +addi $sp, $sp, 1428 +jr $ra +CellularAutomaton.prompt: +addi $sp, $sp, -124 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +la $t0, s_52 +sw $t0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 8($sp) +la $t0, s_53 +sw $t0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 40($sp) +lw $t1, 40($sp) +sw $t1, 4($sp) +la $t0, s_3 +sw $t0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 60($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 48($sp) +la $t0, s_54 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 96($sp) +b result_16 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +la $t0, 0 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +lw $t1, 100($sp) +sw $t1, 64($sp) +b label_112 +label_111: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +la $t0, 0 +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 120($sp) +lw $t1, 112($sp) +sw $t1, 64($sp) +label_112: +lw $t1, 64($sp) +sw $t1, 124($sp) +lw $a1, 124($sp) +lw $ra, 0($sp) +addi $sp, $sp, 132 +jr $ra +CellularAutomaton.prompt2: +addi $sp, $sp, -124 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +la $t0, s_55 +sw $t0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 8($sp) +la $t0, s_56 +sw $t0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +la $t0, s_57 +sw $t0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 56($sp) +lw $t1, 56($sp) +sw $t1, 4($sp) +la $t0, s_58 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 96($sp) +b result_16 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +la $t0, 0 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +lw $t1, 100($sp) +sw $t1, 64($sp) +b label_114 +label_113: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +la $t0, 0 +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 120($sp) +lw $t1, 112($sp) +sw $t1, 64($sp) +label_114: +lw $t1, 64($sp) +sw $t1, 124($sp) +lw $a1, 124($sp) +lw $ra, 0($sp) +addi $sp, $sp, 132 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal CellularAutomaton_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 32($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -148 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t1, void +sw $t1, 4($sp) +la $t1, void +sw $t1, 8($sp) +la $t0, s_59 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 12($sp) +la $t0, s_60 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +label_115: +move $t0, $sp +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 104($t2) +jal $t3 +sw $a1, 48($sp) +b result_11 +b label_117 +label_116: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +la $t0, 0 +sw $t0, 56($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 60($sp) +lw $t1, 52($sp) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 96($t2) +jal $t3 +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 8($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal CellularAutomaton_init +sw $a1, 84($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 76($sp) +lw $t0, 152($sp) +lw $t1, 76($sp) +sw $t1, 32($t0) +lw $t0, 152($sp) +lw $t1, 32($t0) +sw $t1, 96($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 92($sp) +label_118: +b continue_0 +b label_120 +label_119: +move $t0, $sp +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 100($t2) +jal $t3 +sw $a1, 108($sp) +b result_26 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +la $t0, 0 +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 120($sp) +lw $t1, 112($sp) +sw $t1, 4($sp) +lw $t1, 112($sp) +sw $t1, 104($sp) +b label_122 +label_121: +lw $t0, 152($sp) +lw $t1, 32($t0) +sw $t1, 132($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 92($t2) +jal $t3 +sw $a1, 128($sp) +lw $t0, 152($sp) +lw $t1, 32($t0) +sw $t1, 140($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 136($sp) +lw $t1, 136($sp) +sw $t1, 104($sp) +label_122: +b label_118 +label_120: +la $t0, None +sw $t0, 100($sp) +b label_115 +label_117: +la $t0, None +sw $t0, 44($sp) +lw $t1, 152($sp) +sw $t1, 144($sp) +lw $t1, 144($sp) +sw $t1, 148($sp) +lw $a1, 148($sp) +lw $ra, 0($sp) +addi $sp, $sp, 156 +jr $ra \ No newline at end of file diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips new file mode 100644 index 00000000..135d7e2d --- /dev/null +++ b/tests/codegen/list.mips @@ -0,0 +1,1374 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +List_name: .asciiz "List" +List_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word List.isNil +.word List.head +.word List.tail +.word List.cons +Cons_name: .asciiz "Cons" +Cons_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word Cons.isNil +.word Cons.head +.word Cons.tail +.word List.cons +.word Cons.init +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.print_list +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz " " +s_4: .asciiz "\n" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +List_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal None_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +List.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +List.head: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +List.tail: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +List.cons: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Cons_init +sw $a1, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Cons_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal List_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $t0, 20($sp) +la $t1, void +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Cons.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Cons.head: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Cons.tail: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 20($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Cons.init: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($sp) +sw $t1, 16($t0) +lw $t0, 12($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.print_list: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 8($sp) +b result_1 +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 12($sp) +la $t0, s_3 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 36($sp) +lw $t1, 36($sp) +sw $t1, 4($sp) +b label_2 +label_1: +la $t0, s_4 +sw $t0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 56($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 4($sp) +label_2: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 68 +jr $ra +Main.main: +addi $sp, $sp, -140 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal List_init +sw $a1, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +la $t0, 1 +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 20($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +la $t0, 2 +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +la $t0, 3 +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +la $t0, 4 +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +la $t0, 5 +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 144($sp) +lw $t1, 4($sp) +sw $t1, 16($t0) +label_3: +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 112($sp) +lw $t0, 112($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $t1, 108($sp) +xor $a0, $t1, 1 +sw $a0, 104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 120($sp) +b result_24 +b label_5 +label_4: +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 124($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 132($sp) +lw $t0, 144($sp) +lw $t1, 132($sp) +sw $t1, 16($t0) +b label_3 +label_5: +la $t0, None +sw $t0, 96($sp) +lw $a1, 96($sp) +lw $ra, 0($sp) +addi $sp, $sp, 148 +jr $ra \ No newline at end of file diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips new file mode 100644 index 00000000..7130ce41 --- /dev/null +++ b/tests/codegen/palindrome.mips @@ -0,0 +1,1442 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.pal +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "enter a string\n" +s_4: .asciiz "that was not a palindrome\n" +s_5: .asciiz "that was a palindrome\n" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main.pal: +addi $sp, $sp, -276 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_1 +move $t0, $sp +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +la $t0, 1 +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 80($sp) +b result_11 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 108($sp) +la $t0, 1 +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +la $t0, 0 +sw $t0, 124($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 128($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +la $t0, 1 +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +move $t0, $sp +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 164($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 168($sp) +la $t0, 1 +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 176($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 156($sp) +lw $t0, 168($sp) +lw $t1, 16($t0) +sw $t1, 160($sp) +lw $a0, 156($sp) +lw $t1, 160($sp) +sub $a0, $a0, $t1 +sw $a0, 152($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 180($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 132($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $t0, 132($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) +seq $a0, $a0, $t1 +sw $a0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 184($sp) +b result_21 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +la $t0, 0 +sw $t0, 192($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 196($sp) +lw $t1, 188($sp) +sw $t1, 84($sp) +b label_4 +label_3: +move $t0, $sp +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 224($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 228($sp) +la $t0, 2 +sw $t0, 232($sp) +move $t0, $sp +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 236($sp) +lw $t0, 224($sp) +lw $t1, 16($t0) +sw $t1, 216($sp) +lw $t0, 228($sp) +lw $t1, 16($t0) +sw $t1, 220($sp) +lw $a0, 216($sp) +lw $t1, 220($sp) +sub $a0, $a0, $t1 +sw $a0, 212($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 244($sp) +la $t0, 1 +sw $t0, 248($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 252($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 284($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 204($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 280($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 200($sp) +lw $t1, 200($sp) +sw $t1, 84($sp) +label_4: +lw $t1, 84($sp) +sw $t1, 44($sp) +b label_5 +label_2: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 256($sp) +la $t0, 0 +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 264($sp) +lw $t1, 256($sp) +sw $t1, 44($sp) +label_5: +lw $t1, 44($sp) +sw $t1, 4($sp) +b label_6 +label_1: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 268($sp) +la $t0, 0 +sw $t0, 272($sp) +move $t0, $sp +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 268($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 276($sp) +lw $t1, 268($sp) +sw $t1, 4($sp) +label_6: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 288 +jr $ra +Main.main: +addi $sp, $sp, -92 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +la $t0, 1 +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 24($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t1, 12($sp) +neg $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t0, 96($sp) +lw $t1, 4($sp) +sw $t1, 16($t0) +la $t0, s_3 +sw $t0, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 56($sp) +b result_13 +la $t0, s_4 +sw $t0, 68($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 76($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 52($sp) +b label_8 +label_7: +la $t0, s_5 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 80($sp) +lw $t1, 80($sp) +sw $t1, 52($sp) +label_8: +lw $a1, 52($sp) +lw $ra, 0($sp) +addi $sp, $sp, 100 +jr $ra \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips new file mode 100644 index 00000000..37382676 --- /dev/null +++ b/tests/codegen/primes.mips @@ -0,0 +1,762 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -52 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 56($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +la $t0, 0 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t0, 56($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +la $t0, 0 +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 56($sp) +lw $t1, 32($sp) +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +la $t0, 0 +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 52($sp) +lw $t0, 56($sp) +lw $t1, 44($sp) +sw $t1, 28($t0) +lw $t0, 56($sp) +la $t1, void +sw $t1, 32($t0) +lw $ra, 0($sp) +addi $sp, $sp, 60 +jr $ra +Main.main: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra \ No newline at end of file diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 5b9ef3d2..8109bd75 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -100,7 +100,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 5 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips new file mode 100644 index 00000000..28c4b1c2 --- /dev/null +++ b/tests/codegen/sort-list.mips @@ -0,0 +1,1911 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +List_name: .asciiz "List" +List_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word List.isNil +.word List.cons +.word List.car +.word List.cdr +.word List.rev +.word List.sort +.word List.insert +.word List.rcons +.word List.print_list +Cons_name: .asciiz "Cons" +Cons_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Cons.isNil +.word List.cons +.word Cons.car +.word Cons.cdr +.word Cons.rev +.word Cons.sort +.word Cons.insert +.word Cons.rcons +.word Cons.print_list +.word Cons.init +Nil_name: .asciiz "Nil" +Nil_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Nil.isNil +.word List.cons +.word List.car +.word List.cdr +.word Nil.rev +.word Nil.sort +.word Nil.insert +.word Nil.rcons +.word Nil.print_list +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.iota +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "\n" +s_4: .asciiz "How many numbers to sort? " +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +List_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +List.isNil: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 16($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +List.cons: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Cons_init +sw $a1, 8($sp) +lw $t1, 4($sp) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 64($t2) +jal $t3 +sw $a1, 16($sp) +lw $t1, 16($sp) +sw $t1, 20($sp) +lw $a1, 20($sp) +lw $ra, 0($sp) +addi $sp, $sp, 32 +jr $ra +List.car: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +List.cdr: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal List_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +List.rev: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +List.sort: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +List.insert: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +List.rcons: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +List.print_list: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Cons_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal List_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $t0, 20($sp) +la $t1, void +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Cons.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Cons.init: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($sp) +sw $t1, 16($t0) +lw $t0, 12($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Cons.car: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Cons.cdr: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 20($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Cons.rev: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 20($sp) +lw $t1, 20($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 8($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 56($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Cons.sort: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 20($sp) +lw $t1, 20($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 8($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 52($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Cons.insert: +addi $sp, $sp, -64 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 28($sp) +b result_1 +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Cons_init +sw $a1, 40($sp) +lw $t0, 68($sp) +lw $t1, 20($t0) +sw $t1, 48($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 52($t2) +jal $t3 +sw $a1, 44($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 64($t2) +jal $t3 +sw $a1, 32($sp) +lw $t1, 32($sp) +sw $t1, 4($sp) +b label_2 +label_1: +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Cons_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 64($t2) +jal $t3 +sw $a1, 56($sp) +lw $t1, 56($sp) +sw $t1, 4($sp) +label_2: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 76 +jr $ra +Cons.rcons: +addi $sp, $sp, -24 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Cons_init +sw $a1, 12($sp) +lw $t0, 28($sp) +lw $t1, 20($t0) +sw $t1, 20($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 56($t2) +jal $t3 +sw $a1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 64($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Cons.print_list: +addi $sp, $sp, -32 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 4($sp) +la $t0, s_3 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 12($sp) +lw $t0, 36($sp) +lw $t1, 20($t0) +sw $t1, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 60($t2) +jal $t3 +sw $a1, 28($sp) +lw $a1, 28($sp) +lw $ra, 0($sp) +addi $sp, $sp, 40 +jr $ra +Nil_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal List_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Nil.isNil: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Nil.rev: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Nil.sort: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Nil.insert: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 56($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +Nil.rcons: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Cons_init +sw $a1, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 64($t2) +jal $t3 +sw $a1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Nil.print_list: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 8($sp) +la $t1, void +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.iota: +addi $sp, $sp, -116 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Nil_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Nil_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Nil_init +sw $a1, 8($sp) +lw $t0, 120($sp) +lw $t1, 4($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +la $t0, 0 +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 24($sp) +lw $t1, 16($sp) +sw $t1, 28($sp) +label_3: +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 44($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $a0, 44($sp) +lw $t1, 48($sp) +slt $a0, $a0, $t1 +sw $a0, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 52($sp) +b result_8 +b label_5 +label_4: +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Cons_init +sw $a1, 64($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 64($t2) +jal $t3 +sw $a1, 56($sp) +lw $t0, 120($sp) +lw $t1, 56($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +la $t0, 1 +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 100($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 84($sp) +lw $t0, 92($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $a0, 84($sp) +lw $t1, 88($sp) +add $a0, $a0, $t1 +sw $a0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 104($sp) +lw $t1, 76($sp) +sw $t1, 28($sp) +b label_3 +label_5: +la $t0, None +sw $t0, 32($sp) +lw $t1, 32($sp) +sw $t1, 112($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +lw $a1, 116($sp) +lw $ra, 0($sp) +addi $sp, $sp, 128 +jr $ra +Main.main: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_4 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 60($t2) +jal $t3 +sw $a1, 20($sp) +lw $a1, 20($sp) +lw $ra, 0($sp) +addi $sp, $sp, 44 +jr $ra \ No newline at end of file From 38478abe080da4e22f9acacee836245930435799 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sun, 13 Dec 2020 02:03:02 -0500 Subject: [PATCH 120/140] solving init labels and dynamic exprs --- src/cl_ast/declarations.py | 2 +- src/visitors/transpilator.py | 12 ++++++------ src/visitors/type_checker.py | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/cl_ast/declarations.py b/src/cl_ast/declarations.py index a57ce012..57eb0ba5 100644 --- a/src/cl_ast/declarations.py +++ b/src/cl_ast/declarations.py @@ -1,7 +1,7 @@ from .astNode import ASTNode class ClassDeclarationNode(ASTNode): - def __init__(self, row, col, idx, features, parent = None): + def __init__(self, row, col, idx, features, parent = "Object"): super().__init__(row, col) self.id = idx self.parent = parent diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index c7827574..c4791b04 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -1050,7 +1050,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr].name)) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -1067,7 +1067,7 @@ def visit(self, node, scope, sscope): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr].name)) else: right_type = 'Int' if isinstance(node.right, IntegerNode): @@ -1109,7 +1109,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr].name)) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -1126,7 +1126,7 @@ def visit(self, node, scope, sscope): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr].name)) else: right_type = 'Int' if isinstance(node.right, IntegerNode): @@ -1212,7 +1212,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr].name)) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -1229,7 +1229,7 @@ def visit(self, node, scope, sscope): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr].name)) else: right_type = 'Int' if isinstance(node.right, IntegerNode): diff --git a/src/visitors/type_checker.py b/src/visitors/type_checker.py index aaa92511..60aeeb2d 100644 --- a/src/visitors/type_checker.py +++ b/src/visitors/type_checker.py @@ -265,6 +265,10 @@ def visit(self, node, scope): def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) + + self.context.exprs_dict[node.left] = ltype + self.context.exprs_dict[node.right] = rtype + if rtype != IntType() or ltype != IntType(): self.errors.append(CTypeError(node.row, node.col, BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name))) return ErrorType() @@ -275,6 +279,10 @@ def visit(self, node, scope): def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) + + self.context.exprs_dict[node.left] = ltype + self.context.exprs_dict[node.right] = rtype + if rtype != IntType() or ltype != IntType(): self.errors.append(CTypeError(node.row, node.col, BOPERATION_NOT_DEFINED %('Comparison', ltype.name, rtype.name))) return ErrorType() @@ -285,6 +293,10 @@ def visit(self, node, scope): def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) + + self.context.exprs_dict[node.left] = ltype + self.context.exprs_dict[node.right] = rtype + if rtype != IntType() or ltype != IntType(): self.errors.append(CTypeError(node.row, node.col, BOPERATION_NOT_DEFINED %('Comparison', ltype.name, rtype.name))) return ErrorType() @@ -296,6 +308,9 @@ def visit(self, node, scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) + self.context.exprs_dict[node.left] = ltype + self.context.exprs_dict[node.right] = rtype + if ltype in [IntType(), StringType(), BoolType()] and ltype != rtype: self.errors.append(CTypeError(node.row, node.col, f'Invalid comparison operation between {ltype.name} and {rtype.name}')) @@ -304,6 +319,8 @@ def visit(self, node, scope): @visitor.when(NotNode) def visit(self, node, scope): ltype = self.visit(node.expr, scope) + self.context.exprs_dict[node.expr] = ltype + if ltype != BoolType(): self.errors.append(CTypeError(node.row, node.col, UOPERATION_NOT_DEFINED %('Logical', ltype.name))) return ErrorType() @@ -313,6 +330,7 @@ def visit(self, node, scope): @visitor.when(BitNotNode) def visit(self, node, scope): ltype = self.visit(node.expr, scope) + self.context.exprs_dict[node.expr] = ltype if ltype != IntType(): self.errors.append(CTypeError(node.row, node.col, UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name))) return ErrorType() From 219d15aac337bd771c6cf016618effdeca86f729 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sun, 13 Dec 2020 02:06:20 -0500 Subject: [PATCH 121/140] working in gitignore --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 05d72173..92e90094 100644 --- a/.gitignore +++ b/.gitignore @@ -412,6 +412,6 @@ dmypy.json # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) src/ast.txt -src/main.py +#src/main.py .idea -test \ No newline at end of file +#test \ No newline at end of file From 14745cec66c54d8396d6fc5bd039e648d2b419a1 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sun, 13 Dec 2020 02:06:48 -0500 Subject: [PATCH 122/140] solving init labels and dynamic exprs --- tests/codegen/arith.mips | 4 +- tests/codegen/atoi.mips | 2 +- tests/codegen/book_list.mips | 2 +- tests/codegen/cells.mips | 2 +- tests/codegen/complex.mips | 1535 ++++++++++++++++++++++++++ tests/codegen/graph.mips | 4 +- tests/codegen/hairyscary.mips | 2 +- tests/codegen/io.mips | 2 +- tests/codegen/list.mips | 2 +- tests/codegen/new_complex.mips | 1875 ++++++++++++++++++++++++++++++++ 10 files changed, 3420 insertions(+), 10 deletions(-) create mode 100644 tests/codegen/complex.mips create mode 100644 tests/codegen/new_complex.mips diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 282985f3..72857ab0 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -743,7 +743,7 @@ move $t0, $sp lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero li $a0, 20 @@ -2305,7 +2305,7 @@ move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero lw $ra, 0($sp) diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index 685c9777..3d60d035 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -632,7 +632,7 @@ move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero lw $ra, 0($sp) diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index 9997653b..e2f1ec32 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -1670,7 +1670,7 @@ move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero lw $t0, 8($sp) diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 6ef476b7..ce5d179b 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -2018,7 +2018,7 @@ move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero lw $t0, 8($sp) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips new file mode 100644 index 00000000..6701939e --- /dev/null +++ b/tests/codegen/complex.mips @@ -0,0 +1,1535 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.main +Complex_name: .asciiz "Complex" +Complex_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Complex.init +.word Complex.print +.word Complex.reflect_0 +.word Complex.reflect_X +.word Complex.reflect_Y +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "=(\n" +s_4: .asciiz "=)\n" +s_5: .asciiz "+" +s_6: .asciiz "I" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -112 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Complex_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Complex_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Complex_init +sw $a1, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +la $t0, 1 +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 1 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 4($sp) +lw $t1, 4($sp) +sw $t1, 40($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 72($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +b result_11 +la $t0, s_3 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 80($sp) +lw $t1, 80($sp) +sw $t1, 44($sp) +b label_2 +label_1: +la $t0, s_4 +sw $t0, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 108($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 96($sp) +lw $t1, 96($sp) +sw $t1, 44($sp) +label_2: +lw $t1, 44($sp) +sw $t1, 112($sp) +lw $a1, 112($sp) +lw $ra, 0($sp) +addi $sp, $sp, 120 +jr $ra +Complex_init: +addi $sp, $sp, -28 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 32($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +la $t0, 0 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t0, 32($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Complex.init: +addi $sp, $sp, -48 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 52($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $a0, 12($sp) +lw $t1, 16($sp) +seq $a0, $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 24($sp) +lw $t0, 52($sp) +lw $t1, 20($t0) +sw $t1, 44($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 40($sp) +lw $a0, 36($sp) +lw $t1, 40($sp) +seq $a0, $a0, $t1 +sw $a0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 48($sp) +lw $a1, 52($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +Complex.print: +addi $sp, $sp, -96 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 100($sp) +lw $t1, 20($t0) +sw $t1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_1 +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 56($sp) +la $t0, s_5 +sw $t0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 72($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 52($sp) +lw $t0, 100($sp) +lw $t1, 20($t0) +sw $t1, 76($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 48($sp) +la $t0, s_6 +sw $t0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 4($sp) +b label_4 +label_3: +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 92($sp) +lw $t1, 92($sp) +sw $t1, 4($sp) +label_4: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 104 +jr $ra +Complex.reflect_0: +addi $sp, $sp, -88 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 92($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 92($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t1, 32($sp) +neg $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $a0, 12($sp) +lw $t1, 16($sp) +seq $a0, $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 44($sp) +lw $t0, 92($sp) +lw $t1, 20($t0) +sw $t1, 64($sp) +lw $t0, 92($sp) +lw $t1, 20($t0) +sw $t1, 80($sp) +lw $t0, 80($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t1, 76($sp) +neg $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 84($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 88($sp) +lw $a1, 92($sp) +lw $ra, 0($sp) +addi $sp, $sp, 96 +jr $ra +Complex.reflect_X: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 48($sp) +lw $t1, 20($t0) +sw $t1, 20($sp) +lw $t0, 48($sp) +lw $t1, 20($t0) +sw $t1, 36($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t1, 32($sp) +neg $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $a0, 12($sp) +lw $t1, 16($sp) +seq $a0, $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 44($sp) +lw $a1, 48($sp) +lw $ra, 0($sp) +addi $sp, $sp, 52 +jr $ra +Complex.reflect_Y: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t1, 32($sp) +neg $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $a0, 12($sp) +lw $t1, 16($sp) +seq $a0, $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 44($sp) +lw $a1, 48($sp) +lw $ra, 0($sp) +addi $sp, $sp, 52 +jr $ra \ No newline at end of file diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index f30cefc6..c0e43c18 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -741,7 +741,7 @@ move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero lw $t0, 8($sp) @@ -5227,7 +5227,7 @@ move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero lw $ra, 0($sp) diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index a861cdda..797f38ee 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -1044,7 +1044,7 @@ move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero lw $t0, 8($sp) diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index 4b6ee1f3..a493c7a6 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -645,7 +645,7 @@ move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero lw $t0, 8($sp) diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 135d7e2d..ee9e7f93 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -628,7 +628,7 @@ move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal None_init +jal Object_init sw $a1, 4($sp) move $a1, $zero lw $ra, 0($sp) diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips new file mode 100644 index 00000000..c4261980 --- /dev/null +++ b/tests/codegen/new_complex.mips @@ -0,0 +1,1875 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.main +Complex_name: .asciiz "Complex" +Complex_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Complex.init +.word Complex.print +.word Complex.reflect_0 +.word Complex.reflect_X +.word Complex.reflect_Y +.word Complex.equal +.word Complex.x_value +.word Complex.y_value +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "=(\n" +s_4: .asciiz "=)\n" +s_5: .asciiz "+" +s_6: .asciiz "I" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Main_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Main.main: +addi $sp, $sp, -160 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Complex_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Complex_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Complex_init +sw $a1, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +la $t0, 1 +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 1 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 4($sp) +lw $t1, 4($sp) +sw $t1, 40($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 68($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +b result_11 +la $t0, s_3 +sw $t0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 44($sp) +b label_2 +label_1: +la $t0, s_4 +sw $t0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 92($sp) +lw $t1, 92($sp) +sw $t1, 44($sp) +label_2: +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 116($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 124($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 112($sp) +b result_27 +la $t0, s_3 +sw $t0, 132($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 128($sp) +lw $t1, 128($sp) +sw $t1, 108($sp) +b label_4 +label_3: +la $t0, s_4 +sw $t0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 156($sp) +move $t0, $sp +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 144($sp) +lw $t1, 144($sp) +sw $t1, 108($sp) +label_4: +lw $t1, 108($sp) +sw $t1, 160($sp) +lw $a1, 160($sp) +lw $ra, 0($sp) +addi $sp, $sp, 168 +jr $ra +Complex_init: +addi $sp, $sp, -28 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 32($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +la $t0, 0 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t0, 32($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Complex.init: +addi $sp, $sp, -48 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 52($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $a0, 12($sp) +lw $t1, 16($sp) +seq $a0, $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 24($sp) +lw $t0, 52($sp) +lw $t1, 20($t0) +sw $t1, 44($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 40($sp) +lw $a0, 36($sp) +lw $t1, 40($sp) +seq $a0, $a0, $t1 +sw $a0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 48($sp) +lw $a1, 52($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +Complex.print: +addi $sp, $sp, -96 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 100($sp) +lw $t1, 20($t0) +sw $t1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +b result_1 +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 56($sp) +la $t0, s_5 +sw $t0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 72($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 52($sp) +lw $t0, 100($sp) +lw $t1, 20($t0) +sw $t1, 76($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 48($sp) +la $t0, s_6 +sw $t0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 4($sp) +b label_6 +label_5: +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 92($sp) +lw $t1, 92($sp) +sw $t1, 4($sp) +label_6: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 104 +jr $ra +Complex.reflect_0: +addi $sp, $sp, -88 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 92($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 92($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t1, 32($sp) +neg $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $a0, 12($sp) +lw $t1, 16($sp) +seq $a0, $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 44($sp) +lw $t0, 92($sp) +lw $t1, 20($t0) +sw $t1, 64($sp) +lw $t0, 92($sp) +lw $t1, 20($t0) +sw $t1, 80($sp) +lw $t0, 80($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t1, 76($sp) +neg $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 84($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 88($sp) +lw $a1, 92($sp) +lw $ra, 0($sp) +addi $sp, $sp, 96 +jr $ra +Complex.reflect_X: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 48($sp) +lw $t1, 20($t0) +sw $t1, 20($sp) +lw $t0, 48($sp) +lw $t1, 20($t0) +sw $t1, 36($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t1, 32($sp) +neg $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $a0, 12($sp) +lw $t1, 16($sp) +seq $a0, $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 44($sp) +lw $a1, 48($sp) +lw $ra, 0($sp) +addi $sp, $sp, 52 +jr $ra +Complex.reflect_Y: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 48($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $t1, 32($sp) +neg $a0, $t1 +sw $a0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +lw $a0, 12($sp) +lw $t1, 16($sp) +seq $a0, $a0, $t1 +sw $a0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 44($sp) +lw $a1, 48($sp) +lw $ra, 0($sp) +addi $sp, $sp, 52 +jr $ra +Complex.equal: +addi $sp, $sp, -100 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 52($t2) +jal $t3 +sw $a1, 28($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 32($sp) +b result_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +la $t0, 0 +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 44($sp) +lw $t1, 36($sp) +sw $t1, 4($sp) +b label_8 +label_7: +lw $t0, 104($sp) +lw $t1, 20($t0) +sw $t1, 68($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 56($t2) +jal $t3 +sw $a1, 72($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $a0, 60($sp) +lw $t1, 64($sp) +seq $a0, $a0, $t1 +sw $a0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +b result_12 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +la $t0, 0 +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 88($sp) +lw $t1, 80($sp) +sw $t1, 48($sp) +b label_10 +label_9: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +la $t0, 0 +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 100($sp) +lw $t1, 92($sp) +sw $t1, 48($sp) +label_10: +lw $t1, 48($sp) +sw $t1, 4($sp) +label_8: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 112 +jr $ra +Complex.x_value: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Complex.y_value: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 20($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra \ No newline at end of file From ca9d79c77168d5a7389d34bf215e17f4c8c59057 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sun, 13 Dec 2020 04:17:12 -0500 Subject: [PATCH 123/140] working on missiong labels --- src/visitors/transpilator.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index c4791b04..c67a104e 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -702,6 +702,8 @@ def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name="result") result_init = self.define_internal_local(scope=scope, name="init") + print(result_init) + if node.type == "SELF_TYPE": # get_type_local = self.define_internal_local(scope = scope, name = "type_name") # self.register_instruction(TypeOfNodeIL("self", get_type_local)) From 1ca9470f81764bb630e520caa58e8683006d4810 Mon Sep 17 00:00:00 2001 From: hros18 Date: Sun, 13 Dec 2020 08:48:21 -0500 Subject: [PATCH 124/140] fixxing some GotoIF missing, new test PASSED fib, atoi, new-complex, sort-list --- src/visitors/to_mips.py | 7 +- src/visitors/transpilator.py | 4 +- tests/codegen/arith.mips | 252 ++++++++++++++++------------ tests/codegen/atoi.mips | 134 +++++++++------ tests/codegen/book_list.mips | 8 - tests/codegen/cells.mips | 48 +++--- tests/codegen/complex.mips | 14 +- tests/codegen/fib.mips | 12 +- tests/codegen/graph.mips | 132 +++++++-------- tests/codegen/hairyscary.mips | 10 -- tests/codegen/life.mips | 290 ++++++++++++++++++++------------- tests/codegen/list.mips | 18 +- tests/codegen/new_complex.mips | 32 ++-- tests/codegen/palindrome.mips | 28 ++-- tests/codegen/primes.mips | 10 -- tests/codegen/sort-list.mips | 22 +-- 16 files changed, 549 insertions(+), 472 deletions(-) diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index dbfeaf8a..68252131 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -389,9 +389,10 @@ def visit(self, node): @visitor.when(LoadNodeIL) def visit(self, node): - self.text += f'la $t0, {node.msg}\n' - offset = self.var_offset[self.current_function.name][node.dest] - self.text += f'sw $t0, {offset}($sp)\n' + if node.msg: + self.text += f'la $t0, {node.msg}\n' + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t0, {offset}($sp)\n' # @visitor.when(CIL_AST.LoadInt) # def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index c67a104e..87d907c7 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -528,7 +528,7 @@ def visit(self, node, scope, sscope): cond_value = self.visit(node.cond, scope, sscope) if_then_label = self.get_label() - self.register_instruction(GotoNodeIL(cond_value, if_then_label)) + self.register_instruction(GotoIfNodeIL(cond_value, if_then_label)) else_value = self.visit(node.else_stm, scope, sscope) self.register_instruction(AssignNodeIL(result_local, else_value)) @@ -552,7 +552,7 @@ def visit(self, node, scope, sscope): loop_end_label = self.get_label() self.register_instruction(LabelNodeIL(loop_init_label)) pred_value = self.visit(node.cond, scope, sscope) - self.register_instruction(GotoNodeIL(pred_value, loop_body_label)) + self.register_instruction(GotoIfNodeIL(pred_value, loop_body_label)) self.register_instruction(GotoNodeIL(loop_end_label)) self.register_instruction(LabelNodeIL(loop_body_label)) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 72857ab0..a4818c11 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -760,8 +760,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1002,7 +1000,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 24($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_1 la $t1, void sw $t1, 28($sp) lw $t0, 124($sp) @@ -1252,7 +1252,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 56($sp) -b result_9 +lw $t0, 40($sp) +lw $a0, 16($t0) +bnez $a0, label_4 b label_5 label_4: lw $t0, 16($sp) @@ -1352,8 +1354,6 @@ lw $t1, 84($sp) sw $t1, 32($sp) b label_3 label_5: -la $t0, None -sw $t0, 36($sp) lw $t1, 36($sp) sw $t1, 120($sp) li $a0, 20 @@ -1730,8 +1730,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -1774,7 +1772,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_2 +lw $t0, 12($sp) +lw $a0, 16($t0) +bnez $a0, label_6 li $a0, 20 li $v0, 9 syscall @@ -1789,8 +1789,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 64($sp) -la $t0, 0 -sw $t0, 68($sp) move $t0, $sp lw $t1, 68($t0) addi $sp, $sp, -4 @@ -1833,7 +1831,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 76($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_7 li $a0, 20 li $v0, 9 syscall @@ -1892,7 +1892,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 112($sp) -b result_20 +lw $t0, 84($sp) +lw $a0, 16($t0) +bnez $a0, label_8 li $a0, 20 li $v0, 9 syscall @@ -1951,7 +1953,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 148($sp) -b result_29 +lw $t0, 120($sp) +lw $a0, 16($t0) +bnez $a0, label_9 li $a0, 20 li $v0, 9 syscall @@ -2042,8 +2046,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 188($sp) -la $t0, 0 -sw $t0, 192($sp) move $t0, $sp lw $t1, 192($t0) addi $sp, $sp, -4 @@ -2074,8 +2076,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 200($sp) -la $t0, 0 -sw $t0, 204($sp) move $t0, $sp lw $t1, 204($t0) addi $sp, $sp, -4 @@ -2106,8 +2106,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 212($sp) -la $t0, 0 -sw $t0, 216($sp) move $t0, $sp lw $t1, 216($t0) addi $sp, $sp, -4 @@ -2372,7 +2370,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_14 la $t0, s_4 sw $t0, 60($sp) li $a0, 20 @@ -2430,7 +2430,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 72($sp) -b result_10 +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_15 la $t0, s_5 sw $t0, 96($sp) li $a0, 20 @@ -2488,7 +2490,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 108($sp) -b result_19 +lw $t0, 80($sp) +lw $a0, 16($t0) +bnez $a0, label_16 la $t0, s_6 sw $t0, 132($sp) li $a0, 20 @@ -2546,7 +2550,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 144($sp) -b result_28 +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_17 la $t0, s_7 sw $t0, 168($sp) li $a0, 20 @@ -2604,7 +2610,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 180($sp) -b result_37 +lw $t0, 152($sp) +lw $a0, 16($t0) +bnez $a0, label_18 la $t0, s_8 sw $t0, 204($sp) li $a0, 20 @@ -2662,7 +2670,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 216($sp) -b result_46 +lw $t0, 188($sp) +lw $a0, 16($t0) +bnez $a0, label_19 la $t0, s_9 sw $t0, 240($sp) li $a0, 20 @@ -2720,7 +2730,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 252($sp) -b result_55 +lw $t0, 224($sp) +lw $a0, 16($t0) +bnez $a0, label_20 la $t0, s_10 sw $t0, 276($sp) li $a0, 20 @@ -2778,7 +2790,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 288($sp) -b result_64 +lw $t0, 260($sp) +lw $a0, 16($t0) +bnez $a0, label_21 la $t0, s_11 sw $t0, 312($sp) li $a0, 20 @@ -2836,7 +2850,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 324($sp) -b result_73 +lw $t0, 296($sp) +lw $a0, 16($t0) +bnez $a0, label_22 la $t0, s_12 sw $t0, 348($sp) li $a0, 20 @@ -2894,7 +2910,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 360($sp) -b result_82 +lw $t0, 332($sp) +lw $a0, 16($t0) +bnez $a0, label_23 move $t0, $sp lw $t1, 500($t0) addi $sp, $sp, -4 @@ -2920,8 +2938,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 368($sp) -la $t0, 0 -sw $t0, 372($sp) move $t0, $sp lw $t1, 372($t0) addi $sp, $sp, -4 @@ -3237,8 +3253,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 488($sp) -la $t0, 0 -sw $t0, 492($sp) move $t0, $sp lw $t1, 492($t0) addi $sp, $sp, -4 @@ -3273,8 +3287,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 0 -sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -3317,7 +3329,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_34 li $a0, 20 li $v0, 9 syscall @@ -3376,7 +3390,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 72($sp) -b result_10 +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_35 li $a0, 20 li $v0, 9 syscall @@ -3435,7 +3451,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 108($sp) -b result_19 +lw $t0, 80($sp) +lw $a0, 16($t0) +bnez $a0, label_36 li $a0, 20 li $v0, 9 syscall @@ -3494,7 +3512,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 144($sp) -b result_28 +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_37 li $a0, 20 li $v0, 9 syscall @@ -3553,7 +3573,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 180($sp) -b result_37 +lw $t0, 152($sp) +lw $a0, 16($t0) +bnez $a0, label_38 li $a0, 20 li $v0, 9 syscall @@ -3612,7 +3634,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 216($sp) -b result_46 +lw $t0, 188($sp) +lw $a0, 16($t0) +bnez $a0, label_39 li $a0, 20 li $v0, 9 syscall @@ -3671,7 +3695,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 252($sp) -b result_55 +lw $t0, 224($sp) +lw $a0, 16($t0) +bnez $a0, label_40 li $a0, 20 li $v0, 9 syscall @@ -3730,7 +3756,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 288($sp) -b result_64 +lw $t0, 260($sp) +lw $a0, 16($t0) +bnez $a0, label_41 li $a0, 20 li $v0, 9 syscall @@ -3789,7 +3817,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 324($sp) -b result_73 +lw $t0, 296($sp) +lw $a0, 16($t0) +bnez $a0, label_42 li $a0, 20 li $v0, 9 syscall @@ -3848,7 +3878,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 360($sp) -b result_82 +lw $t0, 332($sp) +lw $a0, 16($t0) +bnez $a0, label_43 move $t0, $sp lw $t1, 500($t0) addi $sp, $sp, -4 @@ -4238,8 +4270,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -4282,7 +4312,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_54 li $a0, 20 li $v0, 9 syscall @@ -4322,8 +4354,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 80($sp) -la $t0, 0 -sw $t0, 84($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 @@ -4408,7 +4438,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 104($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_55 li $a0, 20 li $v0, 9 syscall @@ -4448,8 +4480,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 144($sp) -la $t0, 0 -sw $t0, 148($sp) move $t0, $sp lw $t1, 148($t0) addi $sp, $sp, -4 @@ -4534,7 +4564,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 168($sp) -b result_27 +lw $t0, 112($sp) +lw $a0, 16($t0) +bnez $a0, label_56 move $t0, $sp lw $t1, 320($t0) addi $sp, $sp, -4 @@ -4860,8 +4892,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 304($sp) -la $t0, 0 -sw $t0, 308($sp) move $t0, $sp lw $t1, 308($t0) addi $sp, $sp, -4 @@ -4896,8 +4926,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -4936,8 +4964,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -4983,7 +5009,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 64($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_61 b label_62 label_61: li $a0, 20 @@ -5197,8 +5225,6 @@ lw $t1, 144($sp) sw $t1, 40($sp) b label_60 label_62: -la $t0, None -sw $t0, 44($sp) lw $t1, 44($sp) sw $t1, 180($sp) lw $t1, 180($sp) @@ -5227,8 +5253,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 0 -sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -5271,7 +5295,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_63 li $a0, 20 li $v0, 9 syscall @@ -5286,8 +5312,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 60($sp) -la $t0, 0 -sw $t0, 64($sp) move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 @@ -5330,7 +5354,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 72($sp) -b result_10 +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_64 la $t0, s_13 sw $t0, 80($sp) li $a0, 20 @@ -5543,8 +5569,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 0 -sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -5587,7 +5611,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_67 li $a0, 20 li $v0, 9 syscall @@ -5879,8 +5905,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 20($sp) -la $t0, 0 -sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -6931,8 +6955,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -6975,7 +6997,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_2 +lw $t0, 12($sp) +lw $a0, 16($t0) +bnez $a0, label_69 li $a0, 20 li $v0, 9 syscall @@ -6990,8 +7014,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 64($sp) -la $t0, 0 -sw $t0, 68($sp) move $t0, $sp lw $t1, 68($t0) addi $sp, $sp, -4 @@ -7034,7 +7056,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 76($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_70 li $a0, 20 li $v0, 9 syscall @@ -7093,7 +7117,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 112($sp) -b result_20 +lw $t0, 84($sp) +lw $a0, 16($t0) +bnez $a0, label_71 li $a0, 20 li $v0, 9 syscall @@ -7184,8 +7210,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 152($sp) -la $t0, 0 -sw $t0, 156($sp) move $t0, $sp lw $t1, 156($t0) addi $sp, $sp, -4 @@ -7216,8 +7240,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 164($sp) -la $t0, 0 -sw $t0, 168($sp) move $t0, $sp lw $t1, 168($t0) addi $sp, $sp, -4 @@ -7725,7 +7747,9 @@ label_83: lw $t0, 1140($sp) lw $t1, 28($t0) sw $t1, 20($sp) -b flag_4 +lw $t0, 20($sp) +lw $a0, 16($t0) +bnez $a0, label_84 b label_85 label_84: la $t0, s_42 @@ -7812,7 +7836,9 @@ lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 sw $a1, 52($sp) -b result_12 +lw $t0, 52($sp) +lw $a0, 16($t0) +bnez $a0, label_86 la $t0, s_43 sw $t0, 68($sp) li $a0, 20 @@ -7989,7 +8015,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 148($sp) -b result_28 +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_88 lw $t0, 1140($sp) lw $t1, 16($t0) sw $t1, 172($sp) @@ -8050,7 +8078,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 188($sp) -b result_38 +lw $t0, 156($sp) +lw $a0, 16($t0) +bnez $a0, label_89 lw $t0, 1140($sp) lw $t1, 16($t0) sw $t1, 212($sp) @@ -8111,7 +8141,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 228($sp) -b result_48 +lw $t0, 196($sp) +lw $a0, 16($t0) +bnez $a0, label_90 lw $t0, 1140($sp) lw $t1, 16($t0) sw $t1, 252($sp) @@ -8172,7 +8204,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 268($sp) -b result_58 +lw $t0, 236($sp) +lw $a0, 16($t0) +bnez $a0, label_91 lw $t0, 1140($sp) lw $t1, 16($t0) sw $t1, 292($sp) @@ -8233,7 +8267,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 308($sp) -b result_68 +lw $t0, 276($sp) +lw $a0, 16($t0) +bnez $a0, label_92 lw $t0, 1140($sp) lw $t1, 16($t0) sw $t1, 332($sp) @@ -8294,7 +8330,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 348($sp) -b result_78 +lw $t0, 316($sp) +lw $a0, 16($t0) +bnez $a0, label_93 lw $t0, 1140($sp) lw $t1, 16($t0) sw $t1, 372($sp) @@ -8355,7 +8393,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 388($sp) -b result_88 +lw $t0, 356($sp) +lw $a0, 16($t0) +bnez $a0, label_94 lw $t0, 1140($sp) lw $t1, 16($t0) sw $t1, 412($sp) @@ -8416,7 +8456,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 428($sp) -b result_98 +lw $t0, 396($sp) +lw $a0, 16($t0) +bnez $a0, label_95 lw $t0, 1140($sp) lw $t1, 16($t0) sw $t1, 452($sp) @@ -8477,7 +8519,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 468($sp) -b result_108 +lw $t0, 436($sp) +lw $a0, 16($t0) +bnez $a0, label_96 lw $t0, 1140($sp) lw $t1, 16($t0) sw $t1, 492($sp) @@ -8538,7 +8582,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 508($sp) -b result_118 +lw $t0, 476($sp) +lw $a0, 16($t0) +bnez $a0, label_97 li $a0, 20 li $v0, 9 syscall @@ -8608,8 +8654,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 536($sp) -la $t0, 0 -sw $t0, 540($sp) move $t0, $sp lw $t1, 540($t0) addi $sp, $sp, -4 @@ -9130,7 +9174,9 @@ lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 sw $a1, 776($sp) -b result_193 +lw $t0, 776($sp) +lw $a0, 16($t0) +bnez $a0, label_102 la $t0, s_42 sw $t0, 800($sp) li $a0, 20 @@ -9751,8 +9797,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 1044($sp) -la $t0, 0 -sw $t0, 1048($sp) move $t0, $sp lw $t1, 1048($t0) addi $sp, $sp, -4 @@ -9968,8 +10012,6 @@ sw $t1, 112($sp) label_114: b label_83 label_85: -la $t0, None -sw $t0, 16($sp) lw $a1, 16($sp) lw $ra, 0($sp) addi $sp, $sp, 1144 diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index 3d60d035..d52387e1 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -699,7 +699,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_1 la $t0, s_4 sw $t0, 60($sp) li $a0, 20 @@ -757,7 +759,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 72($sp) -b result_10 +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_2 la $t0, s_5 sw $t0, 96($sp) li $a0, 20 @@ -815,7 +819,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 108($sp) -b result_19 +lw $t0, 80($sp) +lw $a0, 16($t0) +bnez $a0, label_3 la $t0, s_6 sw $t0, 132($sp) li $a0, 20 @@ -873,7 +879,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 144($sp) -b result_28 +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_4 la $t0, s_7 sw $t0, 168($sp) li $a0, 20 @@ -931,7 +939,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 180($sp) -b result_37 +lw $t0, 152($sp) +lw $a0, 16($t0) +bnez $a0, label_5 la $t0, s_8 sw $t0, 204($sp) li $a0, 20 @@ -989,7 +999,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 216($sp) -b result_46 +lw $t0, 188($sp) +lw $a0, 16($t0) +bnez $a0, label_6 la $t0, s_9 sw $t0, 240($sp) li $a0, 20 @@ -1047,7 +1059,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 252($sp) -b result_55 +lw $t0, 224($sp) +lw $a0, 16($t0) +bnez $a0, label_7 la $t0, s_10 sw $t0, 276($sp) li $a0, 20 @@ -1105,7 +1119,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 288($sp) -b result_64 +lw $t0, 260($sp) +lw $a0, 16($t0) +bnez $a0, label_8 la $t0, s_11 sw $t0, 312($sp) li $a0, 20 @@ -1163,7 +1179,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 324($sp) -b result_73 +lw $t0, 296($sp) +lw $a0, 16($t0) +bnez $a0, label_9 la $t0, s_12 sw $t0, 348($sp) li $a0, 20 @@ -1221,7 +1239,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 360($sp) -b result_82 +lw $t0, 332($sp) +lw $a0, 16($t0) +bnez $a0, label_10 move $t0, $sp lw $t1, 500($t0) addi $sp, $sp, -4 @@ -1247,8 +1267,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 368($sp) -la $t0, 0 -sw $t0, 372($sp) move $t0, $sp lw $t1, 372($t0) addi $sp, $sp, -4 @@ -1564,8 +1582,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 488($sp) -la $t0, 0 -sw $t0, 492($sp) move $t0, $sp lw $t1, 492($t0) addi $sp, $sp, -4 @@ -1600,8 +1616,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 0 -sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -1644,7 +1658,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_21 li $a0, 20 li $v0, 9 syscall @@ -1703,7 +1719,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 72($sp) -b result_10 +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_22 li $a0, 20 li $v0, 9 syscall @@ -1762,7 +1780,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 108($sp) -b result_19 +lw $t0, 80($sp) +lw $a0, 16($t0) +bnez $a0, label_23 li $a0, 20 li $v0, 9 syscall @@ -1821,7 +1841,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 144($sp) -b result_28 +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_24 li $a0, 20 li $v0, 9 syscall @@ -1880,7 +1902,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 180($sp) -b result_37 +lw $t0, 152($sp) +lw $a0, 16($t0) +bnez $a0, label_25 li $a0, 20 li $v0, 9 syscall @@ -1939,7 +1963,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 216($sp) -b result_46 +lw $t0, 188($sp) +lw $a0, 16($t0) +bnez $a0, label_26 li $a0, 20 li $v0, 9 syscall @@ -1998,7 +2024,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 252($sp) -b result_55 +lw $t0, 224($sp) +lw $a0, 16($t0) +bnez $a0, label_27 li $a0, 20 li $v0, 9 syscall @@ -2057,7 +2085,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 288($sp) -b result_64 +lw $t0, 260($sp) +lw $a0, 16($t0) +bnez $a0, label_28 li $a0, 20 li $v0, 9 syscall @@ -2116,7 +2146,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 324($sp) -b result_73 +lw $t0, 296($sp) +lw $a0, 16($t0) +bnez $a0, label_29 li $a0, 20 li $v0, 9 syscall @@ -2175,7 +2207,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 360($sp) -b result_82 +lw $t0, 332($sp) +lw $a0, 16($t0) +bnez $a0, label_30 move $t0, $sp lw $t1, 500($t0) addi $sp, $sp, -4 @@ -2565,8 +2599,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -2609,7 +2641,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_41 li $a0, 20 li $v0, 9 syscall @@ -2649,8 +2683,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 80($sp) -la $t0, 0 -sw $t0, 84($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 @@ -2735,7 +2767,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 104($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_42 li $a0, 20 li $v0, 9 syscall @@ -2775,8 +2809,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 144($sp) -la $t0, 0 -sw $t0, 148($sp) move $t0, $sp lw $t1, 148($t0) addi $sp, $sp, -4 @@ -2861,7 +2893,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 168($sp) -b result_27 +lw $t0, 112($sp) +lw $a0, 16($t0) +bnez $a0, label_43 move $t0, $sp lw $t1, 320($t0) addi $sp, $sp, -4 @@ -3187,8 +3221,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 304($sp) -la $t0, 0 -sw $t0, 308($sp) move $t0, $sp lw $t1, 308($t0) addi $sp, $sp, -4 @@ -3223,8 +3255,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -3263,8 +3293,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -3310,7 +3338,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 64($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_48 b label_49 label_48: li $a0, 20 @@ -3524,8 +3554,6 @@ lw $t1, 144($sp) sw $t1, 40($sp) b label_47 label_49: -la $t0, None -sw $t0, 44($sp) lw $t1, 44($sp) sw $t1, 180($sp) lw $t1, 180($sp) @@ -3554,8 +3582,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 0 -sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -3598,7 +3624,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_50 li $a0, 20 li $v0, 9 syscall @@ -3613,8 +3641,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 60($sp) -la $t0, 0 -sw $t0, 64($sp) move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 @@ -3657,7 +3683,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 72($sp) -b result_10 +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_51 la $t0, s_13 sw $t0, 80($sp) li $a0, 20 @@ -3870,8 +3898,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 0 -sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -3914,7 +3940,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_54 li $a0, 20 li $v0, 9 syscall diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index e2f1ec32..488e02cb 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -1194,8 +1194,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1393,8 +1391,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1614,8 +1610,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1647,8 +1641,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index ce5d179b..80317cb3 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -825,8 +825,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 0 -sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -869,7 +867,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_1 li $a0, 20 li $v0, 9 syscall @@ -1142,7 +1142,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 60($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_3 li $a0, 20 li $v0, 9 syscall @@ -1233,8 +1235,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 104($sp) -la $t0, 0 -sw $t0, 108($sp) move $t0, $sp lw $t1, 108($t0) addi $sp, $sp, -4 @@ -1341,7 +1341,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 92($sp) -b result_14 +lw $t0, 60($sp) +lw $a0, 16($t0) +bnez $a0, label_5 li $a0, 20 li $v0, 9 syscall @@ -1356,8 +1358,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 96($sp) -la $t0, 0 -sw $t0, 100($sp) move $t0, $sp lw $t1, 100($t0) addi $sp, $sp, -4 @@ -1471,7 +1471,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 156($sp) -b result_30 +lw $t0, 124($sp) +lw $a0, 16($t0) +bnez $a0, label_7 li $a0, 20 li $v0, 9 syscall @@ -1486,8 +1488,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 160($sp) -la $t0, 0 -sw $t0, 164($sp) move $t0, $sp lw $t1, 164($t0) addi $sp, $sp, -4 @@ -1634,7 +1634,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 224($sp) -b result_47 +lw $t0, 192($sp) +lw $a0, 16($t0) +bnez $a0, label_9 li $a0, 20 li $v0, 9 syscall @@ -1649,8 +1651,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 228($sp) -la $t0, 0 -sw $t0, 232($sp) move $t0, $sp lw $t1, 232($t0) addi $sp, $sp, -4 @@ -1783,7 +1783,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 268($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_11 la $t0, s_5 sw $t0, 272($sp) li $a0, 20 @@ -1900,7 +1902,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_5 +lw $t0, 24($sp) +lw $a0, 16($t0) +bnez $a0, label_14 b label_15 label_14: move $t0, $sp @@ -1995,8 +1999,6 @@ lw $t1, 56($sp) sw $t1, 4($sp) b label_13 label_15: -la $t0, None -sw $t0, 20($sp) lw $t0, 108($sp) lw $t1, 16($sp) sw $t1, 16($t0) @@ -2149,8 +2151,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 76($sp) -la $t0, 0 -sw $t0, 80($sp) move $t0, $sp lw $t1, 80($t0) addi $sp, $sp, -4 @@ -2193,7 +2193,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 88($sp) -b result_14 +lw $t0, 60($sp) +lw $a0, 16($t0) +bnez $a0, label_17 b label_18 label_17: lw $t0, 148($sp) @@ -2286,8 +2288,6 @@ lw $t1, 108($sp) sw $t1, 52($sp) b label_16 label_18: -la $t0, None -sw $t0, 56($sp) lw $t1, 56($sp) sw $t1, 144($sp) lw $a1, 148($sp) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 6701939e..e40ae778 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -789,7 +789,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 76($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_1 la $t0, s_3 sw $t0, 84($sp) li $a0, 20 @@ -906,8 +908,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -934,8 +934,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) -la $t0, 0 -sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -1052,8 +1050,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -1096,7 +1092,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_3 lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 60($sp) diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index 9b431a80..deacccf2 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -785,8 +785,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) -la $t0, 0 -sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -812,8 +810,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 36($sp) -la $t0, 0 -sw $t0, 40($sp) move $t0, $sp lw $t1, 40($t0) addi $sp, $sp, -4 @@ -840,8 +836,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 84($sp) -la $t0, 0 -sw $t0, 88($sp) move $t0, $sp lw $t1, 88($t0) addi $sp, $sp, -4 @@ -913,7 +907,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 100($sp) -b result_13 +lw $t0, 56($sp) +lw $a0, 16($t0) +bnez $a0, label_2 b label_3 label_2: lw $t0, 16($sp) @@ -1017,8 +1013,6 @@ lw $t1, 48($sp) sw $t1, 16($sp) b label_1 label_3: -la $t0, None -sw $t0, 52($sp) lw $t1, 48($sp) sw $t1, 172($sp) lw $a1, 172($sp) diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index c0e43c18..a533b138 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -881,8 +881,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1026,8 +1024,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1054,8 +1050,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) -la $t0, 0 -sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -1082,8 +1076,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 32($sp) -la $t0, 0 -sw $t0, 36($sp) move $t0, $sp lw $t1, 36($t0) addi $sp, $sp, -4 @@ -1327,8 +1319,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1443,7 +1433,9 @@ lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 8($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_1 move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -1587,8 +1579,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1709,8 +1699,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1892,8 +1880,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -2256,7 +2242,9 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 28($sp) -b result_6 +lw $t0, 28($sp) +lw $a0, 16($t0) +bnez $a0, label_4 b label_5 label_4: move $t0, $sp @@ -2302,8 +2290,6 @@ lw $t1, 140($sp) sw $t1, 20($sp) b label_3 label_5: -la $t0, None -sw $t0, 24($sp) lw $t1, 24($sp) sw $t1, 148($sp) lw $t1, 12($sp) @@ -2395,8 +2381,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 64($sp) -la $t0, 0 -sw $t0, 68($sp) move $t0, $sp lw $t1, 68($t0) addi $sp, $sp, -4 @@ -2468,7 +2452,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 80($sp) -b result_6 +lw $t0, 28($sp) +lw $a0, 16($t0) +bnez $a0, label_7 b label_8 label_7: lw $t0, 140($sp) @@ -2580,8 +2566,6 @@ lw $t1, 128($sp) sw $t1, 132($sp) b label_6 label_8: -la $t0, None -sw $t0, 24($sp) lw $t1, 20($sp) sw $t1, 136($sp) lw $a1, 136($sp) @@ -2649,7 +2633,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_9 la $t0, s_8 sw $t0, 60($sp) li $a0, 20 @@ -2707,7 +2693,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 72($sp) -b result_10 +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_10 la $t0, s_9 sw $t0, 96($sp) li $a0, 20 @@ -2765,7 +2753,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 108($sp) -b result_19 +lw $t0, 80($sp) +lw $a0, 16($t0) +bnez $a0, label_11 la $t0, s_10 sw $t0, 132($sp) li $a0, 20 @@ -2823,7 +2813,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 144($sp) -b result_28 +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_12 la $t0, s_11 sw $t0, 168($sp) li $a0, 20 @@ -2881,7 +2873,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 180($sp) -b result_37 +lw $t0, 152($sp) +lw $a0, 16($t0) +bnez $a0, label_13 la $t0, s_12 sw $t0, 204($sp) li $a0, 20 @@ -2939,7 +2933,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 216($sp) -b result_46 +lw $t0, 188($sp) +lw $a0, 16($t0) +bnez $a0, label_14 la $t0, s_13 sw $t0, 240($sp) li $a0, 20 @@ -2997,7 +2993,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 252($sp) -b result_55 +lw $t0, 224($sp) +lw $a0, 16($t0) +bnez $a0, label_15 la $t0, s_14 sw $t0, 276($sp) li $a0, 20 @@ -3055,7 +3053,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 288($sp) -b result_64 +lw $t0, 260($sp) +lw $a0, 16($t0) +bnez $a0, label_16 la $t0, s_15 sw $t0, 312($sp) li $a0, 20 @@ -3113,7 +3113,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 324($sp) -b result_73 +lw $t0, 296($sp) +lw $a0, 16($t0) +bnez $a0, label_17 la $t0, s_16 sw $t0, 348($sp) li $a0, 20 @@ -3171,7 +3173,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 360($sp) -b result_82 +lw $t0, 332($sp) +lw $a0, 16($t0) +bnez $a0, label_18 move $t0, $sp lw $t1, 500($t0) addi $sp, $sp, -4 @@ -3197,8 +3201,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 368($sp) -la $t0, 0 -sw $t0, 372($sp) move $t0, $sp lw $t1, 372($t0) addi $sp, $sp, -4 @@ -3514,8 +3516,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 488($sp) -la $t0, 0 -sw $t0, 492($sp) move $t0, $sp lw $t1, 492($t0) addi $sp, $sp, -4 @@ -3561,8 +3561,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -3605,7 +3603,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_29 li $a0, 20 li $v0, 9 syscall @@ -3645,8 +3645,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 80($sp) -la $t0, 0 -sw $t0, 84($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 @@ -3731,7 +3729,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 104($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_30 li $a0, 20 li $v0, 9 syscall @@ -3771,8 +3771,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 144($sp) -la $t0, 0 -sw $t0, 148($sp) move $t0, $sp lw $t1, 148($t0) addi $sp, $sp, -4 @@ -3857,7 +3855,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 168($sp) -b result_27 +lw $t0, 112($sp) +lw $a0, 16($t0) +bnez $a0, label_31 move $t0, $sp lw $t1, 320($t0) addi $sp, $sp, -4 @@ -4183,8 +4183,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 304($sp) -la $t0, 0 -sw $t0, 308($sp) move $t0, $sp lw $t1, 308($t0) addi $sp, $sp, -4 @@ -4219,8 +4217,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -4259,8 +4255,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -4306,7 +4300,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 64($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_36 b label_37 label_36: li $a0, 20 @@ -4410,7 +4406,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 120($sp) -b result_22 +lw $t0, 92($sp) +lw $a0, 16($t0) +bnez $a0, label_38 la $t0, s_4 sw $t0, 144($sp) li $a0, 20 @@ -4468,7 +4466,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 156($sp) -b result_31 +lw $t0, 128($sp) +lw $a0, 16($t0) +bnez $a0, label_39 li $a0, 20 li $v0, 9 syscall @@ -4711,7 +4711,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 292($sp) -b result_68 +lw $t0, 276($sp) +lw $a0, 16($t0) +bnez $a0, label_40 la $t0, empty_str sw $t0, 296($sp) li $a0, 20 @@ -5154,8 +5156,6 @@ lw $t1, 88($sp) sw $t1, 524($sp) b label_35 label_37: -la $t0, None -sw $t0, 44($sp) lw $t1, 44($sp) sw $t1, 528($sp) lw $t1, 528($sp) @@ -5237,7 +5237,9 @@ BoolOp.and: addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) -b b1 +lw $t0, 24($sp) +lw $a0, 16($t0) +bnez $a0, label_44 li $a0, 20 li $v0, 9 syscall @@ -5252,8 +5254,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -5278,7 +5278,9 @@ BoolOp.or: addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) -b b1 +lw $t0, 24($sp) +lw $a0, 16($t0) +bnez $a0, label_46 lw $t1, 28($sp) sw $t1, 4($sp) b label_47 @@ -5297,8 +5299,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 797f38ee..48c5180b 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -667,8 +667,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -791,8 +789,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -839,8 +835,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -881,8 +875,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -939,8 +931,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 12($sp) -la $t0, 0 -sw $t0, 16($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 7b0556f3..831daeed 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -741,8 +741,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -769,8 +767,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) -la $t0, 0 -sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -797,8 +793,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 32($sp) -la $t0, 0 -sw $t0, 36($sp) move $t0, $sp lw $t1, 36($t0) addi $sp, $sp, -4 @@ -911,7 +905,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 44($sp) -b result_3 +lw $t0, 16($sp) +lw $a0, 16($t0) +bnez $a0, label_1 li $a0, 20 li $v0, 9 syscall @@ -970,7 +966,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 80($sp) -b result_12 +lw $t0, 52($sp) +lw $a0, 16($t0) +bnez $a0, label_2 li $a0, 20 li $v0, 9 syscall @@ -1029,7 +1027,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 116($sp) -b result_21 +lw $t0, 88($sp) +lw $a0, 16($t0) +bnez $a0, label_3 li $a0, 20 li $v0, 9 syscall @@ -1088,7 +1088,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 152($sp) -b result_30 +lw $t0, 124($sp) +lw $a0, 16($t0) +bnez $a0, label_4 li $a0, 20 li $v0, 9 syscall @@ -1147,7 +1149,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 188($sp) -b result_39 +lw $t0, 160($sp) +lw $a0, 16($t0) +bnez $a0, label_5 li $a0, 20 li $v0, 9 syscall @@ -1206,7 +1210,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 224($sp) -b result_48 +lw $t0, 196($sp) +lw $a0, 16($t0) +bnez $a0, label_6 li $a0, 20 li $v0, 9 syscall @@ -1753,8 +1759,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1844,7 +1848,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 64($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_14 b label_15 label_14: lw $t0, 152($sp) @@ -1963,8 +1969,6 @@ lw $t1, 100($sp) sw $t1, 16($sp) b label_13 label_15: -la $t0, None -sw $t0, 44($sp) la $t0, s_3 sw $t0, 132($sp) li $a0, 20 @@ -2132,7 +2136,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 60($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_16 lw $t0, 96($sp) lw $t1, 28($t0) sw $t1, 68($sp) @@ -2268,8 +2274,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 48($sp) -la $t0, 0 -sw $t0, 52($sp) move $t0, $sp lw $t1, 52($t0) addi $sp, $sp, -4 @@ -2312,7 +2316,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 60($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_18 lw $t0, 104($sp) lw $t1, 20($t0) sw $t1, 84($sp) @@ -2475,7 +2481,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 52($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_20 lw $t0, 96($sp) lw $t1, 20($t0) sw $t1, 76($sp) @@ -2788,7 +2796,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 136($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_22 li $a0, 20 li $v0, 9 syscall @@ -2915,8 +2925,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 0 -sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -2959,7 +2967,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 36($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_24 lw $t0, 172($sp) lw $t1, 20($t0) sw $t1, 92($sp) @@ -3066,7 +3076,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 108($sp) -b result_10 +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_25 li $a0, 20 li $v0, 9 syscall @@ -3261,8 +3273,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 48($sp) -la $t0, 0 -sw $t0, 52($sp) move $t0, $sp lw $t1, 52($t0) addi $sp, $sp, -4 @@ -3305,7 +3315,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 60($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_28 lw $t0, 196($sp) lw $t1, 20($t0) sw $t1, 116($sp) @@ -3412,7 +3424,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 132($sp) -b result_16 +lw $t0, 68($sp) +lw $a0, 16($t0) +bnez $a0, label_29 li $a0, 20 li $v0, 9 syscall @@ -3607,8 +3621,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 48($sp) -la $t0, 0 -sw $t0, 52($sp) move $t0, $sp lw $t1, 52($t0) addi $sp, $sp, -4 @@ -3651,7 +3663,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 60($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_32 li $a0, 20 li $v0, 9 syscall @@ -3874,7 +3888,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 196($sp) -b result_16 +lw $t0, 68($sp) +lw $a0, 16($t0) +bnez $a0, label_33 li $a0, 20 li $v0, 9 syscall @@ -4091,7 +4107,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 52($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_36 li $a0, 20 li $v0, 9 syscall @@ -4314,7 +4332,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 188($sp) -b result_14 +lw $t0, 60($sp) +lw $a0, 16($t0) +bnez $a0, label_37 li $a0, 20 li $v0, 9 syscall @@ -4531,7 +4551,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 52($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_40 lw $t0, 188($sp) lw $t1, 20($t0) sw $t1, 108($sp) @@ -4638,7 +4660,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 124($sp) -b result_14 +lw $t0, 60($sp) +lw $a0, 16($t0) +bnez $a0, label_41 li $a0, 20 li $v0, 9 syscall @@ -4855,7 +4879,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 152($sp) -b result_29 +lw $t0, 120($sp) +lw $a0, 16($t0) +bnez $a0, label_44 li $a0, 20 li $v0, 9 syscall @@ -4870,8 +4896,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 156($sp) -la $t0, 0 -sw $t0, 160($sp) move $t0, $sp lw $t1, 160($t0) addi $sp, $sp, -4 @@ -4985,7 +5009,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 216($sp) -b result_45 +lw $t0, 184($sp) +lw $a0, 16($t0) +bnez $a0, label_46 li $a0, 20 li $v0, 9 syscall @@ -5000,8 +5026,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 220($sp) -la $t0, 0 -sw $t0, 224($sp) move $t0, $sp lw $t1, 224($t0) addi $sp, $sp, -4 @@ -5148,7 +5172,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 284($sp) -b result_62 +lw $t0, 252($sp) +lw $a0, 16($t0) +bnez $a0, label_48 li $a0, 20 li $v0, 9 syscall @@ -5163,8 +5189,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 288($sp) -la $t0, 0 -sw $t0, 292($sp) move $t0, $sp lw $t1, 292($t0) addi $sp, $sp, -4 @@ -5311,7 +5335,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 352($sp) -b result_79 +lw $t0, 320($sp) +lw $a0, 16($t0) +bnez $a0, label_50 li $a0, 20 li $v0, 9 syscall @@ -5326,8 +5352,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 356($sp) -la $t0, 0 -sw $t0, 360($sp) move $t0, $sp lw $t1, 360($t0) addi $sp, $sp, -4 @@ -5474,7 +5498,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 420($sp) -b result_96 +lw $t0, 388($sp) +lw $a0, 16($t0) +bnez $a0, label_52 li $a0, 20 li $v0, 9 syscall @@ -5489,8 +5515,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 424($sp) -la $t0, 0 -sw $t0, 428($sp) move $t0, $sp lw $t1, 428($t0) addi $sp, $sp, -4 @@ -5637,7 +5661,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 488($sp) -b result_113 +lw $t0, 456($sp) +lw $a0, 16($t0) +bnez $a0, label_54 li $a0, 20 li $v0, 9 syscall @@ -5652,8 +5678,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 492($sp) -la $t0, 0 -sw $t0, 496($sp) move $t0, $sp lw $t1, 496($t0) addi $sp, $sp, -4 @@ -5800,7 +5824,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 556($sp) -b result_130 +lw $t0, 524($sp) +lw $a0, 16($t0) +bnez $a0, label_56 li $a0, 20 li $v0, 9 syscall @@ -5815,8 +5841,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 560($sp) -la $t0, 0 -sw $t0, 564($sp) move $t0, $sp lw $t1, 564($t0) addi $sp, $sp, -4 @@ -5963,7 +5987,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 624($sp) -b result_147 +lw $t0, 592($sp) +lw $a0, 16($t0) +bnez $a0, label_58 li $a0, 20 li $v0, 9 syscall @@ -5978,8 +6004,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 628($sp) -la $t0, 0 -sw $t0, 632($sp) move $t0, $sp lw $t1, 632($t0) addi $sp, $sp, -4 @@ -6134,7 +6158,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_60 move $t0, $sp lw $t1, 176($t0) addi $sp, $sp, -4 @@ -6207,7 +6233,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 80($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_61 la $t0, s_6 sw $t0, 84($sp) li $a0, 20 @@ -6309,7 +6337,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 132($sp) -b result_24 +lw $t0, 100($sp) +lw $a0, 16($t0) +bnez $a0, label_63 la $t0, s_6 sw $t0, 136($sp) li $a0, 20 @@ -6424,8 +6454,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -6486,7 +6514,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 52($sp) -b result_8 +lw $t0, 36($sp) +lw $a0, 16($t0) +bnez $a0, label_67 b label_68 label_67: move $t0, $sp @@ -6581,8 +6611,6 @@ lw $t1, 68($sp) sw $t1, 16($sp) b label_66 label_68: -la $t0, None -sw $t0, 32($sp) lw $t0, 120($sp) lw $t1, 28($sp) sw $t1, 28($t0) @@ -7609,7 +7637,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 432($sp) -b result_100 +lw $t0, 404($sp) +lw $a0, 16($t0) +bnez $a0, label_69 li $a0, 20 li $v0, 9 syscall @@ -7668,7 +7698,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 468($sp) -b result_109 +lw $t0, 440($sp) +lw $a0, 16($t0) +bnez $a0, label_70 li $a0, 20 li $v0, 9 syscall @@ -7727,7 +7759,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 504($sp) -b result_118 +lw $t0, 476($sp) +lw $a0, 16($t0) +bnez $a0, label_71 li $a0, 20 li $v0, 9 syscall @@ -7786,7 +7820,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 540($sp) -b result_127 +lw $t0, 512($sp) +lw $a0, 16($t0) +bnez $a0, label_72 li $a0, 20 li $v0, 9 syscall @@ -7845,7 +7881,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 576($sp) -b result_136 +lw $t0, 548($sp) +lw $a0, 16($t0) +bnez $a0, label_73 li $a0, 20 li $v0, 9 syscall @@ -7904,7 +7942,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 612($sp) -b result_145 +lw $t0, 584($sp) +lw $a0, 16($t0) +bnez $a0, label_74 li $a0, 20 li $v0, 9 syscall @@ -7963,7 +8003,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 648($sp) -b result_154 +lw $t0, 620($sp) +lw $a0, 16($t0) +bnez $a0, label_75 li $a0, 20 li $v0, 9 syscall @@ -8022,7 +8064,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 684($sp) -b result_163 +lw $t0, 656($sp) +lw $a0, 16($t0) +bnez $a0, label_76 li $a0, 20 li $v0, 9 syscall @@ -8081,7 +8125,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 720($sp) -b result_172 +lw $t0, 692($sp) +lw $a0, 16($t0) +bnez $a0, label_77 li $a0, 20 li $v0, 9 syscall @@ -8140,7 +8186,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 756($sp) -b result_181 +lw $t0, 728($sp) +lw $a0, 16($t0) +bnez $a0, label_78 li $a0, 20 li $v0, 9 syscall @@ -8199,7 +8247,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 792($sp) -b result_190 +lw $t0, 764($sp) +lw $a0, 16($t0) +bnez $a0, label_79 li $a0, 20 li $v0, 9 syscall @@ -8258,7 +8308,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 828($sp) -b result_199 +lw $t0, 800($sp) +lw $a0, 16($t0) +bnez $a0, label_80 li $a0, 20 li $v0, 9 syscall @@ -8317,7 +8369,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 864($sp) -b result_208 +lw $t0, 836($sp) +lw $a0, 16($t0) +bnez $a0, label_81 li $a0, 20 li $v0, 9 syscall @@ -8376,7 +8430,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 900($sp) -b result_217 +lw $t0, 872($sp) +lw $a0, 16($t0) +bnez $a0, label_82 li $a0, 20 li $v0, 9 syscall @@ -8435,7 +8491,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 936($sp) -b result_226 +lw $t0, 908($sp) +lw $a0, 16($t0) +bnez $a0, label_83 li $a0, 20 li $v0, 9 syscall @@ -8494,7 +8552,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 972($sp) -b result_235 +lw $t0, 944($sp) +lw $a0, 16($t0) +bnez $a0, label_84 li $a0, 20 li $v0, 9 syscall @@ -8553,7 +8613,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 1008($sp) -b result_244 +lw $t0, 980($sp) +lw $a0, 16($t0) +bnez $a0, label_85 li $a0, 20 li $v0, 9 syscall @@ -8612,7 +8674,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 1044($sp) -b result_253 +lw $t0, 1016($sp) +lw $a0, 16($t0) +bnez $a0, label_86 li $a0, 20 li $v0, 9 syscall @@ -8671,7 +8735,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 1080($sp) -b result_262 +lw $t0, 1052($sp) +lw $a0, 16($t0) +bnez $a0, label_87 li $a0, 20 li $v0, 9 syscall @@ -8730,7 +8796,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 1116($sp) -b result_271 +lw $t0, 1088($sp) +lw $a0, 16($t0) +bnez $a0, label_88 li $a0, 20 li $v0, 9 syscall @@ -8789,7 +8857,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 1152($sp) -b result_280 +lw $t0, 1124($sp) +lw $a0, 16($t0) +bnez $a0, label_89 la $t0, s_30 sw $t0, 1156($sp) li $a0, 20 @@ -9686,7 +9756,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 96($sp) -b result_16 +lw $t0, 68($sp) +lw $a0, 16($t0) +bnez $a0, label_111 li $a0, 20 li $v0, 9 syscall @@ -9701,8 +9773,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 100($sp) -la $t0, 0 -sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) addi $sp, $sp, -4 @@ -9730,8 +9800,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 112($sp) -la $t0, 0 -sw $t0, 116($sp) move $t0, $sp lw $t1, 116($t0) addi $sp, $sp, -4 @@ -9943,7 +10011,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 96($sp) -b result_16 +lw $t0, 68($sp) +lw $a0, 16($t0) +bnez $a0, label_113 li $a0, 20 li $v0, 9 syscall @@ -9958,8 +10028,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 100($sp) -la $t0, 0 -sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) addi $sp, $sp, -4 @@ -9987,8 +10055,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 112($sp) -la $t0, 0 -sw $t0, 116($sp) move $t0, $sp lw $t1, 116($t0) addi $sp, $sp, -4 @@ -10122,7 +10188,9 @@ lw $t2, 12($t1) lw $t3, 104($t2) jal $t3 sw $a1, 48($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_116 b label_117 label_116: li $a0, 20 @@ -10139,8 +10207,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 52($sp) -la $t0, 0 -sw $t0, 56($sp) move $t0, $sp lw $t1, 56($t0) addi $sp, $sp, -4 @@ -10217,7 +10283,9 @@ lw $t3, 40($t2) jal $t3 sw $a1, 92($sp) label_118: -b continue_0 +lw $t0, 4($sp) +lw $a0, 16($t0) +bnez $a0, label_119 b label_120 label_119: move $t0, $sp @@ -10231,7 +10299,9 @@ lw $t2, 12($t1) lw $t3, 100($t2) jal $t3 sw $a1, 108($sp) -b result_26 +lw $t0, 108($sp) +lw $a0, 16($t0) +bnez $a0, label_121 li $a0, 20 li $v0, 9 syscall @@ -10246,8 +10316,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 112($sp) -la $t0, 0 -sw $t0, 116($sp) move $t0, $sp lw $t1, 116($t0) addi $sp, $sp, -4 @@ -10296,12 +10364,8 @@ sw $t1, 104($sp) label_122: b label_118 label_120: -la $t0, None -sw $t0, 100($sp) b label_115 label_117: -la $t0, None -sw $t0, 44($sp) lw $t1, 152($sp) sw $t1, 144($sp) lw $t1, 144($sp) diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index ee9e7f93..11213717 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -652,8 +652,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -696,8 +694,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -800,8 +796,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -838,8 +832,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -921,7 +913,9 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 8($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_1 move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 @@ -1327,7 +1321,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 120($sp) -b result_24 +lw $t0, 100($sp) +lw $a0, 16($t0) +bnez $a0, label_4 b label_5 label_4: lw $t0, 144($sp) @@ -1366,8 +1362,6 @@ lw $t1, 132($sp) sw $t1, 16($t0) b label_3 label_5: -la $t0, None -sw $t0, 96($sp) lw $a1, 96($sp) lw $ra, 0($sp) addi $sp, $sp, 148 diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index c4261980..fbeaa4df 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -781,7 +781,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 72($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_1 la $t0, s_3 sw $t0, 80($sp) li $a0, 20 @@ -914,7 +916,9 @@ lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 sw $a1, 112($sp) -b result_27 +lw $t0, 112($sp) +lw $a0, 16($t0) +bnez $a0, label_3 la $t0, s_3 sw $t0, 132($sp) li $a0, 20 @@ -1031,8 +1035,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1059,8 +1061,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) -la $t0, 0 -sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -1177,8 +1177,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -1221,7 +1219,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_5 lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 60($sp) @@ -1709,7 +1709,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 32($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_7 li $a0, 20 li $v0, 9 syscall @@ -1724,8 +1726,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 36($sp) -la $t0, 0 -sw $t0, 40($sp) move $t0, $sp lw $t1, 40($t0) addi $sp, $sp, -4 @@ -1786,7 +1786,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 76($sp) -b result_12 +lw $t0, 52($sp) +lw $a0, 16($t0) +bnez $a0, label_9 li $a0, 20 li $v0, 9 syscall @@ -1801,8 +1803,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 80($sp) -la $t0, 0 -sw $t0, 84($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 @@ -1830,8 +1830,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 92($sp) -la $t0, 0 -sw $t0, 96($sp) move $t0, $sp lw $t1, 96($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 7130ce41..3d495a63 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -627,8 +627,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -673,8 +671,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 0 -sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -717,7 +713,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 40($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_1 move $t0, $sp lw $t1, 284($t0) addi $sp, $sp, -4 @@ -787,7 +785,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 80($sp) -b result_11 +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_2 li $a0, 20 li $v0, 9 syscall @@ -827,8 +827,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 120($sp) -la $t0, 0 -sw $t0, 124($sp) move $t0, $sp lw $t1, 124($t0) addi $sp, $sp, -4 @@ -999,7 +997,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 184($sp) -b result_21 +lw $t0, 88($sp) +lw $a0, 16($t0) +bnez $a0, label_3 li $a0, 20 li $v0, 9 syscall @@ -1014,8 +1014,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 188($sp) -la $t0, 0 -sw $t0, 192($sp) move $t0, $sp lw $t1, 192($t0) addi $sp, $sp, -4 @@ -1175,8 +1173,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 256($sp) -la $t0, 0 -sw $t0, 260($sp) move $t0, $sp lw $t1, 260($t0) addi $sp, $sp, -4 @@ -1207,8 +1203,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 268($sp) -la $t0, 0 -sw $t0, 272($sp) move $t0, $sp lw $t1, 272($t0) addi $sp, $sp, -4 @@ -1350,7 +1344,9 @@ lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 56($sp) -b result_13 +lw $t0, 56($sp) +lw $a0, 16($t0) +bnez $a0, label_7 la $t0, s_4 sw $t0, 68($sp) li $a0, 20 diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 37382676..6cf06449 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -623,8 +623,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -651,8 +649,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) -la $t0, 0 -sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -679,8 +675,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 32($sp) -la $t0, 0 -sw $t0, 36($sp) move $t0, $sp lw $t1, 36($t0) addi $sp, $sp, -4 @@ -707,8 +701,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 44($sp) -la $t0, 0 -sw $t0, 48($sp) move $t0, $sp lw $t1, 48($t0) addi $sp, $sp, -4 @@ -745,8 +737,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 28c4b1c2..505cf1a6 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -699,8 +699,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -961,8 +959,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) -la $t0, 0 -sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -999,8 +995,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1168,7 +1162,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 28($sp) -b result_1 +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_1 li $a0, 24 li $v0, 9 syscall @@ -1449,8 +1445,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1565,8 +1559,6 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 0 -sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1638,8 +1630,6 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 16($sp) -la $t0, 0 -sw $t0, 20($sp) move $t0, $sp lw $t1, 20($t0) addi $sp, $sp, -4 @@ -1685,7 +1675,9 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init sw $a1, 52($sp) -b result_8 +lw $t0, 36($sp) +lw $a0, 16($t0) +bnez $a0, label_4 b label_5 label_4: li $a0, 24 @@ -1793,8 +1785,6 @@ lw $t1, 76($sp) sw $t1, 28($sp) b label_3 label_5: -la $t0, None -sw $t0, 32($sp) lw $t1, 32($sp) sw $t1, 112($sp) lw $t0, 120($sp) From 4df8fca049d50a16b59ee7b06313d675ca713e55 Mon Sep 17 00:00:00 2001 From: hros18 Date: Sun, 13 Dec 2020 18:42:09 -0500 Subject: [PATCH 125/140] io.cl PASSED, constructors fixxed --- .../nodesIL/instruction_node_il.py | 2 +- src/main.py | 14 +- src/semantic/context.py | 15 +- src/visitors/to_mips.py | 132 +- src/visitors/transpilator.py | 55 +- tests/codegen/atoi_test.cil | 1444 +++++++ tests/codegen/book_list_test.cil | 0 tests/codegen/cells_test.cil | 843 ++++ tests/codegen/complex_test.cil | 601 +++ tests/codegen/fib_test.cil | 419 ++ tests/codegen/graph.mips | 151 +- tests/codegen/graph_test.cil | 2003 ++++++++++ tests/codegen/hairyscary.mips | 1087 ------ tests/codegen/io.cil | 483 +++ tests/codegen/io.mips | 30 +- tests/codegen/io_test.cil | 478 +++ tests/codegen/life_test.cil | 3379 +++++++++++++++++ tests/codegen/list_test.cil | 560 +++ tests/codegen/new_complex_test.cil | 719 ++++ tests/codegen/palindrome_test.cil | 517 +++ tests/codegen/primes.mips | 892 ++++- tests/codegen/primes_test.cil | 613 +++ tests/codegen/sort-list_test.cil | 819 ++++ tests/codegen/test.py | 9 +- 24 files changed, 14068 insertions(+), 1197 deletions(-) create mode 100644 tests/codegen/atoi_test.cil create mode 100644 tests/codegen/book_list_test.cil create mode 100644 tests/codegen/cells_test.cil create mode 100644 tests/codegen/complex_test.cil create mode 100644 tests/codegen/graph_test.cil delete mode 100644 tests/codegen/hairyscary.mips create mode 100644 tests/codegen/io.cil create mode 100644 tests/codegen/io_test.cil create mode 100644 tests/codegen/life_test.cil create mode 100644 tests/codegen/list_test.cil create mode 100644 tests/codegen/new_complex_test.cil create mode 100644 tests/codegen/palindrome_test.cil create mode 100644 tests/codegen/primes_test.cil create mode 100644 tests/codegen/sort-list_test.cil diff --git a/src/code_generation/nodesIL/instruction_node_il.py b/src/code_generation/nodesIL/instruction_node_il.py index d6ab96d9..36c00189 100644 --- a/src/code_generation/nodesIL/instruction_node_il.py +++ b/src/code_generation/nodesIL/instruction_node_il.py @@ -163,7 +163,7 @@ def __init__(self, name, idx=None): self.out = name def __str__(self): - return ("ARG {}".format(self.dest)) + return f"ARG {self.dest}" class ReturnNodeIL(InstructionNodeIL): def __init__(self, value, idx=None): diff --git a/src/main.py b/src/main.py index cf28b511..bfd7617b 100644 --- a/src/main.py +++ b/src/main.py @@ -49,7 +49,19 @@ def main(): # cil_code = formatter(cil_ast) # f2.write(f'{cil_code}') # f2.close() - # print('LEN:::::',len(cv.instructions)) + print('LEN:::::',len(cv.instructions)) + i = 0 + for x in cv.instructions: + print('------{}-------'.format(i)) + i += 1 + print(type(x)) + items = vars(x) + for item in items: + # if isinstance(items[item], ArgNodeIL) + print(item, ':', str(items[item])) + if str(item) == 'args': + for x in items[item]: + print('arg: ',x.dest) mips = MIPS() code = mips.visit(cil_ast) diff --git a/src/semantic/context.py b/src/semantic/context.py index 6fcec616..5233de06 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -34,7 +34,7 @@ def __init__(self): self.types['String'].methods['substr'] = Method('substr', ['i', 'l'], [self.types['Int'], self.types['Int']], self.types['String']) self.graph['Object'] = ['IO', 'String', 'Bool', 'Int'] - self.graph['IO'] = [] + self.graph['IO'] = ['Main'] self.graph['String'] = [] self.graph['Int'] = [] self.graph['Bool'] = [] @@ -62,20 +62,23 @@ def get_type(self, name:str): raise ContextError(f'Type "{name}" is not defined.') def set_type_tags(self, node='Object', tag=0): - print('------Set-----') - print('type: ', node) - print('tag: ', tag) + # print('------Set-----') + # print('type: ', node) + # print('tag: ', tag) self.types[node].tag = tag for i,t in enumerate(self.graph[node]): self.set_type_tags(t, tag + i + 1) # print('Done type tags') # self.types['Object'].tag = 0 # self.types['IO'].tag = 1 - # self.types['Main'].tag = 2 + # self.types['Main'].tag = 3 # self.types['String'].tag = 2 # self.types['Bool'].tag = 3 # self.types['Int'].tag = 4 - + # self.types['A'].tag = 5 + # self.types['B'].tag = 6 + # self.types['A'].tag = 5 + # self.types['B'].tag = 6 def set_type_max_tags(self, node='Object'): if not self.graph[node]: self.types[node].max_tag = self.types[node].tag diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 68252131..cf6a4933 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -11,6 +11,7 @@ def __init__(self): self.mips_code = '' self.text = '' self.data = '' + self.count = 0 self.mips_comm_for_operators = { '+' : 'add', '-' : 'sub', @@ -71,6 +72,10 @@ def visit(self, node): @visitor.when(ProgramNodeIL) def visit(self, node): + print('-------------------IL visitor-----------------') + print(self.count) + self.count += 1 + print('ProgramNodeIL') self.types = node.dottypes self.data += 'temp_string: .space 2048\n' @@ -90,6 +95,9 @@ def visit(self, node): @visitor.when(FunctionNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('FunctionNodeIL') self.current_function = node self.var_offset.__setitem__(self.current_function.name, {}) @@ -119,6 +127,9 @@ def visit(self, node): @visitor.when(TypeNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('TypeNodeIL') self.data += f'{node.name}_name: .asciiz "{node.name}"\n' self.data += f'{node.name}_methods:\n' for method in node.methods.values(): @@ -139,7 +150,11 @@ def visit(self, node): @visitor.when(AssignNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('AssignNodeIL') offset = self.var_offset[self.current_function.name][node.dest] + print('-----------TYPE---- ',type(node.source)) if node.source: if isinstance(node.source, int): self.text += f'li $t1, {node.source}\n' @@ -154,6 +169,9 @@ def visit(self, node): @visitor.when(AllocateNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('AllocateNodeIL') amount = len(self.types[node.type].attributes) + 4 self.text += f'li $a0, {amount * 4}\n' self.text += f'li $v0, 9\n' @@ -186,12 +204,15 @@ def visit(self, node): @visitor.when(GetAttribNodeIL) def visit(self, node): - print('----------------::::::') - print('----------------::::::',node.obj) - print('----------------::::::',node.dest) - print('----------------::::::',node.attr) - print('----------------::::::',node.attr_type) - print('----------------::::::',self.attr_offset[node.attr_type][node.attr]) + print(self.count) + self.count += 1 + print('GetAttrNodeIL') + # print('----------------::::::') + # print('----------------::::::',node.obj) + # print('----------------::::::',node.dest) + # print('----------------::::::',node.attr) + # print('----------------::::::',node.attr_type) + # print('----------------::::::',self.attr_offset[node.attr_type][node.attr]) self_offset = self.var_offset[self.current_function.name][node.obj] self.text += f'lw $t0, {self_offset}($sp)\n' #get self address @@ -204,11 +225,14 @@ def visit(self, node): @visitor.when(SetAttribNodeIL) def visit(self, node): - print('----------------::::::') - print('----------------::::::',node.obj) + print(self.count) + self.count += 1 + print('SetAttrNodeIL') + # print('----------------::::::') + # print('----------------::::::',node.obj) # print('----------------::::::',node.dest) - print('----------------::::::',node.attr) - print('----------------::::::',node.attr_type) + # print('----------------::::::',node.attr) + # print('----------------::::::',node.attr_type) # print('----------------::::::',self.attr_offset[node.attr_type][node.attr]) self_offset = self.var_offset[self.current_function.name][node.obj] self.text += f'lw $t0, {self_offset}($sp)\n' #get self address @@ -225,7 +249,16 @@ def visit(self, node): @visitor.when(ArgNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('ArgNodeIL') value_offset = self.var_offset[self.current_function.name][node.dest] # get value from local + # if not self.count: + # self.count = 1 + # else: + # self.count += 1 + # print(self.count) + # print('arg:', node.dest) # print('offset::::::::::: ',value_offset) self.text += f'lw $t1, {value_offset}($t0)\n' self.text += 'addi $sp, $sp, -4\n' @@ -233,11 +266,13 @@ def visit(self, node): @visitor.when(DynamicCallNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('DynamicCallNodeIL') self.text += 'move $t0, $sp\n' for arg in node.args: self.visit(arg) - value_offset = self.var_offset[self.current_function.name][node.obj] self.text += f'lw $t1, {value_offset}($t0)\n' # get instance from local self.text += 'la $t0, void\n' @@ -256,11 +291,17 @@ def visit(self, node): @visitor.when(StaticCallNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('StaticCallNodeIL') self.text += 'move $t0, $sp\n' - + # print('--------CALL------') + # print(node.function) + # self.count = 0 for arg in node.args: self.visit(arg) + # print(self.count) self.text += f'jal {node.function}\n' result_offset = self.var_offset[self.current_function.name][node.dest] @@ -268,6 +309,9 @@ def visit(self, node): @visitor.when(ReturnNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('ReturnNodeIL') if node.value: offset = self.var_offset[self.current_function.name][node.value] self.text += f'lw $a1, {offset}($sp)\n' @@ -276,6 +320,9 @@ def visit(self, node): @visitor.when(CaseNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('CaseNodeIL') offset = self.var_offset[self.current_function.name][node.local_expr] self.text += f'lw $t0, {offset}($sp)\n' self.text += f'lw $t1, 0($t0)\n' @@ -285,12 +332,18 @@ def visit(self, node): @visitor.when(OptionNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('OptionNodeIL') self.text += f'blt $t1 {node.tag} {node.next_label}\n' self.text += f'bgt $t1 {node.max_tag} {node.next_label}\n' @visitor.when(BinaryNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('BinaryNodeIL ' + node.op) mips_comm = self.mips_comm_for_operators[node.op] left_offset = self.var_offset[self.current_function.name][node.left] right_offset = self.var_offset[self.current_function.name][node.right] @@ -304,6 +357,9 @@ def visit(self, node): @visitor.when(UnaryNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('UnaryNodeIL' + node.op) expr_offset = self.var_offset[self.current_function.name][node.expr] self.text += f'lw $t1, {expr_offset}($sp)\n' if node.op == 'not': @@ -316,6 +372,9 @@ def visit(self, node): @visitor.when(GotoIfNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('GotoIfNodeIL') predicate_offset = self.var_offset[self.current_function.name][node.cond] self.text += f'lw $t0, {predicate_offset}($sp)\n' self.text += f'lw $a0, 16($t0)\n' #get value attribute @@ -323,14 +382,21 @@ def visit(self, node): @visitor.when(GotoNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('GotoNodeIL') self.text += f'b {node.label}\n' @visitor.when(LabelNodeIL) def visit(self, node): + print('LabelNodeIL') self.text += f'{node.label}:\n' @visitor.when(OutIntNodeIL) - def visit(self, node): + def visit(self, node): + print(self.count) + self.count += 1 + print('OutIntNodeIL') if isinstance(node.value, int): self.text += f'li $v0 , 1\n' self.text += f'li $a0 , {node.value}\n' @@ -343,6 +409,9 @@ def visit(self, node): @visitor.when(OutStringNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('OutStringNodeIL') var_offset = self.var_offset[self.current_function.name][node.value] self.text += f'lw $a0, {var_offset}($sp)\n' self.text += f'li $v0, 4\n' @@ -350,6 +419,9 @@ def visit(self, node): @visitor.when(ReadIntNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('ReadIntNodeIL') read_offset = self.var_offset[self.current_function.name][node.dest] self.text += f'li $v0, 5\n' self.text += f'syscall\n' @@ -357,6 +429,9 @@ def visit(self, node): @visitor.when(ReadStringNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('ReadStringNodeIL') read_offset = self.var_offset[self.current_function.name][node.dest] self.text += f'la $a0, temp_string\n' self.text += f'li $a1, 2048\n' @@ -389,10 +464,17 @@ def visit(self, node): @visitor.when(LoadNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('LoadNodeIL') if node.msg: self.text += f'la $t0, {node.msg}\n' offset = self.var_offset[self.current_function.name][node.dest] self.text += f'sw $t0, {offset}($sp)\n' + # else: + # self.text += f'li $t0, {node.msg}\n' + # offset = self.var_offset[self.current_function.name][node.dest] + # self.text += f'sw $t0, {offset}($sp)\n' # @visitor.when(CIL_AST.LoadInt) # def visit(self, node): @@ -402,11 +484,17 @@ def visit(self, node): @visitor.when(HaltNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('HaltNodeIL') self.text += 'li $v0, 10\n' self.text += 'syscall\n' @visitor.when(TypeOfNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('TypeOfNodeIL') obj_offset = self.var_offset[self.current_function.name][node.obj] self.text += f'lw $t0, {obj_offset}($sp)\n' #get obj address from local self.text += 'lw $t1, 4($t0)\n' # get type name from the sec pos in obj layout @@ -415,6 +503,9 @@ def visit(self, node): @visitor.when(IsVoidNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('IsVoidNodeIL') self.text += 'la $t0, void\n' offset = self.var_offset[self.current_function.name][node.expre_value] self.text += f'lw $t1, {offset}($sp)\n' @@ -424,6 +515,9 @@ def visit(self, node): @visitor.when(CopyNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('CopyNodeIL') # offset = self.var_offset[self.current_function.name][self.current_function.params[0].name] self_offset = self.var_offset[self.current_function.name][node.source] self.text += f'lw $t0, {self_offset}($sp)\n' # get self address @@ -462,6 +556,9 @@ def visit(self, node): @visitor.when(LengthNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('LengthNodeIL') offset = self.var_offset[self.current_function.name][node.arg] self.text += f'lw $t0, {offset}($sp)\n' self.text += f'lw $t0, 16($t0)\n' @@ -480,6 +577,9 @@ def visit(self, node): @visitor.when(ConcatNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('ConcatNodeIL') offset_arg1 = self.var_offset[self.current_function.name][node.arg1] offset_len1 = self.var_offset[self.current_function.name][node.len1] @@ -527,6 +627,9 @@ def visit(self, node): @visitor.when(SubstringNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('SubstringNodeIL') offset_idx = self.var_offset[self.current_function.name][node.begin] offset_len = self.var_offset[self.current_function.name][node.end] offset_str = self.var_offset[self.current_function.name][node.word] @@ -577,6 +680,9 @@ def visit(self, node): @visitor.when(StringEqualsNodeIL) def visit(self, node): + print(self.count) + self.count += 1 + print('StringEqualsNodeIL') offset_arg1 = self.var_offset[self.current_function.name][node.s1] offset_arg2 = self.var_offset[self.current_function.name][node.s2] diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 87d907c7..1bece99e 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -431,10 +431,15 @@ def visit(self, node, scope, sscope): #Init parents recursively result = self.define_internal_local(scope=scope, name = "result") # self.register_instruction(ArgNodeIL('instance')) + # print('ID: ', node.id) + # print('Parent: ', node.parent) self.register_instruction(StaticCallNodeIL(result, f'{node.parent}_init',[ArgNodeIL('self')], node.parent)) self.register_instruction(ReturnNodeIL(None)) - + print('Class: ', self.current_type.name) for attr in attr_declarations: + print('Attr') + print('id: ', attr.id) + print('type:', attr.type) self.visit(attr, scope, sscope) #--------------------------------------------------------------- self.current_function = None @@ -447,7 +452,7 @@ def visit(self, node, scope, sscope): @visitor.when(FuncDeclarationNode) def visit(self, node, scope, sscope): fscope = sscope.func_scopes[node.id] - + # print('func:::: ', node.id) self.current_method = self.current_type.get_method(node.id) self.dottypes[self.current_type.name].methods[node.id] = f'{self.current_type.name}.{node.id}' cil_method_name = self.to_function_name(node.id, self.current_type.name) @@ -464,28 +469,35 @@ def visit(self, node, scope, sscope): @visitor.when(AttrDeclarationNode) def visit(self, node, scope, sscope): - ascope = sscope.attr_scopes[node.id] - instance = None - - if node.type in ['Int', 'Bool']: - instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag, instance)) - value = self.define_internal_local(scope=scope, name="value") - self.register_instruction(LoadNodeIL(0,value)) - result_init = self.define_internal_local(scope=scope, name="result_init") - self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ ArgNodeIL(value), ArgNodeIL(instance)], node.type)) - elif node.type == 'String': - instance = self.define_internal_local(scope=scope, name="instance") - self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag ,instance)) - value = self.define_internal_local(scope=scope, name="value") - self.register_instruction(LoadNodeIL('empty_str',value)) - result_init = self.define_internal_local(scope=scope, name="result_init") - self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ArgNodeIL(value),ArgNodeIL(instance)], node.type)) - self.register_instruction(SetAttribNodeIL('self', node.id,instance, self.current_type.name)) + if not node.expr: + ascope = sscope.attr_scopes[node.id] + instance = None + # print('attr_type:::::::::: ', node.type) + if node.type in ['Int', 'Bool']: + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag, instance)) + value = self.define_internal_local(scope=scope, name="value") + self.register_instruction(LoadNodeIL(0,value)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ ArgNodeIL(value), ArgNodeIL(instance)], node.type)) + elif node.type == 'String': + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag ,instance)) + value = self.define_internal_local(scope=scope, name="value") + self.register_instruction(LoadNodeIL('empty_str',value)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ArgNodeIL(value),ArgNodeIL(instance)], node.type)) + + self.register_instruction(SetAttribNodeIL('self', node.id,instance, self.current_type.name)) + else: + print('attr_type::::IN_______EXPRRRRRR:::::: ', node.type) + expr = self.visit(node.expr, scope, sscope) + self.register_instruction(SetAttribNodeIL('self', node.id, expr, self.current_type.name)) @visitor.when(VarDeclarationNode) def visit(self, node, scope, sscope): + print('var_decl: ',node.id) expr = self.visit(node.expr, scope, sscope) self.register_instruction(SetAttribNodeIL('self', node.name, expr, self.current_type.name)) @@ -702,7 +714,8 @@ def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope=scope, name="result") result_init = self.define_internal_local(scope=scope, name="init") - print(result_init) + # print('ID:', node.id) + print('type:', node.type) if node.type == "SELF_TYPE": # get_type_local = self.define_internal_local(scope = scope, name = "type_name") diff --git a/tests/codegen/atoi_test.cil b/tests/codegen/atoi_test.cil new file mode 100644 index 00000000..c563cda8 --- /dev/null +++ b/tests/codegen/atoi_test.cil @@ -0,0 +1,1444 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type A2I { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method c2i : A2I.c2i + method i2c : A2I.i2c + method a2i : A2I.a2i + method a2i_aux : A2I.a2i_aux + method i2a : A2I.i2a + method i2a_aux : A2I.i2a_aux +} +type Main { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: 0 +s_4: 1 +s_5: 2 +s_6: 3 +s_7: 4 +s_8: 5 +s_9: 6 +s_10: 7 +s_11: 8 +s_12: 9 +s_13: - +s_14: + +s_15: 678987 +s_16: == +s_17: \n + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function A2I_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL Object_init + + RETURN +} +function A2I.c2i { + PARAM self + PARAM char + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL internal_5 + LOCAL instance_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL op_11 + LOCAL left_12 + LOCAL right_13 + LOCAL internal_14 + LOCAL instance_15 + LOCAL result_init_16 + LOCAL result_init_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL internal_23 + LOCAL instance_24 + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL result_27 + LOCAL result_28 + LOCAL op_29 + LOCAL left_30 + LOCAL right_31 + LOCAL internal_32 + LOCAL instance_33 + LOCAL result_init_34 + LOCAL result_init_35 + LOCAL result_36 + LOCAL result_37 + LOCAL op_38 + LOCAL left_39 + LOCAL right_40 + LOCAL internal_41 + LOCAL instance_42 + LOCAL result_init_43 + LOCAL result_init_44 + LOCAL result_45 + LOCAL result_46 + LOCAL op_47 + LOCAL left_48 + LOCAL right_49 + LOCAL internal_50 + LOCAL instance_51 + LOCAL result_init_52 + LOCAL result_init_53 + LOCAL result_54 + LOCAL result_55 + LOCAL op_56 + LOCAL left_57 + LOCAL right_58 + LOCAL internal_59 + LOCAL instance_60 + LOCAL result_init_61 + LOCAL result_init_62 + LOCAL result_63 + LOCAL result_64 + LOCAL op_65 + LOCAL left_66 + LOCAL right_67 + LOCAL internal_68 + LOCAL instance_69 + LOCAL result_init_70 + LOCAL result_init_71 + LOCAL result_72 + LOCAL result_73 + LOCAL op_74 + LOCAL left_75 + LOCAL right_76 + LOCAL internal_77 + LOCAL instance_78 + LOCAL result_init_79 + LOCAL result_init_80 + LOCAL result_81 + LOCAL result_82 + LOCAL op_83 + LOCAL left_84 + LOCAL right_85 + LOCAL internal_86 + LOCAL instance_87 + LOCAL result_init_88 + LOCAL result_init_89 + LOCAL result_90 + LOCAL instance_91 + LOCAL value_92 + LOCAL result_init_93 + LOCAL instance_94 + LOCAL value_95 + LOCAL result_init_96 + LOCAL instance_97 + LOCAL value_98 + LOCAL result_init_99 + LOCAL instance_100 + LOCAL value_101 + LOCAL result_init_102 + LOCAL instance_103 + LOCAL value_104 + LOCAL result_init_105 + LOCAL instance_106 + LOCAL value_107 + LOCAL result_init_108 + LOCAL instance_109 + LOCAL value_110 + LOCAL result_init_111 + LOCAL instance_112 + LOCAL value_113 + LOCAL result_init_114 + LOCAL instance_115 + LOCAL value_116 + LOCAL result_init_117 + LOCAL instance_118 + LOCAL value_119 + LOCAL result_init_120 + LOCAL instance_121 + LOCAL value_122 + LOCAL result_init_123 + + internal_5 = LOAD s_3 + instance_6 = ALLOCATE String + result_init_7 = CALL String_init + op_2 = CALL String_equals + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_1 + internal_14 = LOAD s_4 + instance_15 = ALLOCATE String + result_init_16 = CALL String_init + op_11 = CALL String_equals + result_10 = ALLOCATE Bool + result_init_17 = CALL Bool_init + IF result_10 GOTO label_2 + internal_23 = LOAD s_5 + instance_24 = ALLOCATE String + result_init_25 = CALL String_init + op_20 = CALL String_equals + result_19 = ALLOCATE Bool + result_init_26 = CALL Bool_init + IF result_19 GOTO label_3 + internal_32 = LOAD s_6 + instance_33 = ALLOCATE String + result_init_34 = CALL String_init + op_29 = CALL String_equals + result_28 = ALLOCATE Bool + result_init_35 = CALL Bool_init + IF result_28 GOTO label_4 + internal_41 = LOAD s_7 + instance_42 = ALLOCATE String + result_init_43 = CALL String_init + op_38 = CALL String_equals + result_37 = ALLOCATE Bool + result_init_44 = CALL Bool_init + IF result_37 GOTO label_5 + internal_50 = LOAD s_8 + instance_51 = ALLOCATE String + result_init_52 = CALL String_init + op_47 = CALL String_equals + result_46 = ALLOCATE Bool + result_init_53 = CALL Bool_init + IF result_46 GOTO label_6 + internal_59 = LOAD s_9 + instance_60 = ALLOCATE String + result_init_61 = CALL String_init + op_56 = CALL String_equals + result_55 = ALLOCATE Bool + result_init_62 = CALL Bool_init + IF result_55 GOTO label_7 + internal_68 = LOAD s_10 + instance_69 = ALLOCATE String + result_init_70 = CALL String_init + op_65 = CALL String_equals + result_64 = ALLOCATE Bool + result_init_71 = CALL Bool_init + IF result_64 GOTO label_8 + internal_77 = LOAD s_11 + instance_78 = ALLOCATE String + result_init_79 = CALL String_init + op_74 = CALL String_equals + result_73 = ALLOCATE Bool + result_init_80 = CALL Bool_init + IF result_73 GOTO label_9 + internal_86 = LOAD s_12 + instance_87 = ALLOCATE String + result_init_88 = CALL String_init + op_83 = CALL String_equals + result_82 = ALLOCATE Bool + result_init_89 = CALL Bool_init + IF result_82 GOTO label_10 + result_90 = VCALL A2I abort + instance_91 = ALLOCATE Int + value_92 = LOAD 0 + result_init_93 = CALL Int_init + result_81 = instance_91 + GOTO label_11 + LABEL label_10 + instance_94 = ALLOCATE Int + value_95 = LOAD 9 + result_init_96 = CALL Int_init + result_81 = instance_94 + LABEL label_11 + result_72 = result_81 + GOTO label_12 + LABEL label_9 + instance_97 = ALLOCATE Int + value_98 = LOAD 8 + result_init_99 = CALL Int_init + result_72 = instance_97 + LABEL label_12 + result_63 = result_72 + GOTO label_13 + LABEL label_8 + instance_100 = ALLOCATE Int + value_101 = LOAD 7 + result_init_102 = CALL Int_init + result_63 = instance_100 + LABEL label_13 + result_54 = result_63 + GOTO label_14 + LABEL label_7 + instance_103 = ALLOCATE Int + value_104 = LOAD 6 + result_init_105 = CALL Int_init + result_54 = instance_103 + LABEL label_14 + result_45 = result_54 + GOTO label_15 + LABEL label_6 + instance_106 = ALLOCATE Int + value_107 = LOAD 5 + result_init_108 = CALL Int_init + result_45 = instance_106 + LABEL label_15 + result_36 = result_45 + GOTO label_16 + LABEL label_5 + instance_109 = ALLOCATE Int + value_110 = LOAD 4 + result_init_111 = CALL Int_init + result_36 = instance_109 + LABEL label_16 + result_27 = result_36 + GOTO label_17 + LABEL label_4 + instance_112 = ALLOCATE Int + value_113 = LOAD 3 + result_init_114 = CALL Int_init + result_27 = instance_112 + LABEL label_17 + result_18 = result_27 + GOTO label_18 + LABEL label_3 + instance_115 = ALLOCATE Int + value_116 = LOAD 2 + result_init_117 = CALL Int_init + result_18 = instance_115 + LABEL label_18 + result_9 = result_18 + GOTO label_19 + LABEL label_2 + instance_118 = ALLOCATE Int + value_119 = LOAD 1 + result_init_120 = CALL Int_init + result_9 = instance_118 + LABEL label_19 + result_0 = result_9 + GOTO label_20 + LABEL label_1 + instance_121 = ALLOCATE Int + value_122 = LOAD 0 + result_init_123 = CALL Int_init + result_0 = instance_121 + LABEL label_20 + + RETURN result_0 +} +function A2I.i2c { + PARAM self + PARAM i + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL instance_5 + LOCAL value_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL op_11 + LOCAL left_12 + LOCAL right_13 + LOCAL instance_14 + LOCAL value_15 + LOCAL result_init_16 + LOCAL result_init_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL instance_23 + LOCAL value_24 + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL result_27 + LOCAL result_28 + LOCAL op_29 + LOCAL left_30 + LOCAL right_31 + LOCAL instance_32 + LOCAL value_33 + LOCAL result_init_34 + LOCAL result_init_35 + LOCAL result_36 + LOCAL result_37 + LOCAL op_38 + LOCAL left_39 + LOCAL right_40 + LOCAL instance_41 + LOCAL value_42 + LOCAL result_init_43 + LOCAL result_init_44 + LOCAL result_45 + LOCAL result_46 + LOCAL op_47 + LOCAL left_48 + LOCAL right_49 + LOCAL instance_50 + LOCAL value_51 + LOCAL result_init_52 + LOCAL result_init_53 + LOCAL result_54 + LOCAL result_55 + LOCAL op_56 + LOCAL left_57 + LOCAL right_58 + LOCAL instance_59 + LOCAL value_60 + LOCAL result_init_61 + LOCAL result_init_62 + LOCAL result_63 + LOCAL result_64 + LOCAL op_65 + LOCAL left_66 + LOCAL right_67 + LOCAL instance_68 + LOCAL value_69 + LOCAL result_init_70 + LOCAL result_init_71 + LOCAL result_72 + LOCAL result_73 + LOCAL op_74 + LOCAL left_75 + LOCAL right_76 + LOCAL instance_77 + LOCAL value_78 + LOCAL result_init_79 + LOCAL result_init_80 + LOCAL result_81 + LOCAL result_82 + LOCAL op_83 + LOCAL left_84 + LOCAL right_85 + LOCAL instance_86 + LOCAL value_87 + LOCAL result_init_88 + LOCAL result_init_89 + LOCAL result_90 + LOCAL internal_91 + LOCAL instance_92 + LOCAL result_init_93 + LOCAL internal_94 + LOCAL instance_95 + LOCAL result_init_96 + LOCAL internal_97 + LOCAL instance_98 + LOCAL result_init_99 + LOCAL internal_100 + LOCAL instance_101 + LOCAL result_init_102 + LOCAL internal_103 + LOCAL instance_104 + LOCAL result_init_105 + LOCAL internal_106 + LOCAL instance_107 + LOCAL result_init_108 + LOCAL internal_109 + LOCAL instance_110 + LOCAL result_init_111 + LOCAL internal_112 + LOCAL instance_113 + LOCAL result_init_114 + LOCAL internal_115 + LOCAL instance_116 + LOCAL result_init_117 + LOCAL internal_118 + LOCAL instance_119 + LOCAL result_init_120 + LOCAL internal_121 + LOCAL instance_122 + LOCAL result_init_123 + + instance_5 = ALLOCATE Int + value_6 = LOAD 0 + result_init_7 = CALL Int_init + left_3 = GetAttr i value + right_4 = GetAttr instance_5 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_21 + instance_14 = ALLOCATE Int + value_15 = LOAD 1 + result_init_16 = CALL Int_init + left_12 = GetAttr i value + right_13 = GetAttr instance_14 value + op_11 = left_12 = right_13 + result_10 = ALLOCATE Bool + result_init_17 = CALL Bool_init + IF result_10 GOTO label_22 + instance_23 = ALLOCATE Int + value_24 = LOAD 2 + result_init_25 = CALL Int_init + left_21 = GetAttr i value + right_22 = GetAttr instance_23 value + op_20 = left_21 = right_22 + result_19 = ALLOCATE Bool + result_init_26 = CALL Bool_init + IF result_19 GOTO label_23 + instance_32 = ALLOCATE Int + value_33 = LOAD 3 + result_init_34 = CALL Int_init + left_30 = GetAttr i value + right_31 = GetAttr instance_32 value + op_29 = left_30 = right_31 + result_28 = ALLOCATE Bool + result_init_35 = CALL Bool_init + IF result_28 GOTO label_24 + instance_41 = ALLOCATE Int + value_42 = LOAD 4 + result_init_43 = CALL Int_init + left_39 = GetAttr i value + right_40 = GetAttr instance_41 value + op_38 = left_39 = right_40 + result_37 = ALLOCATE Bool + result_init_44 = CALL Bool_init + IF result_37 GOTO label_25 + instance_50 = ALLOCATE Int + value_51 = LOAD 5 + result_init_52 = CALL Int_init + left_48 = GetAttr i value + right_49 = GetAttr instance_50 value + op_47 = left_48 = right_49 + result_46 = ALLOCATE Bool + result_init_53 = CALL Bool_init + IF result_46 GOTO label_26 + instance_59 = ALLOCATE Int + value_60 = LOAD 6 + result_init_61 = CALL Int_init + left_57 = GetAttr i value + right_58 = GetAttr instance_59 value + op_56 = left_57 = right_58 + result_55 = ALLOCATE Bool + result_init_62 = CALL Bool_init + IF result_55 GOTO label_27 + instance_68 = ALLOCATE Int + value_69 = LOAD 7 + result_init_70 = CALL Int_init + left_66 = GetAttr i value + right_67 = GetAttr instance_68 value + op_65 = left_66 = right_67 + result_64 = ALLOCATE Bool + result_init_71 = CALL Bool_init + IF result_64 GOTO label_28 + instance_77 = ALLOCATE Int + value_78 = LOAD 8 + result_init_79 = CALL Int_init + left_75 = GetAttr i value + right_76 = GetAttr instance_77 value + op_74 = left_75 = right_76 + result_73 = ALLOCATE Bool + result_init_80 = CALL Bool_init + IF result_73 GOTO label_29 + instance_86 = ALLOCATE Int + value_87 = LOAD 9 + result_init_88 = CALL Int_init + left_84 = GetAttr i value + right_85 = GetAttr instance_86 value + op_83 = left_84 = right_85 + result_82 = ALLOCATE Bool + result_init_89 = CALL Bool_init + IF result_82 GOTO label_30 + result_90 = VCALL A2I abort + internal_91 = LOAD empty_str + instance_92 = ALLOCATE String + result_init_93 = CALL String_init + result_81 = instance_92 + GOTO label_31 + LABEL label_30 + internal_94 = LOAD s_12 + instance_95 = ALLOCATE String + result_init_96 = CALL String_init + result_81 = instance_95 + LABEL label_31 + result_72 = result_81 + GOTO label_32 + LABEL label_29 + internal_97 = LOAD s_11 + instance_98 = ALLOCATE String + result_init_99 = CALL String_init + result_72 = instance_98 + LABEL label_32 + result_63 = result_72 + GOTO label_33 + LABEL label_28 + internal_100 = LOAD s_10 + instance_101 = ALLOCATE String + result_init_102 = CALL String_init + result_63 = instance_101 + LABEL label_33 + result_54 = result_63 + GOTO label_34 + LABEL label_27 + internal_103 = LOAD s_9 + instance_104 = ALLOCATE String + result_init_105 = CALL String_init + result_54 = instance_104 + LABEL label_34 + result_45 = result_54 + GOTO label_35 + LABEL label_26 + internal_106 = LOAD s_8 + instance_107 = ALLOCATE String + result_init_108 = CALL String_init + result_45 = instance_107 + LABEL label_35 + result_36 = result_45 + GOTO label_36 + LABEL label_25 + internal_109 = LOAD s_7 + instance_110 = ALLOCATE String + result_init_111 = CALL String_init + result_36 = instance_110 + LABEL label_36 + result_27 = result_36 + GOTO label_37 + LABEL label_24 + internal_112 = LOAD s_6 + instance_113 = ALLOCATE String + result_init_114 = CALL String_init + result_27 = instance_113 + LABEL label_37 + result_18 = result_27 + GOTO label_38 + LABEL label_23 + internal_115 = LOAD s_5 + instance_116 = ALLOCATE String + result_init_117 = CALL String_init + result_18 = instance_116 + LABEL label_38 + result_9 = result_18 + GOTO label_39 + LABEL label_22 + internal_118 = LOAD s_4 + instance_119 = ALLOCATE String + result_init_120 = CALL String_init + result_9 = instance_119 + LABEL label_39 + result_0 = result_9 + GOTO label_40 + LABEL label_21 + internal_121 = LOAD s_3 + instance_122 = ALLOCATE String + result_init_123 = CALL String_init + result_0 = instance_122 + LABEL label_40 + + RETURN result_0 +} +function A2I.a2i { + PARAM self + PARAM s + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL instance_19 + LOCAL value_20 + LOCAL result_init_21 + LOCAL internal_22 + LOCAL instance_23 + LOCAL result_init_24 + LOCAL result_init_25 + LOCAL result_26 + LOCAL result_27 + LOCAL op_28 + LOCAL left_29 + LOCAL right_30 + LOCAL result_31 + LOCAL instance_32 + LOCAL value_33 + LOCAL result_init_34 + LOCAL instance_35 + LOCAL value_36 + LOCAL result_init_37 + LOCAL internal_38 + LOCAL instance_39 + LOCAL result_init_40 + LOCAL result_init_41 + LOCAL result_42 + LOCAL result_43 + LOCAL result_44 + LOCAL result_45 + LOCAL op_46 + LOCAL left_47 + LOCAL right_48 + LOCAL result_49 + LOCAL instance_50 + LOCAL value_51 + LOCAL result_init_52 + LOCAL result_init_53 + LOCAL instance_54 + LOCAL value_55 + LOCAL result_init_56 + LOCAL result_57 + LOCAL op_58 + LOCAL internal_59 + LOCAL result_60 + LOCAL result_61 + LOCAL result_62 + LOCAL op_63 + LOCAL left_64 + LOCAL right_65 + LOCAL result_66 + LOCAL instance_67 + LOCAL value_68 + LOCAL result_init_69 + LOCAL result_init_70 + LOCAL instance_71 + LOCAL value_72 + LOCAL result_init_73 + LOCAL result_init_74 + LOCAL instance_75 + LOCAL value_76 + LOCAL result_init_77 + + result_5 = VCALL String length + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_1 GOTO label_41 + instance_16 = ALLOCATE Int + value_17 = LOAD 1 + result_init_18 = CALL Int_init + instance_19 = ALLOCATE Int + value_20 = LOAD 0 + result_init_21 = CALL Int_init + result_15 = VCALL String substr + internal_22 = LOAD s_13 + instance_23 = ALLOCATE String + result_init_24 = CALL String_init + left_13 = GetAttr result_15 value + right_14 = GetAttr instance_23 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_25 = CALL Bool_init + IF result_11 GOTO label_42 + instance_32 = ALLOCATE Int + value_33 = LOAD 1 + result_init_34 = CALL Int_init + instance_35 = ALLOCATE Int + value_36 = LOAD 0 + result_init_37 = CALL Int_init + result_31 = VCALL String substr + internal_38 = LOAD s_14 + instance_39 = ALLOCATE String + result_init_40 = CALL String_init + left_29 = GetAttr result_31 value + right_30 = GetAttr instance_39 value + op_28 = left_29 = right_30 + result_27 = ALLOCATE Bool + result_init_41 = CALL Bool_init + IF result_27 GOTO label_43 + result_42 = VCALL A2I a2i_aux + result_26 = result_42 + GOTO label_44 + LABEL label_43 + result_49 = VCALL String length + instance_50 = ALLOCATE Int + value_51 = LOAD 1 + result_init_52 = CALL Int_init + left_47 = GetAttr result_49 value + right_48 = GetAttr instance_50 value + op_46 = left_47 - right_48 + result_45 = ALLOCATE Int + result_init_53 = CALL Int_init + instance_54 = ALLOCATE Int + value_55 = LOAD 1 + result_init_56 = CALL Int_init + result_44 = VCALL String substr + result_43 = VCALL A2I a2i_aux + result_26 = result_43 + LABEL label_44 + result_10 = result_26 + GOTO label_45 + LABEL label_42 + result_66 = VCALL String length + instance_67 = ALLOCATE Int + value_68 = LOAD 1 + result_init_69 = CALL Int_init + left_64 = GetAttr result_66 value + right_65 = GetAttr instance_67 value + op_63 = left_64 - right_65 + result_62 = ALLOCATE Int + result_init_70 = CALL Int_init + instance_71 = ALLOCATE Int + value_72 = LOAD 1 + result_init_73 = CALL Int_init + result_61 = VCALL String substr + result_60 = VCALL A2I a2i_aux + internal_59 = GetAttr result_60 value + op_58 = ~ internal_59 + result_57 = ALLOCATE Int + result_init_74 = CALL Int_init + result_10 = result_57 + LABEL label_45 + result_0 = result_10 + GOTO label_46 + LABEL label_41 + instance_75 = ALLOCATE Int + value_76 = LOAD 0 + result_init_77 = CALL Int_init + result_0 = instance_75 + LABEL label_46 + + RETURN result_0 +} +function A2I.a2i_aux { + PARAM self + PARAM s + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL int_3 + LOCAL result_4 + LOCAL j_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL i_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL result_20 + LOCAL op_21 + LOCAL left_22 + LOCAL right_23 + LOCAL instance_24 + LOCAL value_25 + LOCAL result_init_26 + LOCAL result_init_27 + LOCAL result_28 + LOCAL result_29 + LOCAL instance_30 + LOCAL value_31 + LOCAL result_init_32 + LOCAL result_init_33 + LOCAL result_34 + LOCAL result_35 + LOCAL op_36 + LOCAL left_37 + LOCAL right_38 + LOCAL instance_39 + LOCAL value_40 + LOCAL result_init_41 + LOCAL result_init_42 + LOCAL result_43 + LOCAL let_result_44 + LOCAL let_result_45 + LOCAL let_result_46 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + int_3 = instance_0 + result_4 = VCALL String length + j_5 = result_4 + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + i_9 = instance_6 + LABEL label_47 + left_13 = GetAttr i_9 value + right_14 = GetAttr j_5 value + op_12 = left_13 < right_14 + result_11 = ALLOCATE Bool + result_init_15 = CALL Bool_init + IF result_11 GOTO label_48 + GOTO label_49 + LABEL label_48 + instance_24 = ALLOCATE Int + value_25 = LOAD 10 + result_init_26 = CALL Int_init + left_22 = GetAttr int_3 value + right_23 = GetAttr instance_24 value + op_21 = left_22 * right_23 + result_20 = ALLOCATE Int + result_init_27 = CALL Int_init + instance_30 = ALLOCATE Int + value_31 = LOAD 1 + result_init_32 = CALL Int_init + result_29 = VCALL String substr + result_28 = VCALL A2I c2i + left_18 = GetAttr result_20 value + right_19 = GetAttr result_28 value + op_17 = left_18 + right_19 + result_16 = ALLOCATE Int + result_init_33 = CALL Int_init + int_3 = result_16 + instance_39 = ALLOCATE Int + value_40 = LOAD 1 + result_init_41 = CALL Int_init + left_37 = GetAttr i_9 value + right_38 = GetAttr instance_39 value + op_36 = left_37 + right_38 + result_35 = ALLOCATE Int + result_init_42 = CALL Int_init + i_9 = result_35 + GOTO label_47 + LABEL label_49 + result_10 = LOAD None + let_result_44 = result_10 + let_result_45 = let_result_44 + let_result_46 = int_3 + + RETURN let_result_46 +} +function A2I.i2a { + PARAM self + PARAM i + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL instance_5 + LOCAL value_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL op_11 + LOCAL left_12 + LOCAL right_13 + LOCAL instance_14 + LOCAL value_15 + LOCAL result_init_16 + LOCAL result_init_17 + LOCAL result_18 + LOCAL internal_19 + LOCAL instance_20 + LOCAL result_init_21 + LOCAL result_22 + LOCAL result_23 + LOCAL op_24 + LOCAL left_25 + LOCAL right_26 + LOCAL result_27 + LOCAL op_28 + LOCAL internal_29 + LOCAL instance_30 + LOCAL value_31 + LOCAL result_init_32 + LOCAL result_init_33 + LOCAL result_init_34 + LOCAL result_35 + LOCAL internal_36 + LOCAL instance_37 + LOCAL result_init_38 + + instance_5 = ALLOCATE Int + value_6 = LOAD 0 + result_init_7 = CALL Int_init + left_3 = GetAttr i value + right_4 = GetAttr instance_5 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_50 + instance_14 = ALLOCATE Int + value_15 = LOAD 0 + result_init_16 = CALL Int_init + left_12 = GetAttr instance_14 value + right_13 = GetAttr i value + op_11 = left_12 < right_13 + result_10 = ALLOCATE Bool + result_init_17 = CALL Bool_init + IF result_10 GOTO label_51 + internal_19 = LOAD s_13 + instance_20 = ALLOCATE String + result_init_21 = CALL String_init + instance_30 = ALLOCATE Int + value_31 = LOAD 1 + result_init_32 = CALL Int_init + internal_29 = GetAttr instance_30 value + op_28 = ~ internal_29 + result_27 = ALLOCATE Int + result_init_33 = CALL Int_init + left_25 = GetAttr i value + op_24 = left_25 * right_26 + result_23 = ALLOCATE Int + result_init_34 = CALL Int_init + result_22 = VCALL A2I i2a_aux + result_18 = VCALL String concat + result_9 = result_18 + GOTO label_52 + LABEL label_51 + result_35 = VCALL A2I i2a_aux + result_9 = result_35 + LABEL label_52 + result_0 = result_9 + GOTO label_53 + LABEL label_50 + internal_36 = LOAD s_3 + instance_37 = ALLOCATE String + result_init_38 = CALL String_init + result_0 = instance_37 + LABEL label_53 + + RETURN result_0 +} +function A2I.i2a_aux { + PARAM self + PARAM i + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL instance_5 + LOCAL value_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL op_10 + LOCAL left_11 + LOCAL right_12 + LOCAL instance_13 + LOCAL value_14 + LOCAL result_init_15 + LOCAL result_init_16 + LOCAL next_17 + LOCAL result_18 + LOCAL result_19 + LOCAL result_20 + LOCAL result_21 + LOCAL op_22 + LOCAL left_23 + LOCAL right_24 + LOCAL result_25 + LOCAL op_26 + LOCAL left_27 + LOCAL right_28 + LOCAL instance_29 + LOCAL value_30 + LOCAL result_init_31 + LOCAL result_init_32 + LOCAL result_init_33 + LOCAL let_result_34 + LOCAL internal_35 + LOCAL instance_36 + LOCAL result_init_37 + + instance_5 = ALLOCATE Int + value_6 = LOAD 0 + result_init_7 = CALL Int_init + left_3 = GetAttr i value + right_4 = GetAttr instance_5 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_54 + instance_13 = ALLOCATE Int + value_14 = LOAD 10 + result_init_15 = CALL Int_init + left_11 = GetAttr i value + right_12 = GetAttr instance_13 value + op_10 = left_11 / right_12 + result_9 = ALLOCATE Int + result_init_16 = CALL Int_init + next_17 = result_9 + result_19 = VCALL A2I i2a_aux + instance_29 = ALLOCATE Int + value_30 = LOAD 10 + result_init_31 = CALL Int_init + left_27 = GetAttr next_17 value + right_28 = GetAttr instance_29 value + op_26 = left_27 * right_28 + result_25 = ALLOCATE Int + result_init_32 = CALL Int_init + left_23 = GetAttr i value + right_24 = GetAttr result_25 value + op_22 = left_23 - right_24 + result_21 = ALLOCATE Int + result_init_33 = CALL Int_init + result_20 = VCALL A2I i2c + result_18 = VCALL String concat + let_result_34 = result_18 + result_0 = let_result_34 + GOTO label_55 + LABEL label_54 + internal_35 = LOAD empty_str + instance_36 = ALLOCATE String + result_init_37 = CALL String_init + result_0 = instance_36 + LABEL label_55 + + RETURN result_0 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL internal_3 + LOCAL instance_4 + LOCAL result_init_5 + LOCAL a_6 + LOCAL result_7 + LOCAL result_8 + LOCAL init_9 + LOCAL instance_10 + LOCAL value_11 + LOCAL result_init_12 + LOCAL b_13 + LOCAL result_14 + LOCAL result_15 + LOCAL internal_16 + LOCAL instance_17 + LOCAL result_init_18 + LOCAL result_19 + LOCAL result_20 + LOCAL internal_21 + LOCAL instance_22 + LOCAL result_init_23 + LOCAL let_result_24 + + result_1 = ALLOCATE A2I + init_2 = CALL A2I_init + internal_3 = LOAD s_15 + instance_4 = ALLOCATE String + result_init_5 = CALL String_init + result_0 = VCALL A2I a2i + a_6 = result_0 + result_8 = ALLOCATE A2I + init_9 = CALL A2I_init + instance_10 = ALLOCATE Int + value_11 = LOAD 678987 + result_init_12 = CALL Int_init + result_7 = VCALL A2I i2a + b_13 = result_7 + result_14 = VCALL Main out_int + internal_16 = LOAD s_16 + instance_17 = ALLOCATE String + result_init_18 = CALL String_init + result_15 = VCALL Main out_string + result_19 = VCALL Main out_string + internal_21 = LOAD s_17 + instance_22 = ALLOCATE String + result_init_23 = CALL String_init + result_20 = VCALL Main out_string + let_result_24 = result_20 + + RETURN let_result_24 +} \ No newline at end of file diff --git a/tests/codegen/book_list_test.cil b/tests/codegen/book_list_test.cil new file mode 100644 index 00000000..e69de29b diff --git a/tests/codegen/cells_test.cil b/tests/codegen/cells_test.cil new file mode 100644 index 00000000..45ffe65b --- /dev/null +++ b/tests/codegen/cells_test.cil @@ -0,0 +1,843 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type CellularAutomaton { + attribute population_map + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method init : CellularAutomaton.init + method print : CellularAutomaton.print + method num_cells : CellularAutomaton.num_cells + method cell : CellularAutomaton.cell + method cell_left_neighbor : CellularAutomaton.cell_left_neighbor + method cell_right_neighbor : CellularAutomaton.cell_right_neighbor + method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution + method evolve : CellularAutomaton.evolve +} +type Main { + attribute cells + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: \n +s_4: X +s_5: . +s_6: X + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function CellularAutomaton_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE String + value_2 = LOAD empty_str + result_init_3 = CALL String_init + SetAttr self population_map instance_1 +} +function CellularAutomaton.init { + PARAM self + PARAM map + + LOCAL result_0 + + SetAttr self population_map map + + RETURN self +} +function CellularAutomaton.print { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL population_map_2 + LOCAL internal_3 + LOCAL instance_4 + LOCAL result_init_5 + + population_map_2 = GetAttr self population_map + internal_3 = LOAD s_3 + instance_4 = ALLOCATE String + result_init_5 = CALL String_init + result_1 = VCALL String concat + result_0 = VCALL CellularAutomaton out_string + + RETURN self +} +function CellularAutomaton.num_cells { + PARAM self + + LOCAL result_0 + LOCAL population_map_1 + + population_map_1 = GetAttr self population_map + result_0 = VCALL String length + + RETURN result_0 +} +function CellularAutomaton.cell { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL population_map_1 + LOCAL instance_2 + LOCAL value_3 + LOCAL result_init_4 + + population_map_1 = GetAttr self population_map + instance_2 = ALLOCATE Int + value_3 = LOAD 1 + result_init_4 = CALL Int_init + result_0 = VCALL String substr + + RETURN result_0 +} +function CellularAutomaton.cell_left_neighbor { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL instance_5 + LOCAL value_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL op_11 + LOCAL left_12 + LOCAL right_13 + LOCAL instance_14 + LOCAL value_15 + LOCAL result_init_16 + LOCAL result_init_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL result_23 + LOCAL instance_24 + LOCAL value_25 + LOCAL result_init_26 + LOCAL result_init_27 + + instance_5 = ALLOCATE Int + value_6 = LOAD 0 + result_init_7 = CALL Int_init + left_3 = GetAttr position value + right_4 = GetAttr instance_5 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_1 + instance_14 = ALLOCATE Int + value_15 = LOAD 1 + result_init_16 = CALL Int_init + left_12 = GetAttr position value + right_13 = GetAttr instance_14 value + op_11 = left_12 - right_13 + result_10 = ALLOCATE Int + result_init_17 = CALL Int_init + result_9 = VCALL CellularAutomaton cell + result_0 = result_9 + GOTO label_2 + LABEL label_1 + result_23 = VCALL CellularAutomaton num_cells + instance_24 = ALLOCATE Int + value_25 = LOAD 1 + result_init_26 = CALL Int_init + left_21 = GetAttr result_23 value + right_22 = GetAttr instance_24 value + op_20 = left_21 - right_22 + result_19 = ALLOCATE Int + result_init_27 = CALL Int_init + result_18 = VCALL CellularAutomaton cell + result_0 = result_18 + LABEL label_2 + + RETURN result_0 +} +function CellularAutomaton.cell_right_neighbor { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL result_9 + LOCAL instance_10 + LOCAL value_11 + LOCAL result_init_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL instance_20 + LOCAL value_21 + LOCAL result_init_22 + LOCAL result_init_23 + LOCAL result_24 + LOCAL instance_25 + LOCAL value_26 + LOCAL result_init_27 + + result_9 = VCALL CellularAutomaton num_cells + instance_10 = ALLOCATE Int + value_11 = LOAD 1 + result_init_12 = CALL Int_init + left_7 = GetAttr result_9 value + right_8 = GetAttr instance_10 value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_13 = CALL Int_init + left_3 = GetAttr position value + right_4 = GetAttr result_5 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_3 + instance_20 = ALLOCATE Int + value_21 = LOAD 1 + result_init_22 = CALL Int_init + left_18 = GetAttr position value + right_19 = GetAttr instance_20 value + op_17 = left_18 + right_19 + result_16 = ALLOCATE Int + result_init_23 = CALL Int_init + result_15 = VCALL CellularAutomaton cell + result_0 = result_15 + GOTO label_4 + LABEL label_3 + instance_25 = ALLOCATE Int + value_26 = LOAD 0 + result_init_27 = CALL Int_init + result_24 = VCALL CellularAutomaton cell + result_0 = result_24 + LABEL label_4 + + RETURN result_0 +} +function CellularAutomaton.cell_at_next_evolution { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL result_9 + LOCAL op_10 + LOCAL left_11 + LOCAL right_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL result_18 + LOCAL internal_19 + LOCAL instance_20 + LOCAL result_init_21 + LOCAL result_init_22 + LOCAL instance_23 + LOCAL value_24 + LOCAL result_init_25 + LOCAL instance_26 + LOCAL value_27 + LOCAL result_init_28 + LOCAL result_29 + LOCAL result_30 + LOCAL op_31 + LOCAL left_32 + LOCAL right_33 + LOCAL result_34 + LOCAL internal_35 + LOCAL instance_36 + LOCAL result_init_37 + LOCAL result_init_38 + LOCAL instance_39 + LOCAL value_40 + LOCAL result_init_41 + LOCAL instance_42 + LOCAL value_43 + LOCAL result_init_44 + LOCAL result_init_45 + LOCAL result_46 + LOCAL result_47 + LOCAL op_48 + LOCAL left_49 + LOCAL right_50 + LOCAL result_51 + LOCAL internal_52 + LOCAL instance_53 + LOCAL result_init_54 + LOCAL result_init_55 + LOCAL instance_56 + LOCAL value_57 + LOCAL result_init_58 + LOCAL instance_59 + LOCAL value_60 + LOCAL result_init_61 + LOCAL result_init_62 + LOCAL instance_63 + LOCAL value_64 + LOCAL result_init_65 + LOCAL result_init_66 + LOCAL internal_67 + LOCAL instance_68 + LOCAL result_init_69 + LOCAL internal_70 + LOCAL instance_71 + LOCAL result_init_72 + + result_18 = VCALL CellularAutomaton cell + internal_19 = LOAD s_4 + instance_20 = ALLOCATE String + result_init_21 = CALL String_init + left_16 = GetAttr result_18 value + right_17 = GetAttr instance_20 value + op_15 = left_16 = right_17 + result_14 = ALLOCATE Bool + result_init_22 = CALL Bool_init + IF result_14 GOTO label_5 + instance_23 = ALLOCATE Int + value_24 = LOAD 0 + result_init_25 = CALL Int_init + result_13 = instance_23 + GOTO label_6 + LABEL label_5 + instance_26 = ALLOCATE Int + value_27 = LOAD 1 + result_init_28 = CALL Int_init + result_13 = instance_26 + LABEL label_6 + result_34 = VCALL CellularAutomaton cell_left_neighbor + internal_35 = LOAD s_4 + instance_36 = ALLOCATE String + result_init_37 = CALL String_init + left_32 = GetAttr result_34 value + right_33 = GetAttr instance_36 value + op_31 = left_32 = right_33 + result_30 = ALLOCATE Bool + result_init_38 = CALL Bool_init + IF result_30 GOTO label_7 + instance_39 = ALLOCATE Int + value_40 = LOAD 0 + result_init_41 = CALL Int_init + result_29 = instance_39 + GOTO label_8 + LABEL label_7 + instance_42 = ALLOCATE Int + value_43 = LOAD 1 + result_init_44 = CALL Int_init + result_29 = instance_42 + LABEL label_8 + left_11 = GetAttr result_13 value + right_12 = GetAttr result_29 value + op_10 = left_11 + right_12 + result_9 = ALLOCATE Int + result_init_45 = CALL Int_init + result_51 = VCALL CellularAutomaton cell_right_neighbor + internal_52 = LOAD s_4 + instance_53 = ALLOCATE String + result_init_54 = CALL String_init + left_49 = GetAttr result_51 value + right_50 = GetAttr instance_53 value + op_48 = left_49 = right_50 + result_47 = ALLOCATE Bool + result_init_55 = CALL Bool_init + IF result_47 GOTO label_9 + instance_56 = ALLOCATE Int + value_57 = LOAD 0 + result_init_58 = CALL Int_init + result_46 = instance_56 + GOTO label_10 + LABEL label_9 + instance_59 = ALLOCATE Int + value_60 = LOAD 1 + result_init_61 = CALL Int_init + result_46 = instance_59 + LABEL label_10 + left_7 = GetAttr result_9 value + right_8 = GetAttr result_46 value + op_6 = left_7 + right_8 + result_5 = ALLOCATE Int + result_init_62 = CALL Int_init + instance_63 = ALLOCATE Int + value_64 = LOAD 1 + result_init_65 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_63 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_66 = CALL Bool_init + IF result_1 GOTO label_11 + internal_67 = LOAD s_5 + instance_68 = ALLOCATE String + result_init_69 = CALL String_init + result_0 = instance_68 + GOTO label_12 + LABEL label_11 + internal_70 = LOAD s_4 + instance_71 = ALLOCATE String + result_init_72 = CALL String_init + result_0 = instance_71 + LABEL label_12 + + RETURN result_0 +} +function CellularAutomaton.evolve { + PARAM self + + LOCAL position_0 + LOCAL result_1 + LOCAL num_2 + LOCAL temp_3 + LOCAL result_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL result_12 + LOCAL result_13 + LOCAL op_14 + LOCAL left_15 + LOCAL right_16 + LOCAL instance_17 + LOCAL value_18 + LOCAL result_init_19 + LOCAL result_init_20 + LOCAL result_21 + LOCAL result_22 + LOCAL let_result_23 + LOCAL let_result_24 + LOCAL let_result_25 + + position_0 = [] + result_1 = VCALL CellularAutomaton num_cells + num_2 = result_1 + temp_3 = [] + LABEL label_13 + left_7 = GetAttr position_0 value + right_8 = GetAttr num_2 value + op_6 = left_7 < right_8 + result_5 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_5 GOTO label_14 + GOTO label_15 + LABEL label_14 + result_11 = VCALL CellularAutomaton cell_at_next_evolution + result_10 = VCALL String concat + temp_3 = result_10 + instance_17 = ALLOCATE Int + value_18 = LOAD 1 + result_init_19 = CALL Int_init + left_15 = GetAttr position_0 value + right_16 = GetAttr instance_17 value + op_14 = left_15 + right_16 + result_13 = ALLOCATE Int + result_init_20 = CALL Int_init + position_0 = result_13 + GOTO label_13 + LABEL label_15 + result_4 = LOAD None + SetAttr self population_map temp_3 + let_result_23 = self + let_result_24 = let_result_23 + let_result_25 = let_result_24 + + RETURN let_result_25 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL Object_init + + RETURN + SetAttr self cells None +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL internal_3 + LOCAL instance_4 + LOCAL result_init_5 + LOCAL result_6 + LOCAL result_7 + LOCAL cells_8 + LOCAL instance_9 + LOCAL value_10 + LOCAL result_init_11 + LOCAL countdown_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL instance_18 + LOCAL value_19 + LOCAL result_init_20 + LOCAL result_init_21 + LOCAL result_22 + LOCAL cells_23 + LOCAL result_24 + LOCAL cells_25 + LOCAL result_26 + LOCAL op_27 + LOCAL left_28 + LOCAL right_29 + LOCAL instance_30 + LOCAL value_31 + LOCAL result_init_32 + LOCAL result_init_33 + LOCAL result_34 + LOCAL let_result_35 + + result_1 = ALLOCATE CellularAutomaton + init_2 = CALL CellularAutomaton_init + internal_3 = LOAD s_6 + instance_4 = ALLOCATE String + result_init_5 = CALL String_init + result_0 = VCALL CellularAutomaton init + SetAttr self cells result_0 + cells_8 = GetAttr self cells + result_7 = VCALL CellularAutomaton print + instance_9 = ALLOCATE Int + value_10 = LOAD 20 + result_init_11 = CALL Int_init + countdown_12 = instance_9 + LABEL label_16 + instance_18 = ALLOCATE Int + value_19 = LOAD 0 + result_init_20 = CALL Int_init + left_16 = GetAttr instance_18 value + right_17 = GetAttr countdown_12 value + op_15 = left_16 < right_17 + result_14 = ALLOCATE Bool + result_init_21 = CALL Bool_init + IF result_14 GOTO label_17 + GOTO label_18 + LABEL label_17 + cells_23 = GetAttr self cells + result_22 = VCALL CellularAutomaton evolve + cells_25 = GetAttr self cells + result_24 = VCALL CellularAutomaton print + instance_30 = ALLOCATE Int + value_31 = LOAD 1 + result_init_32 = CALL Int_init + left_28 = GetAttr countdown_12 value + right_29 = GetAttr instance_30 value + op_27 = left_28 - right_29 + result_26 = ALLOCATE Int + result_init_33 = CALL Int_init + countdown_12 = result_26 + GOTO label_16 + LABEL label_18 + result_13 = LOAD None + let_result_35 = result_13 + + RETURN self +} \ No newline at end of file diff --git a/tests/codegen/complex_test.cil b/tests/codegen/complex_test.cil new file mode 100644 index 00000000..b81954db --- /dev/null +++ b/tests/codegen/complex_test.cil @@ -0,0 +1,601 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} +type Complex { + attribute x + attribute y + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method init : Complex.init + method print : Complex.print + method reflect_0 : Complex.reflect_0 + method reflect_X : Complex.reflect_X + method reflect_Y : Complex.reflect_Y +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: =(\n +s_4: =)\n +s_5: + +s_6: I + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL instance_3 + LOCAL value_4 + LOCAL result_init_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL c_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_15 + LOCAL result_16 + LOCAL result_17 + LOCAL result_init_18 + LOCAL result_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + LOCAL result_23 + LOCAL internal_24 + LOCAL instance_25 + LOCAL result_init_26 + LOCAL let_result_27 + + result_1 = ALLOCATE Complex + init_2 = CALL Complex_init + instance_3 = ALLOCATE Int + value_4 = LOAD 1 + result_init_5 = CALL Int_init + instance_6 = ALLOCATE Int + value_7 = LOAD 1 + result_init_8 = CALL Int_init + result_0 = VCALL Complex init + c_9 = result_0 + result_16 = VCALL Complex reflect_X + result_15 = VCALL Complex reflect_Y + result_17 = VCALL Complex reflect_0 + left_13 = GetAttr result_15 value + right_14 = GetAttr result_17 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_18 = CALL Bool_init + IF result_11 GOTO label_1 + internal_20 = LOAD s_3 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + result_19 = VCALL Main out_string + result_10 = result_19 + GOTO label_2 + LABEL label_1 + internal_24 = LOAD s_4 + instance_25 = ALLOCATE String + result_init_26 = CALL String_init + result_23 = VCALL Main out_string + result_10 = result_23 + LABEL label_2 + let_result_27 = result_10 + + RETURN let_result_27 +} +function Complex_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + LOCAL instance_4 + LOCAL value_5 + LOCAL result_init_6 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self x instance_1 + instance_4 = ALLOCATE Int + value_5 = LOAD 0 + result_init_6 = CALL Int_init + SetAttr self y instance_4 +} +function Complex.init { + PARAM self + PARAM a + PARAM b + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL x_4 + LOCAL result_init_5 + LOCAL result_6 + LOCAL op_7 + LOCAL left_8 + LOCAL right_9 + LOCAL y_10 + LOCAL result_init_11 + + x_4 = GetAttr self x + left_2 = GetAttr x_4 value + right_3 = GetAttr a value + op_1 = left_2 = right_3 + result_0 = ALLOCATE Bool + result_init_5 = CALL Bool_init + y_10 = GetAttr self y + left_8 = GetAttr y_10 value + right_9 = GetAttr b value + op_7 = left_8 = right_9 + result_6 = ALLOCATE Bool + result_init_11 = CALL Bool_init + + RETURN self +} +function Complex.print { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL y_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL result_12 + LOCAL result_13 + LOCAL x_14 + LOCAL internal_15 + LOCAL instance_16 + LOCAL result_init_17 + LOCAL y_18 + LOCAL internal_19 + LOCAL instance_20 + LOCAL result_init_21 + LOCAL result_22 + LOCAL x_23 + + y_5 = GetAttr self y + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + left_3 = GetAttr y_5 value + right_4 = GetAttr instance_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_1 GOTO label_3 + x_14 = GetAttr self x + result_13 = VCALL Complex out_int + internal_15 = LOAD s_5 + instance_16 = ALLOCATE String + result_init_17 = CALL String_init + result_12 = VCALL IO out_string + y_18 = GetAttr self y + result_11 = VCALL IO out_int + internal_19 = LOAD s_6 + instance_20 = ALLOCATE String + result_init_21 = CALL String_init + result_10 = VCALL IO out_string + result_0 = result_10 + GOTO label_4 + LABEL label_3 + x_23 = GetAttr self x + result_22 = VCALL Complex out_int + result_0 = result_22 + LABEL label_4 + + RETURN result_0 +} +function Complex.reflect_0 { + PARAM self + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL x_4 + LOCAL result_5 + LOCAL op_6 + LOCAL internal_7 + LOCAL x_8 + LOCAL result_init_9 + LOCAL result_init_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL y_15 + LOCAL result_16 + LOCAL op_17 + LOCAL internal_18 + LOCAL y_19 + LOCAL result_init_20 + LOCAL result_init_21 + + x_4 = GetAttr self x + x_8 = GetAttr self x + internal_7 = GetAttr x_8 value + op_6 = ~ internal_7 + result_5 = ALLOCATE Int + result_init_9 = CALL Int_init + left_2 = GetAttr x_4 value + left_2 = GetAttr x_4 value + op_1 = left_2 = right_3 + result_0 = ALLOCATE Bool + result_init_10 = CALL Bool_init + y_15 = GetAttr self y + y_19 = GetAttr self y + internal_18 = GetAttr y_19 value + op_17 = ~ internal_18 + result_16 = ALLOCATE Int + result_init_20 = CALL Int_init + left_13 = GetAttr y_15 value + left_13 = GetAttr y_15 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_21 = CALL Bool_init + + RETURN self +} +function Complex.reflect_X { + PARAM self + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL y_4 + LOCAL result_5 + LOCAL op_6 + LOCAL internal_7 + LOCAL y_8 + LOCAL result_init_9 + LOCAL result_init_10 + + y_4 = GetAttr self y + y_8 = GetAttr self y + internal_7 = GetAttr y_8 value + op_6 = ~ internal_7 + result_5 = ALLOCATE Int + result_init_9 = CALL Int_init + left_2 = GetAttr y_4 value + left_2 = GetAttr y_4 value + op_1 = left_2 = right_3 + result_0 = ALLOCATE Bool + result_init_10 = CALL Bool_init + + RETURN self +} +function Complex.reflect_Y { + PARAM self + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL x_4 + LOCAL result_5 + LOCAL op_6 + LOCAL internal_7 + LOCAL x_8 + LOCAL result_init_9 + LOCAL result_init_10 + + x_4 = GetAttr self x + x_8 = GetAttr self x + internal_7 = GetAttr x_8 value + op_6 = ~ internal_7 + result_5 = ALLOCATE Int + result_init_9 = CALL Int_init + left_2 = GetAttr x_4 value + left_2 = GetAttr x_4 value + op_1 = left_2 = right_3 + result_0 = ALLOCATE Bool + result_init_10 = CALL Bool_init + + RETURN self +} \ No newline at end of file diff --git a/tests/codegen/fib_test.cil b/tests/codegen/fib_test.cil index e69de29b..e4a4d5c3 100644 --- a/tests/codegen/fib_test.cil +++ b/tests/codegen/fib_test.cil @@ -0,0 +1,419 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main + method fib : Main.fib +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: Enter n to find nth fibonacci number!\n +s_4: \n + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + LOCAL result_4 + LOCAL result_5 + LOCAL result_6 + LOCAL result_7 + LOCAL internal_8 + LOCAL instance_9 + LOCAL result_init_10 + + internal_1 = LOAD s_3 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL Main out_string + result_6 = VCALL Main in_int + result_5 = VCALL Main fib + result_4 = VCALL Main out_int + internal_8 = LOAD s_4 + instance_9 = ALLOCATE String + result_init_10 = CALL String_init + result_7 = VCALL Main out_string + + RETURN result_7 +} +function Main.fib { + PARAM self + PARAM i + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL a_3 + LOCAL instance_4 + LOCAL value_5 + LOCAL result_init_6 + LOCAL b_7 + LOCAL instance_8 + LOCAL value_9 + LOCAL result_init_10 + LOCAL c_11 + LOCAL result_12 + LOCAL result_13 + LOCAL op_14 + LOCAL internal_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL instance_20 + LOCAL value_21 + LOCAL result_init_22 + LOCAL result_init_23 + LOCAL result_init_24 + LOCAL result_25 + LOCAL op_26 + LOCAL left_27 + LOCAL right_28 + LOCAL result_init_29 + LOCAL result_30 + LOCAL result_31 + LOCAL op_32 + LOCAL left_33 + LOCAL right_34 + LOCAL instance_35 + LOCAL value_36 + LOCAL result_init_37 + LOCAL result_init_38 + LOCAL result_39 + LOCAL result_40 + LOCAL result_41 + LOCAL let_result_42 + + instance_0 = ALLOCATE Int + value_1 = LOAD 1 + result_init_2 = CALL Int_init + a_3 = instance_0 + instance_4 = ALLOCATE Int + value_5 = LOAD 0 + result_init_6 = CALL Int_init + b_7 = instance_4 + instance_8 = ALLOCATE Int + value_9 = LOAD 0 + result_init_10 = CALL Int_init + c_11 = instance_8 + LABEL label_1 + instance_20 = ALLOCATE Int + value_21 = LOAD 0 + result_init_22 = CALL Int_init + left_18 = GetAttr i value + right_19 = GetAttr instance_20 value + op_17 = left_18 = right_19 + result_16 = ALLOCATE Bool + result_init_23 = CALL Bool_init + internal_15 = GetAttr result_16 value + op_14 = not internal_15 + result_13 = ALLOCATE Bool + result_init_24 = CALL Bool_init + IF result_13 GOTO label_2 + GOTO label_3 + LABEL label_2 + left_27 = GetAttr a_3 value + right_28 = GetAttr b_7 value + op_26 = left_27 + right_28 + result_25 = ALLOCATE Int + result_init_29 = CALL Int_init + c_11 = result_25 + instance_35 = ALLOCATE Int + value_36 = LOAD 1 + result_init_37 = CALL Int_init + left_33 = GetAttr i value + right_34 = GetAttr instance_35 value + op_32 = left_33 - right_34 + result_31 = ALLOCATE Int + result_init_38 = CALL Int_init + i = result_31 + b_7 = a_3 + a_3 = c_11 + GOTO label_1 + LABEL label_3 + result_12 = LOAD None + let_result_42 = c_11 + + RETURN let_result_42 +} \ No newline at end of file diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index a533b138..a9e671d7 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -734,24 +734,64 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Graph_init: -addi $sp, $sp, -4 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Object_init sw $a1, 4($sp) move $a1, $zero -lw $t0, 8($sp) -la $t1, void +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 10 +sw $t1, 0($t0) +la $t1, VList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, VList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal VList_init +sw $a1, 12($sp) +lw $t0, 24($sp) +lw $t1, 8($sp) sw $t1, 16($t0) -lw $t0, 8($sp) -la $t1, void +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, EList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, EList_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal EList_init +sw $a1, 20($sp) +lw $t0, 24($sp) +lw $t1, 16($sp) sw $t1, 20($t0) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 28 jr $ra Graph.add_vertice: addi $sp, $sp, -28 @@ -857,11 +897,11 @@ lw $ra, 0($sp) addi $sp, $sp, 16 jr $ra Vertice_init: -addi $sp, $sp, -16 +addi $sp, $sp, -24 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal IO_init @@ -890,14 +930,34 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 16($sp) -lw $t0, 20($sp) +lw $t0, 28($sp) lw $t1, 8($sp) sw $t1, 16($t0) -lw $t0, 20($sp) -la $t1, void +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, EList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, EList_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal EList_init +sw $a1, 24($sp) +lw $t0, 28($sp) +lw $t1, 20($sp) sw $t1, 20($t0) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 32 jr $ra Vertice.outgoing: addi $sp, $sp, -4 @@ -1966,18 +2026,38 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Parse_init: -addi $sp, $sp, -16 +addi $sp, $sp, -24 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal IO_init sw $a1, 4($sp) move $a1, $zero -lw $t0, 20($sp) -la $t1, void +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 14 +sw $t1, 0($t0) +la $t1, BoolOp_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, BoolOp_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal BoolOp_init +sw $a1, 12($sp) +lw $t0, 28($sp) +lw $t1, 8($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 @@ -1992,23 +2072,23 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 16($sp) la $t0, empty_str -sw $t0, 12($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 16($sp) -lw $t0, 20($sp) -lw $t1, 8($sp) +sw $a1, 24($sp) +lw $t0, 28($sp) +lw $t1, 16($sp) sw $t1, 20($t0) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 32 jr $ra Parse.read_input: addi $sp, $sp, -152 @@ -5167,21 +5247,32 @@ lw $ra, 0($sp) addi $sp, $sp, 548 jr $ra Main_init: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Parse_init sw $a1, 4($sp) move $a1, $zero -lw $t0, 8($sp) -la $t1, void +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 8($sp) +lw $t0, 12($sp) +lw $t1, 8($sp) sw $t1, 24($t0) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 16 jr $ra Main.main: addi $sp, $sp, -16 diff --git a/tests/codegen/graph_test.cil b/tests/codegen/graph_test.cil new file mode 100644 index 00000000..28f16965 --- /dev/null +++ b/tests/codegen/graph_test.cil @@ -0,0 +1,2003 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Graph { + attribute vertices + attribute edges + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method add_vertice : Graph.add_vertice + method print_E : Graph.print_E + method print_V : Graph.print_V +} +type Vertice { + attribute num + attribute out + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method outgoing : Vertice.outgoing + method number : Vertice.number + method init : Vertice.init + method add_out : Vertice.add_out + method print : Vertice.print +} +type Edge { + attribute from + attribute to + attribute weight + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method init : Edge.init + method print : Edge.print +} +type EList { + attribute car + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : EList.isNil + method head : EList.head + method tail : EList.tail + method cons : EList.cons + method append : EList.append + method print : EList.print +} +type ECons { + attribute car + attribute cdr + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : ECons.isNil + method head : ECons.head + method tail : ECons.tail + method cons : EList.cons + method append : EList.append + method print : ECons.print + method init : ECons.init +} +type VList { + attribute car + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : VList.isNil + method head : VList.head + method tail : VList.tail + method cons : VList.cons + method print : VList.print +} +type VCons { + attribute car + attribute cdr + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : VCons.isNil + method head : VCons.head + method tail : VCons.tail + method cons : VList.cons + method print : VCons.print + method init : VCons.init +} +type Parse { + attribute boolop + attribute rest + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method read_input : Parse.read_input + method parse_line : Parse.parse_line + method c2i : Parse.c2i + method a2i : Parse.a2i + method a2i_aux : Parse.a2i_aux +} +type Main { + attribute boolop + attribute rest + attribute g + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method read_input : Parse.read_input + method parse_line : Parse.parse_line + method c2i : Parse.c2i + method a2i : Parse.a2i + method a2i_aux : Parse.a2i_aux + method main : Main.main +} +type BoolOp { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method and : BoolOp.and + method or : BoolOp.or +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: ( +s_4: , +s_5: ) +s_6: \n +s_7: 0 +s_8: 1 +s_9: 2 +s_10: 3 +s_11: 4 +s_12: 5 +s_13: 6 +s_14: 7 +s_15: 8 +s_16: 9 +s_17: - +s_18: + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Graph_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL result_3 + LOCAL init_4 + + result_0 = CALL Object_init + + RETURN + result_1 = ALLOCATE VList + init_2 = CALL VList_init + SetAttr self vertices result_1 + result_3 = ALLOCATE EList + init_4 = CALL EList_init + SetAttr self edges result_3 +} +function Graph.add_vertice { + PARAM self + PARAM v + + LOCAL result_0 + LOCAL result_1 + LOCAL edges_2 + LOCAL result_3 + LOCAL result_4 + LOCAL vertices_5 + LOCAL result_6 + + result_1 = VCALL Vertice outgoing + edges_2 = GetAttr self edges + result_0 = VCALL EList append + SetAttr self edges result_0 + vertices_5 = GetAttr self vertices + result_4 = VCALL VList cons + SetAttr self vertices result_4 + + RETURN result_4 +} +function Graph.print_E { + PARAM self + + LOCAL result_0 + LOCAL edges_1 + + edges_1 = GetAttr self edges + result_0 = VCALL EList print + + RETURN result_0 +} +function Graph.print_V { + PARAM self + + LOCAL result_0 + LOCAL vertices_1 + + vertices_1 = GetAttr self vertices + result_0 = VCALL VList print + + RETURN result_0 +} +function Vertice_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + LOCAL result_4 + LOCAL init_5 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self num instance_1 + result_4 = ALLOCATE EList + init_5 = CALL EList_init + SetAttr self out result_4 +} +function Vertice.outgoing { + PARAM self + + LOCAL out_0 + + out_0 = GetAttr self out + + RETURN out_0 +} +function Vertice.number { + PARAM self + + LOCAL num_0 + + num_0 = GetAttr self num + + RETURN num_0 +} +function Vertice.init { + PARAM self + PARAM n + + LOCAL result_0 + + SetAttr self num n + + RETURN self +} +function Vertice.add_out { + PARAM self + PARAM s + + LOCAL result_0 + LOCAL out_1 + LOCAL result_2 + + out_1 = GetAttr self out + result_0 = VCALL EList cons + SetAttr self out result_0 + + RETURN self +} +function Vertice.print { + PARAM self + + LOCAL result_0 + LOCAL num_1 + LOCAL result_2 + LOCAL out_3 + + num_1 = GetAttr self num + result_0 = VCALL Vertice out_int + out_3 = GetAttr self out + result_2 = VCALL EList print + + RETURN result_2 +} +function Edge_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + LOCAL instance_4 + LOCAL value_5 + LOCAL result_init_6 + LOCAL instance_7 + LOCAL value_8 + LOCAL result_init_9 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self from instance_1 + instance_4 = ALLOCATE Int + value_5 = LOAD 0 + result_init_6 = CALL Int_init + SetAttr self to instance_4 + instance_7 = ALLOCATE Int + value_8 = LOAD 0 + result_init_9 = CALL Int_init + SetAttr self weight instance_7 +} +function Edge.init { + PARAM self + PARAM f + PARAM t + PARAM w + + LOCAL result_0 + LOCAL result_1 + LOCAL result_2 + + SetAttr self from f + SetAttr self to t + SetAttr self weight w + + RETURN self +} +function Edge.print { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + LOCAL result_4 + LOCAL from_5 + LOCAL result_6 + LOCAL internal_7 + LOCAL instance_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL to_11 + LOCAL result_12 + LOCAL internal_13 + LOCAL instance_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL weight_17 + + internal_1 = LOAD s_3 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL Edge out_string + from_5 = GetAttr self from + result_4 = VCALL Edge out_int + internal_7 = LOAD s_4 + instance_8 = ALLOCATE String + result_init_9 = CALL String_init + result_6 = VCALL Edge out_string + to_11 = GetAttr self to + result_10 = VCALL Edge out_int + internal_13 = LOAD s_5 + instance_14 = ALLOCATE String + result_init_15 = CALL String_init + result_12 = VCALL Edge out_string + weight_17 = GetAttr self weight + result_16 = VCALL Edge out_int + + RETURN result_16 +} +function EList_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN + SetAttr self car None +} +function EList.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function EList.head { + PARAM self + + LOCAL result_0 + LOCAL car_1 + + result_0 = VCALL EList abort + car_1 = GetAttr self car + + RETURN car_1 +} +function EList.tail { + PARAM self + + LOCAL result_0 + + result_0 = VCALL EList abort + + RETURN self +} +function EList.cons { + PARAM self + PARAM e + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_1 = ALLOCATE ECons + init_2 = CALL ECons_init + result_0 = VCALL ECons init + + RETURN result_0 +} +function EList.append { + PARAM self + PARAM l + + LOCAL result_0 + LOCAL result_1 + LOCAL result_2 + LOCAL result_3 + LOCAL result_4 + LOCAL result_5 + + result_1 = VCALL EList isNil + IF result_1 GOTO label_1 + result_4 = VCALL EList tail + result_3 = VCALL EList append + result_5 = VCALL EList head + result_2 = VCALL EList cons + result_0 = result_2 + GOTO label_2 + LABEL label_1 + result_0 = l + LABEL label_2 + + RETURN result_0 +} +function EList.print { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_6 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL EList out_string + + RETURN result_0 +} +function ECons_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL EList_init + + RETURN + SetAttr self cdr None +} +function ECons.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function ECons.head { + PARAM self + + LOCAL car_0 + + car_0 = GetAttr self car + + RETURN car_0 +} +function ECons.tail { + PARAM self + + LOCAL cdr_0 + + cdr_0 = GetAttr self cdr + + RETURN cdr_0 +} +function ECons.init { + PARAM self + PARAM e + PARAM rest + + LOCAL result_0 + LOCAL result_1 + + SetAttr self car e + SetAttr self cdr rest + + RETURN self +} +function ECons.print { + PARAM self + + LOCAL result_0 + LOCAL car_1 + LOCAL result_2 + LOCAL cdr_3 + + car_1 = GetAttr self car + result_0 = VCALL Edge print + cdr_3 = GetAttr self cdr + result_2 = VCALL EList print + + RETURN result_2 +} +function VList_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN + SetAttr self car None +} +function VList.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function VList.head { + PARAM self + + LOCAL result_0 + LOCAL car_1 + + result_0 = VCALL VList abort + car_1 = GetAttr self car + + RETURN car_1 +} +function VList.tail { + PARAM self + + LOCAL result_0 + + result_0 = VCALL VList abort + + RETURN self +} +function VList.cons { + PARAM self + PARAM v + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_1 = ALLOCATE VCons + init_2 = CALL VCons_init + result_0 = VCALL VCons init + + RETURN result_0 +} +function VList.print { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_6 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL VList out_string + + RETURN result_0 +} +function VCons_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL VList_init + + RETURN + SetAttr self cdr None +} +function VCons.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function VCons.head { + PARAM self + + LOCAL car_0 + + car_0 = GetAttr self car + + RETURN car_0 +} +function VCons.tail { + PARAM self + + LOCAL cdr_0 + + cdr_0 = GetAttr self cdr + + RETURN cdr_0 +} +function VCons.init { + PARAM self + PARAM v + PARAM rest + + LOCAL result_0 + LOCAL result_1 + + SetAttr self car v + SetAttr self cdr rest + + RETURN self +} +function VCons.print { + PARAM self + + LOCAL result_0 + LOCAL car_1 + LOCAL result_2 + LOCAL cdr_3 + + car_1 = GetAttr self car + result_0 = VCALL Vertice print + cdr_3 = GetAttr self cdr + result_2 = VCALL VList print + + RETURN result_2 +} +function Parse_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL instance_3 + LOCAL value_4 + LOCAL result_init_5 + + result_0 = CALL IO_init + + RETURN + result_1 = ALLOCATE BoolOp + init_2 = CALL BoolOp_init + SetAttr self boolop result_1 + instance_3 = ALLOCATE String + value_4 = LOAD empty_str + result_init_5 = CALL String_init + SetAttr self rest instance_3 +} +function Parse.read_input { + PARAM self + + LOCAL result_0 + LOCAL init_1 + LOCAL g_2 + LOCAL result_3 + LOCAL line_4 + LOCAL result_5 + LOCAL result_6 + LOCAL boolop_7 + LOCAL result_8 + LOCAL op_9 + LOCAL internal_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL internal_15 + LOCAL instance_16 + LOCAL result_init_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL result_20 + LOCAL op_21 + LOCAL internal_22 + LOCAL result_23 + LOCAL op_24 + LOCAL left_25 + LOCAL right_26 + LOCAL internal_27 + LOCAL instance_28 + LOCAL result_init_29 + LOCAL result_init_30 + LOCAL result_init_31 + LOCAL result_32 + LOCAL result_33 + LOCAL result_34 + LOCAL result_35 + LOCAL let_result_36 + LOCAL let_result_37 + + result_0 = ALLOCATE Graph + init_1 = CALL Graph_init + g_2 = result_0 + result_3 = VCALL Parse in_string + line_4 = result_3 + LABEL label_3 + boolop_7 = GetAttr self boolop + internal_15 = LOAD empty_str + instance_16 = ALLOCATE String + result_init_17 = CALL String_init + op_12 = CALL String_equals + result_11 = ALLOCATE Bool + result_init_18 = CALL Bool_init + internal_10 = GetAttr result_11 value + op_9 = not internal_10 + result_8 = ALLOCATE Bool + result_init_19 = CALL Bool_init + internal_27 = LOAD s_6 + instance_28 = ALLOCATE String + result_init_29 = CALL String_init + op_24 = CALL String_equals + result_23 = ALLOCATE Bool + result_init_30 = CALL Bool_init + internal_22 = GetAttr result_23 value + op_21 = not internal_22 + result_20 = ALLOCATE Bool + result_init_31 = CALL Bool_init + result_6 = VCALL BoolOp and + IF result_6 GOTO label_4 + GOTO label_5 + LABEL label_4 + result_33 = VCALL Parse parse_line + result_32 = VCALL Graph add_vertice + result_34 = VCALL Parse in_string + line_4 = result_34 + GOTO label_3 + LABEL label_5 + result_5 = LOAD None + let_result_36 = result_5 + let_result_37 = g_2 + + RETURN let_result_37 +} +function Parse.parse_line { + PARAM self + PARAM s + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL result_3 + LOCAL v_4 + LOCAL result_5 + LOCAL result_6 + LOCAL op_7 + LOCAL internal_8 + LOCAL result_9 + LOCAL op_10 + LOCAL left_11 + LOCAL right_12 + LOCAL result_13 + LOCAL rest_14 + LOCAL instance_15 + LOCAL value_16 + LOCAL result_init_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL result_20 + LOCAL rest_21 + LOCAL succ_22 + LOCAL result_23 + LOCAL rest_24 + LOCAL weight_25 + LOCAL result_26 + LOCAL result_27 + LOCAL result_28 + LOCAL init_29 + LOCAL result_30 + LOCAL let_result_31 + LOCAL let_result_32 + LOCAL let_result_33 + + result_1 = ALLOCATE Vertice + init_2 = CALL Vertice_init + result_3 = VCALL Parse a2i + result_0 = VCALL Vertice init + v_4 = result_0 + LABEL label_6 + rest_14 = GetAttr self rest + result_13 = VCALL String length + instance_15 = ALLOCATE Int + value_16 = LOAD 0 + result_init_17 = CALL Int_init + left_11 = GetAttr result_13 value + right_12 = GetAttr instance_15 value + op_10 = left_11 = right_12 + result_9 = ALLOCATE Bool + result_init_18 = CALL Bool_init + internal_8 = GetAttr result_9 value + op_7 = not internal_8 + result_6 = ALLOCATE Bool + result_init_19 = CALL Bool_init + IF result_6 GOTO label_7 + GOTO label_8 + LABEL label_7 + rest_21 = GetAttr self rest + result_20 = VCALL Parse a2i + succ_22 = result_20 + rest_24 = GetAttr self rest + result_23 = VCALL Parse a2i + weight_25 = result_23 + result_28 = ALLOCATE Edge + init_29 = CALL Edge_init + result_30 = VCALL Vertice number + result_27 = VCALL Edge init + result_26 = VCALL Vertice add_out + let_result_31 = result_26 + let_result_32 = let_result_31 + GOTO label_6 + LABEL label_8 + result_5 = LOAD None + let_result_33 = v_4 + + RETURN let_result_33 +} +function Parse.c2i { + PARAM self + PARAM char + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL internal_5 + LOCAL instance_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL op_11 + LOCAL left_12 + LOCAL right_13 + LOCAL internal_14 + LOCAL instance_15 + LOCAL result_init_16 + LOCAL result_init_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL internal_23 + LOCAL instance_24 + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL result_27 + LOCAL result_28 + LOCAL op_29 + LOCAL left_30 + LOCAL right_31 + LOCAL internal_32 + LOCAL instance_33 + LOCAL result_init_34 + LOCAL result_init_35 + LOCAL result_36 + LOCAL result_37 + LOCAL op_38 + LOCAL left_39 + LOCAL right_40 + LOCAL internal_41 + LOCAL instance_42 + LOCAL result_init_43 + LOCAL result_init_44 + LOCAL result_45 + LOCAL result_46 + LOCAL op_47 + LOCAL left_48 + LOCAL right_49 + LOCAL internal_50 + LOCAL instance_51 + LOCAL result_init_52 + LOCAL result_init_53 + LOCAL result_54 + LOCAL result_55 + LOCAL op_56 + LOCAL left_57 + LOCAL right_58 + LOCAL internal_59 + LOCAL instance_60 + LOCAL result_init_61 + LOCAL result_init_62 + LOCAL result_63 + LOCAL result_64 + LOCAL op_65 + LOCAL left_66 + LOCAL right_67 + LOCAL internal_68 + LOCAL instance_69 + LOCAL result_init_70 + LOCAL result_init_71 + LOCAL result_72 + LOCAL result_73 + LOCAL op_74 + LOCAL left_75 + LOCAL right_76 + LOCAL internal_77 + LOCAL instance_78 + LOCAL result_init_79 + LOCAL result_init_80 + LOCAL result_81 + LOCAL result_82 + LOCAL op_83 + LOCAL left_84 + LOCAL right_85 + LOCAL internal_86 + LOCAL instance_87 + LOCAL result_init_88 + LOCAL result_init_89 + LOCAL result_90 + LOCAL instance_91 + LOCAL value_92 + LOCAL result_init_93 + LOCAL instance_94 + LOCAL value_95 + LOCAL result_init_96 + LOCAL instance_97 + LOCAL value_98 + LOCAL result_init_99 + LOCAL instance_100 + LOCAL value_101 + LOCAL result_init_102 + LOCAL instance_103 + LOCAL value_104 + LOCAL result_init_105 + LOCAL instance_106 + LOCAL value_107 + LOCAL result_init_108 + LOCAL instance_109 + LOCAL value_110 + LOCAL result_init_111 + LOCAL instance_112 + LOCAL value_113 + LOCAL result_init_114 + LOCAL instance_115 + LOCAL value_116 + LOCAL result_init_117 + LOCAL instance_118 + LOCAL value_119 + LOCAL result_init_120 + LOCAL instance_121 + LOCAL value_122 + LOCAL result_init_123 + + internal_5 = LOAD s_7 + instance_6 = ALLOCATE String + result_init_7 = CALL String_init + op_2 = CALL String_equals + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_9 + internal_14 = LOAD s_8 + instance_15 = ALLOCATE String + result_init_16 = CALL String_init + op_11 = CALL String_equals + result_10 = ALLOCATE Bool + result_init_17 = CALL Bool_init + IF result_10 GOTO label_10 + internal_23 = LOAD s_9 + instance_24 = ALLOCATE String + result_init_25 = CALL String_init + op_20 = CALL String_equals + result_19 = ALLOCATE Bool + result_init_26 = CALL Bool_init + IF result_19 GOTO label_11 + internal_32 = LOAD s_10 + instance_33 = ALLOCATE String + result_init_34 = CALL String_init + op_29 = CALL String_equals + result_28 = ALLOCATE Bool + result_init_35 = CALL Bool_init + IF result_28 GOTO label_12 + internal_41 = LOAD s_11 + instance_42 = ALLOCATE String + result_init_43 = CALL String_init + op_38 = CALL String_equals + result_37 = ALLOCATE Bool + result_init_44 = CALL Bool_init + IF result_37 GOTO label_13 + internal_50 = LOAD s_12 + instance_51 = ALLOCATE String + result_init_52 = CALL String_init + op_47 = CALL String_equals + result_46 = ALLOCATE Bool + result_init_53 = CALL Bool_init + IF result_46 GOTO label_14 + internal_59 = LOAD s_13 + instance_60 = ALLOCATE String + result_init_61 = CALL String_init + op_56 = CALL String_equals + result_55 = ALLOCATE Bool + result_init_62 = CALL Bool_init + IF result_55 GOTO label_15 + internal_68 = LOAD s_14 + instance_69 = ALLOCATE String + result_init_70 = CALL String_init + op_65 = CALL String_equals + result_64 = ALLOCATE Bool + result_init_71 = CALL Bool_init + IF result_64 GOTO label_16 + internal_77 = LOAD s_15 + instance_78 = ALLOCATE String + result_init_79 = CALL String_init + op_74 = CALL String_equals + result_73 = ALLOCATE Bool + result_init_80 = CALL Bool_init + IF result_73 GOTO label_17 + internal_86 = LOAD s_16 + instance_87 = ALLOCATE String + result_init_88 = CALL String_init + op_83 = CALL String_equals + result_82 = ALLOCATE Bool + result_init_89 = CALL Bool_init + IF result_82 GOTO label_18 + result_90 = VCALL Parse abort + instance_91 = ALLOCATE Int + value_92 = LOAD 0 + result_init_93 = CALL Int_init + result_81 = instance_91 + GOTO label_19 + LABEL label_18 + instance_94 = ALLOCATE Int + value_95 = LOAD 9 + result_init_96 = CALL Int_init + result_81 = instance_94 + LABEL label_19 + result_72 = result_81 + GOTO label_20 + LABEL label_17 + instance_97 = ALLOCATE Int + value_98 = LOAD 8 + result_init_99 = CALL Int_init + result_72 = instance_97 + LABEL label_20 + result_63 = result_72 + GOTO label_21 + LABEL label_16 + instance_100 = ALLOCATE Int + value_101 = LOAD 7 + result_init_102 = CALL Int_init + result_63 = instance_100 + LABEL label_21 + result_54 = result_63 + GOTO label_22 + LABEL label_15 + instance_103 = ALLOCATE Int + value_104 = LOAD 6 + result_init_105 = CALL Int_init + result_54 = instance_103 + LABEL label_22 + result_45 = result_54 + GOTO label_23 + LABEL label_14 + instance_106 = ALLOCATE Int + value_107 = LOAD 5 + result_init_108 = CALL Int_init + result_45 = instance_106 + LABEL label_23 + result_36 = result_45 + GOTO label_24 + LABEL label_13 + instance_109 = ALLOCATE Int + value_110 = LOAD 4 + result_init_111 = CALL Int_init + result_36 = instance_109 + LABEL label_24 + result_27 = result_36 + GOTO label_25 + LABEL label_12 + instance_112 = ALLOCATE Int + value_113 = LOAD 3 + result_init_114 = CALL Int_init + result_27 = instance_112 + LABEL label_25 + result_18 = result_27 + GOTO label_26 + LABEL label_11 + instance_115 = ALLOCATE Int + value_116 = LOAD 2 + result_init_117 = CALL Int_init + result_18 = instance_115 + LABEL label_26 + result_9 = result_18 + GOTO label_27 + LABEL label_10 + instance_118 = ALLOCATE Int + value_119 = LOAD 1 + result_init_120 = CALL Int_init + result_9 = instance_118 + LABEL label_27 + result_0 = result_9 + GOTO label_28 + LABEL label_9 + instance_121 = ALLOCATE Int + value_122 = LOAD 0 + result_init_123 = CALL Int_init + result_0 = instance_121 + LABEL label_28 + + RETURN result_0 +} +function Parse.a2i { + PARAM self + PARAM s + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL instance_19 + LOCAL value_20 + LOCAL result_init_21 + LOCAL internal_22 + LOCAL instance_23 + LOCAL result_init_24 + LOCAL result_init_25 + LOCAL result_26 + LOCAL result_27 + LOCAL op_28 + LOCAL left_29 + LOCAL right_30 + LOCAL result_31 + LOCAL instance_32 + LOCAL value_33 + LOCAL result_init_34 + LOCAL instance_35 + LOCAL value_36 + LOCAL result_init_37 + LOCAL internal_38 + LOCAL instance_39 + LOCAL result_init_40 + LOCAL result_init_41 + LOCAL result_42 + LOCAL result_43 + LOCAL result_44 + LOCAL result_45 + LOCAL op_46 + LOCAL left_47 + LOCAL right_48 + LOCAL result_49 + LOCAL instance_50 + LOCAL value_51 + LOCAL result_init_52 + LOCAL result_init_53 + LOCAL instance_54 + LOCAL value_55 + LOCAL result_init_56 + LOCAL result_57 + LOCAL op_58 + LOCAL internal_59 + LOCAL result_60 + LOCAL result_61 + LOCAL result_62 + LOCAL op_63 + LOCAL left_64 + LOCAL right_65 + LOCAL result_66 + LOCAL instance_67 + LOCAL value_68 + LOCAL result_init_69 + LOCAL result_init_70 + LOCAL instance_71 + LOCAL value_72 + LOCAL result_init_73 + LOCAL result_init_74 + LOCAL instance_75 + LOCAL value_76 + LOCAL result_init_77 + + result_5 = VCALL String length + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_1 GOTO label_29 + instance_16 = ALLOCATE Int + value_17 = LOAD 1 + result_init_18 = CALL Int_init + instance_19 = ALLOCATE Int + value_20 = LOAD 0 + result_init_21 = CALL Int_init + result_15 = VCALL String substr + internal_22 = LOAD s_17 + instance_23 = ALLOCATE String + result_init_24 = CALL String_init + left_13 = GetAttr result_15 value + right_14 = GetAttr instance_23 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_25 = CALL Bool_init + IF result_11 GOTO label_30 + instance_32 = ALLOCATE Int + value_33 = LOAD 1 + result_init_34 = CALL Int_init + instance_35 = ALLOCATE Int + value_36 = LOAD 0 + result_init_37 = CALL Int_init + result_31 = VCALL String substr + internal_38 = LOAD s_18 + instance_39 = ALLOCATE String + result_init_40 = CALL String_init + left_29 = GetAttr result_31 value + right_30 = GetAttr instance_39 value + op_28 = left_29 = right_30 + result_27 = ALLOCATE Bool + result_init_41 = CALL Bool_init + IF result_27 GOTO label_31 + result_42 = VCALL Parse a2i_aux + result_26 = result_42 + GOTO label_32 + LABEL label_31 + result_49 = VCALL String length + instance_50 = ALLOCATE Int + value_51 = LOAD 1 + result_init_52 = CALL Int_init + left_47 = GetAttr result_49 value + right_48 = GetAttr instance_50 value + op_46 = left_47 - right_48 + result_45 = ALLOCATE Int + result_init_53 = CALL Int_init + instance_54 = ALLOCATE Int + value_55 = LOAD 1 + result_init_56 = CALL Int_init + result_44 = VCALL String substr + result_43 = VCALL Parse a2i + result_26 = result_43 + LABEL label_32 + result_10 = result_26 + GOTO label_33 + LABEL label_30 + result_66 = VCALL String length + instance_67 = ALLOCATE Int + value_68 = LOAD 1 + result_init_69 = CALL Int_init + left_64 = GetAttr result_66 value + right_65 = GetAttr instance_67 value + op_63 = left_64 - right_65 + result_62 = ALLOCATE Int + result_init_70 = CALL Int_init + instance_71 = ALLOCATE Int + value_72 = LOAD 1 + result_init_73 = CALL Int_init + result_61 = VCALL String substr + result_60 = VCALL Parse a2i_aux + internal_59 = GetAttr result_60 value + op_58 = ~ internal_59 + result_57 = ALLOCATE Int + result_init_74 = CALL Int_init + result_10 = result_57 + LABEL label_33 + result_0 = result_10 + GOTO label_34 + LABEL label_29 + instance_75 = ALLOCATE Int + value_76 = LOAD 0 + result_init_77 = CALL Int_init + result_0 = instance_75 + LABEL label_34 + + RETURN result_0 +} +function Parse.a2i_aux { + PARAM self + PARAM s + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL int_3 + LOCAL result_4 + LOCAL j_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL i_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL instance_17 + LOCAL value_18 + LOCAL result_init_19 + LOCAL c_20 + LOCAL result_21 + LOCAL result_22 + LOCAL op_23 + LOCAL left_24 + LOCAL right_25 + LOCAL internal_26 + LOCAL instance_27 + LOCAL result_init_28 + LOCAL result_init_29 + LOCAL result_30 + LOCAL result_31 + LOCAL op_32 + LOCAL left_33 + LOCAL right_34 + LOCAL internal_35 + LOCAL instance_36 + LOCAL result_init_37 + LOCAL result_init_38 + LOCAL result_39 + LOCAL op_40 + LOCAL left_41 + LOCAL right_42 + LOCAL result_43 + LOCAL op_44 + LOCAL left_45 + LOCAL right_46 + LOCAL instance_47 + LOCAL value_48 + LOCAL result_init_49 + LOCAL result_init_50 + LOCAL result_51 + LOCAL result_52 + LOCAL instance_53 + LOCAL value_54 + LOCAL result_init_55 + LOCAL result_init_56 + LOCAL result_57 + LOCAL result_58 + LOCAL op_59 + LOCAL left_60 + LOCAL right_61 + LOCAL instance_62 + LOCAL value_63 + LOCAL result_init_64 + LOCAL result_init_65 + LOCAL result_66 + LOCAL result_67 + LOCAL result_68 + LOCAL op_69 + LOCAL left_70 + LOCAL right_71 + LOCAL result_init_72 + LOCAL internal_73 + LOCAL instance_74 + LOCAL result_init_75 + LOCAL internal_76 + LOCAL instance_77 + LOCAL result_init_78 + LOCAL result_79 + LOCAL result_80 + LOCAL result_81 + LOCAL op_82 + LOCAL left_83 + LOCAL right_84 + LOCAL result_85 + LOCAL op_86 + LOCAL left_87 + LOCAL right_88 + LOCAL result_89 + LOCAL result_init_90 + LOCAL instance_91 + LOCAL value_92 + LOCAL result_init_93 + LOCAL result_init_94 + LOCAL result_95 + LOCAL op_96 + LOCAL left_97 + LOCAL right_98 + LOCAL instance_99 + LOCAL value_100 + LOCAL result_init_101 + LOCAL result_init_102 + LOCAL result_103 + LOCAL result_104 + LOCAL result_105 + LOCAL result_106 + LOCAL op_107 + LOCAL left_108 + LOCAL right_109 + LOCAL result_110 + LOCAL op_111 + LOCAL left_112 + LOCAL right_113 + LOCAL result_114 + LOCAL result_init_115 + LOCAL instance_116 + LOCAL value_117 + LOCAL result_init_118 + LOCAL result_init_119 + LOCAL result_120 + LOCAL op_121 + LOCAL left_122 + LOCAL right_123 + LOCAL instance_124 + LOCAL value_125 + LOCAL result_init_126 + LOCAL result_init_127 + LOCAL result_128 + LOCAL result_129 + LOCAL let_result_130 + LOCAL let_result_131 + LOCAL let_result_132 + LOCAL let_result_133 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + int_3 = instance_0 + result_4 = VCALL String length + j_5 = result_4 + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + i_9 = instance_6 + LABEL label_35 + left_13 = GetAttr i_9 value + right_14 = GetAttr j_5 value + op_12 = left_13 < right_14 + result_11 = ALLOCATE Bool + result_init_15 = CALL Bool_init + IF result_11 GOTO label_36 + GOTO label_37 + LABEL label_36 + instance_17 = ALLOCATE Int + value_18 = LOAD 1 + result_init_19 = CALL Int_init + result_16 = VCALL String substr + c_20 = result_16 + internal_26 = LOAD s_18 + instance_27 = ALLOCATE String + result_init_28 = CALL String_init + op_23 = CALL String_equals + result_22 = ALLOCATE Bool + result_init_29 = CALL Bool_init + IF result_22 GOTO label_38 + internal_35 = LOAD s_4 + instance_36 = ALLOCATE String + result_init_37 = CALL String_init + op_32 = CALL String_equals + result_31 = ALLOCATE Bool + result_init_38 = CALL Bool_init + IF result_31 GOTO label_39 + instance_47 = ALLOCATE Int + value_48 = LOAD 10 + result_init_49 = CALL Int_init + left_45 = GetAttr int_3 value + right_46 = GetAttr instance_47 value + op_44 = left_45 * right_46 + result_43 = ALLOCATE Int + result_init_50 = CALL Int_init + instance_53 = ALLOCATE Int + value_54 = LOAD 1 + result_init_55 = CALL Int_init + result_52 = VCALL String substr + result_51 = VCALL Parse c2i + left_41 = GetAttr result_43 value + right_42 = GetAttr result_51 value + op_40 = left_41 + right_42 + result_39 = ALLOCATE Int + result_init_56 = CALL Int_init + int_3 = result_39 + instance_62 = ALLOCATE Int + value_63 = LOAD 1 + result_init_64 = CALL Int_init + left_60 = GetAttr i_9 value + right_61 = GetAttr instance_62 value + op_59 = left_60 + right_61 + result_58 = ALLOCATE Int + result_init_65 = CALL Int_init + i_9 = result_58 + left_70 = GetAttr i_9 value + right_71 = GetAttr j_5 value + op_69 = left_70 = right_71 + result_68 = ALLOCATE Bool + result_init_72 = CALL Bool_init + IF result_68 GOTO label_40 + internal_73 = LOAD empty_str + instance_74 = ALLOCATE String + result_init_75 = CALL String_init + result_67 = instance_74 + GOTO label_41 + LABEL label_40 + internal_76 = LOAD empty_str + instance_77 = ALLOCATE String + result_init_78 = CALL String_init + SetAttr self rest instance_77 + result_67 = instance_77 + LABEL label_41 + result_30 = result_67 + GOTO label_42 + LABEL label_39 + result_89 = VCALL String length + left_87 = GetAttr result_89 value + right_88 = GetAttr i_9 value + op_86 = left_87 - right_88 + result_85 = ALLOCATE Int + result_init_90 = CALL Int_init + instance_91 = ALLOCATE Int + value_92 = LOAD 1 + result_init_93 = CALL Int_init + left_83 = GetAttr result_85 value + right_84 = GetAttr instance_91 value + op_82 = left_83 - right_84 + result_81 = ALLOCATE Int + result_init_94 = CALL Int_init + instance_99 = ALLOCATE Int + value_100 = LOAD 1 + result_init_101 = CALL Int_init + left_97 = GetAttr i_9 value + right_98 = GetAttr instance_99 value + op_96 = left_97 + right_98 + result_95 = ALLOCATE Int + result_init_102 = CALL Int_init + result_80 = VCALL String substr + SetAttr self rest result_80 + i_9 = j_5 + result_30 = j_5 + LABEL label_42 + result_21 = result_30 + GOTO label_43 + LABEL label_38 + result_114 = VCALL String length + left_112 = GetAttr result_114 value + right_113 = GetAttr i_9 value + op_111 = left_112 - right_113 + result_110 = ALLOCATE Int + result_init_115 = CALL Int_init + instance_116 = ALLOCATE Int + value_117 = LOAD 1 + result_init_118 = CALL Int_init + left_108 = GetAttr result_110 value + right_109 = GetAttr instance_116 value + op_107 = left_108 - right_109 + result_106 = ALLOCATE Int + result_init_119 = CALL Int_init + instance_124 = ALLOCATE Int + value_125 = LOAD 1 + result_init_126 = CALL Int_init + left_122 = GetAttr i_9 value + right_123 = GetAttr instance_124 value + op_121 = left_122 + right_123 + result_120 = ALLOCATE Int + result_init_127 = CALL Int_init + result_105 = VCALL String substr + SetAttr self rest result_105 + i_9 = j_5 + result_21 = j_5 + LABEL label_43 + let_result_130 = result_21 + GOTO label_35 + LABEL label_37 + result_10 = LOAD None + let_result_131 = result_10 + let_result_132 = let_result_131 + let_result_133 = int_3 + + RETURN let_result_133 +} +function Main_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + + result_0 = CALL Parse_init + + RETURN + result_1 = VCALL Main read_input + SetAttr self g result_1 +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL g_1 + LOCAL result_2 + LOCAL g_3 + + g_1 = GetAttr self g + result_0 = VCALL Graph print_V + g_3 = GetAttr self g + result_2 = VCALL Graph print_E + + RETURN result_2 +} +function BoolOp_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL Object_init + + RETURN +} +function BoolOp.and { + PARAM self + PARAM b1 + PARAM b2 + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + IF b1 GOTO label_44 + instance_1 = ALLOCATE Bool + value_2 = LOAD 0 + result_init_3 = CALL Bool_init + result_0 = instance_1 + GOTO label_45 + LABEL label_44 + result_0 = b2 + LABEL label_45 + + RETURN result_0 +} +function BoolOp.or { + PARAM self + PARAM b1 + PARAM b2 + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + IF b1 GOTO label_46 + result_0 = b2 + GOTO label_47 + LABEL label_46 + instance_1 = ALLOCATE Bool + value_2 = LOAD 0 + result_init_3 = CALL Bool_init + result_0 = instance_1 + LABEL label_47 + + RETURN result_0 +} \ No newline at end of file diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips deleted file mode 100644 index 48c5180b..00000000 --- a/tests/codegen/hairyscary.mips +++ /dev/null @@ -1,1087 +0,0 @@ -.data -dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" -case_void: .asciiz "Runtime Error: A case on void" -case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" -div_zero: .asciiz "Runtime Error: Division by zero" -substr: .asciiz "Runtime Error: Substring out of range" -heap: .asciiz "Runtime Error: Heap overflow" -temp_string: .space 2048 -void: .word 0 -Object_name: .asciiz "Object" -Object_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -Int_name: .asciiz "Int" -Int_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -String_name: .asciiz "String" -String_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word String.length -.word String.concat -.word String.substr -Bool_name: .asciiz "Bool" -Bool_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -Foo_name: .asciiz "Foo" -Foo_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -.word Bazz.printh -.word Foo.doh -Bar_name: .asciiz "Bar" -Bar_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -.word Bazz.printh -.word Foo.doh -Razz_name: .asciiz "Razz" -Razz_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -.word Bazz.printh -.word Foo.doh -Bazz_name: .asciiz "Bazz" -Bazz_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -.word Bazz.printh -.word Bazz.doh -Main_name: .asciiz "Main" -Main_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word Main.main -s_0: .asciiz "Abort called from class " -s_1: .asciiz " -" -empty_str: .asciiz "" -s_3: .asciiz "do nothing" -.text -dispatch_void_error: -la $a0 dispatch_void -li $v0, 4 -syscall -li $v0, 10 -syscall -case_void_error: -la $a0 case_void -li $v0, 4 -syscall -li $v0, 10 -syscall -case_no_match_error: -la $a0 case_no_match -li $v0, 4 -syscall -li $v0, 10 -syscall -div_zero_error: -la $a0 div_zero -li $v0, 4 -syscall -li $v0, 10 -syscall -substr_error: -la $a0 substr -li $v0, 4 -syscall -li $v0, 10 -syscall -heap_error: -la $a0 heap -li $v0, 4 -syscall -li $v0, 10 -syscall -main: -addi $sp, $sp, -8 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Main_init -sw $a1, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Main.main -sw $a1, 8($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Object_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 8 -jr $ra -Object.abort: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_0 -sw $t0, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -li $v0, 4 -syscall -la $t0, s_1 -sw $t0, 12($sp) -lw $a0, 12($sp) -li $v0, 4 -syscall -li $v0, 10 -syscall -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -Object.type_name: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -Object.copy: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $a0, 8($t0) -mul $a0, $a0, 4 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t1, $v0 -li $a0, 0 -lw $t3, 8($t0) -copy_object_word: -lw $t2, 0($t0) -sw $t2, 0($t1) -addi $t0, $t0, 4 -addi $t1, $t1, 4 -addi $a0, $a0, 1 -blt $a0, $t3, copy_object_word -sw $v0, 4($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -IO_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 8 -jr $ra -IO.out_string: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -IO.out_int: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -li $v0 , 1 -lw $a0 , 4($sp) -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -IO.in_string: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $a0, temp_string -li $a1, 2048 -li $v0, 8 -syscall -move $t0, $a0 -jump_read_str_char: -li $t1, 0 -lb $t1, 0($t0) -beqz $t1, analize_str_end -addi $t0, $t0, 1 -j jump_read_str_char -analize_str_end: -addi $t0, $t0, -1 -li $t1, 0 -lb $t1, 0($t0) -bne $t1, 10, finish_jump_read_str_char -sb $0, 0($t0) -addi $t0, $t0, -1 -lb $t1, 0($t0) -bne $t1, 13, finish_jump_read_str_char -sb $0, 0($t0) -j analize_str_end -finish_jump_read_str_char: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -IO.in_int: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $v0, 5 -syscall -sw $v0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -String_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -String.length: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t0, 16($t0) -li $a0, 0 -count_char: -lb $t1, 0($t0) -beqz $t1, finish_chars_count -addi $t0, $t0, 1 -addi $a0, $a0, 1 -j count_char -finish_chars_count: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -String.concat: -addi $sp, $sp, -36 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 40($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 8($sp) -lw $t0, 44($sp) -lw $t1, 16($t0) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 16($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t0, 24($sp) -add $a0, $a0, $t0 -addi $a0, $a0, 1 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t3, $v0 -lw $t0, 4($sp) -lw $t1, 12($sp) -copy_arg1_char: -lb $t2, 0($t0) -sb $t2, 0($v0) -beqz $t2, concat_arg2_char -addi $t0, $t0, 1 -addi $v0, $v0, 1 -j copy_arg1_char -concat_arg2_char: -lb $t2, 0($t1) -sb $t2, 0($v0) -beqz $t2, finish_arg2_concat -addi $t1, $t1, 1 -addi $v0, $v0, 1 -j concat_arg2_char -finish_arg2_concat: -sb $0, ($v0) -sw $t3, 28($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 36($sp) -lw $a1, 32($sp) -lw $ra, 0($sp) -addi $sp, $sp, 48 -jr $ra -String.substr: -addi $sp, $sp, -20 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -addi $a0, $a0, 1 -li $v0, 9 -syscall -bge $v0, $sp heap_error -lw $t0, 4($sp) -lw $t1, 8($sp) -lw $t4, 24($sp) -lw $t2, 16($t4) -bltz $t0, substr_error -li $a0, 0 -jump_str_char: -beq $a0, $t0, finish_index_jump -addi $a0, $a0, 1 -addi $t2, $t2, 1 -beq $t2, $zero, substr_error -j jump_str_char -finish_index_jump: -li $a0, 0 -move $t3, $v0 -copy_substr_char: -beq $a0, $t1 finish_substr_copy -li $t0, 0 -lb $t0, 0($t2) -sb $t0, 0($v0) -addi $t2, $t2, 1 -beq $t2, $zero, substr_error -addi $v0, $v0, 1 -addi $a0, $a0, 1 -j copy_substr_char -finish_substr_copy: -sb $0, ($v0) -sw $t3, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 20($sp) -lw $a1, 16($sp) -lw $ra, 0($sp) -addi $sp, $sp, 36 -jr $ra -Bool_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Int_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -String_equals: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 20($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $t1, 4($sp) -lw $t2, 8($sp) -compare_str_char: -li $t3, 0 -lb $t3, 0($t1) -li $t4, 0 -lb $t4, 0($t2) -seq $a0, $t3, $t4 -beqz $a0, finish_compare_str -beqz $t3, finish_compare_str -beqz $t4, finish_compare_str -addi $t1, $t1, 1 -addi $t2, $t2, 1 -j compare_str_char -finish_compare_str: -sw $a0, 12($sp) -lw $a1, 12($sp) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -Foo_init: -addi $sp, $sp, -16 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bazz_init -sw $a1, 4($sp) -move $a1, $zero -lw $t0, 20($sp) -la $t1, void -sw $t1, 28($t0) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 16($sp) -lw $t0, 20($sp) -lw $t1, 8($sp) -sw $t1, 32($t0) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -Foo.doh: -addi $sp, $sp, -56 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t1, 4($sp) -sw $t1, 8($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 32($sp) -la $t0, 2 -sw $t0, 36($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 40($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t1, 24($sp) -add $a0, $a0, $t1 -sw $a0, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 44($sp) -lw $t0, 60($sp) -lw $t1, 12($sp) -sw $t1, 16($t0) -lw $t0, 60($sp) -lw $t1, 24($t0) -sw $t1, 52($sp) -lw $t1, 52($sp) -sw $t1, 56($sp) -lw $a1, 56($sp) -lw $ra, 0($sp) -addi $sp, $sp, 64 -jr $ra -Bar_init: -addi $sp, $sp, -16 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Razz_init -sw $a1, 4($sp) -move $a1, $zero -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 16($sp) -lw $t0, 20($sp) -lw $t1, 8($sp) -sw $t1, 44($t0) -lw $t0, 20($sp) -la $t1, void -sw $t1, 48($t0) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -Razz_init: -addi $sp, $sp, -16 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Foo_init -sw $a1, 4($sp) -move $a1, $zero -lw $t0, 20($sp) -la $t1, void -sw $t1, 36($t0) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 16($sp) -lw $t0, 20($sp) -lw $t1, 8($sp) -sw $t1, 40($t0) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -Bazz_init: -addi $sp, $sp, -16 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal IO_init -sw $a1, 4($sp) -move $a1, $zero -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 16($sp) -lw $t0, 20($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -lw $t0, 20($sp) -la $t1, void -sw $t1, 20($t0) -lw $t0, 20($sp) -la $t1, void -sw $t1, 24($t0) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -Bazz.printh: -addi $sp, $sp, -20 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 20($sp) -lw $a1, 12($sp) -lw $ra, 0($sp) -addi $sp, $sp, 28 -jr $ra -Bazz.doh: -addi $sp, $sp, -56 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t1, 4($sp) -sw $t1, 8($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 32($sp) -la $t0, 1 -sw $t0, 36($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 40($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t1, 24($sp) -add $a0, $a0, $t1 -sw $a0, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 44($sp) -lw $t0, 60($sp) -lw $t1, 12($sp) -sw $t1, 16($t0) -lw $t0, 60($sp) -lw $t1, 24($t0) -sw $t1, 52($sp) -lw $t1, 52($sp) -sw $t1, 56($sp) -lw $a1, 56($sp) -lw $ra, 0($sp) -addi $sp, $sp, 64 -jr $ra -Main_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Object_init -sw $a1, 4($sp) -move $a1, $zero -lw $t0, 8($sp) -la $t1, void -sw $t1, 16($t0) -lw $t0, 8($sp) -la $t1, void -sw $t1, 20($t0) -lw $t0, 8($sp) -la $t1, void -sw $t1, 24($t0) -lw $t0, 8($sp) -la $t1, void -sw $t1, 28($t0) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Main.main: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_3 -sw $t0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra \ No newline at end of file diff --git a/tests/codegen/io.cil b/tests/codegen/io.cil new file mode 100644 index 00000000..81e81085 --- /dev/null +++ b/tests/codegen/io.cil @@ -0,0 +1,483 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type A { + attribute io + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_a : A.out_a +} +type B { + attribute io + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_a : A.out_a + method out_b : B.out_b +} +type C { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method out_c : C.out_c +} +type D { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method out_c : C.out_c + method out_d : D.out_d +} +type Main { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: A: Hello world + +s_4: B: Hello world + +s_5: C: Hello world + +s_6: D: Hello world + +s_7: Done. + + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT msg_0 + type_name_1 = TYPEOF self + PRINT type_name_1 + eol_2 = LOAD s_1 + PRINT eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function A_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_0 = CALL Object_init + + RETURN + result_1 = ALLOCATE IO + init_2 = CALL IO_init + SetAttr self io result_1 +} +function A.out_a { + PARAM self + + LOCAL result_0 + LOCAL A.io + LOCAL internal_2 + LOCAL instance_3 + LOCAL result_init_4 + + A.io = GetAttr self io + internal_2 = LOAD s_3 + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + result_0 = VCALL IO out_string + + RETURN result_0 +} +function B_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL A_init + + RETURN +} +function B.out_b { + PARAM self + + LOCAL result_0 + LOCAL B.io + LOCAL internal_2 + LOCAL instance_3 + LOCAL result_init_4 + + B.io = GetAttr self io + internal_2 = LOAD s_4 + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + result_0 = VCALL IO out_string + + RETURN result_0 +} +function C_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function C.out_c { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_5 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL C out_string + + RETURN result_0 +} +function D_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL C_init + + RETURN +} +function D.out_d { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_6 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL D out_string + + RETURN result_0 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL result_3 + LOCAL result_4 + LOCAL init_5 + LOCAL result_6 + LOCAL result_7 + LOCAL init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL init_11 + LOCAL result_12 + LOCAL internal_13 + LOCAL instance_14 + LOCAL result_init_15 + + result_1 = ALLOCATE A + init_2 = CALL A_init + result_0 = VCALL A out_a + result_4 = ALLOCATE B + init_5 = CALL B_init + result_3 = VCALL B out_b + result_7 = ALLOCATE C + init_8 = CALL C_init + result_6 = VCALL C out_c + result_10 = ALLOCATE D + init_11 = CALL D_init + result_9 = VCALL D out_d + internal_13 = LOAD s_7 + instance_14 = ALLOCATE String + result_init_15 = CALL String_init + result_12 = VCALL Main out_string + + RETURN result_12 +} \ No newline at end of file diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index a493c7a6..1371c4d8 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -638,21 +638,41 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra A_init: -addi $sp, $sp, -4 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Object_init sw $a1, 4($sp) move $a1, $zero -lw $t0, 8($sp) -la $t1, void +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 1 +sw $t1, 0($t0) +la $t1, IO_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, IO_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 12($sp) +lw $t0, 16($sp) +lw $t1, 8($sp) sw $t1, 16($t0) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 20 jr $ra A.out_a: addi $sp, $sp, -20 diff --git a/tests/codegen/io_test.cil b/tests/codegen/io_test.cil new file mode 100644 index 00000000..1b263260 --- /dev/null +++ b/tests/codegen/io_test.cil @@ -0,0 +1,478 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type A { + attribute io + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_a : A.out_a +} +type B { + attribute io + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_a : A.out_a + method out_b : B.out_b +} +type C { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method out_c : C.out_c +} +type D { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method out_c : C.out_c + method out_d : D.out_d +} +type Main { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: A: Hello world\n +s_4: B: Hello world\n +s_5: C: Hello world\n +s_6: D: Hello world\n +s_7: Done.\n + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function A_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_0 = CALL Object_init + + RETURN + result_1 = ALLOCATE IO + init_2 = CALL IO_init + SetAttr self io result_1 +} +function A.out_a { + PARAM self + + LOCAL result_0 + LOCAL io_1 + LOCAL internal_2 + LOCAL instance_3 + LOCAL result_init_4 + + io_1 = GetAttr self io + internal_2 = LOAD s_3 + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + result_0 = VCALL IO out_string + + RETURN result_0 +} +function B_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL A_init + + RETURN +} +function B.out_b { + PARAM self + + LOCAL result_0 + LOCAL io_1 + LOCAL internal_2 + LOCAL instance_3 + LOCAL result_init_4 + + io_1 = GetAttr self io + internal_2 = LOAD s_4 + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + result_0 = VCALL IO out_string + + RETURN result_0 +} +function C_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function C.out_c { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_5 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL C out_string + + RETURN result_0 +} +function D_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL C_init + + RETURN +} +function D.out_d { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_6 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL D out_string + + RETURN result_0 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL result_3 + LOCAL result_4 + LOCAL init_5 + LOCAL result_6 + LOCAL result_7 + LOCAL init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL init_11 + LOCAL result_12 + LOCAL internal_13 + LOCAL instance_14 + LOCAL result_init_15 + + result_1 = ALLOCATE A + init_2 = CALL A_init + result_0 = VCALL A out_a + result_4 = ALLOCATE B + init_5 = CALL B_init + result_3 = VCALL B out_b + result_7 = ALLOCATE C + init_8 = CALL C_init + result_6 = VCALL C out_c + result_10 = ALLOCATE D + init_11 = CALL D_init + result_9 = VCALL D out_d + internal_13 = LOAD s_7 + instance_14 = ALLOCATE String + result_init_15 = CALL String_init + result_12 = VCALL Main out_string + + RETURN result_12 +} \ No newline at end of file diff --git a/tests/codegen/life_test.cil b/tests/codegen/life_test.cil new file mode 100644 index 00000000..a40a1a3d --- /dev/null +++ b/tests/codegen/life_test.cil @@ -0,0 +1,3379 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Board { + attribute rows + attribute columns + attribute board_size + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method size_of_board : Board.size_of_board + method board_init : Board.board_init +} +type CellularAutomaton { + attribute rows + attribute columns + attribute board_size + attribute population_map + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method size_of_board : Board.size_of_board + method board_init : Board.board_init + method init : CellularAutomaton.init + method print : CellularAutomaton.print + method num_cells : CellularAutomaton.num_cells + method cell : CellularAutomaton.cell + method north : CellularAutomaton.north + method south : CellularAutomaton.south + method east : CellularAutomaton.east + method west : CellularAutomaton.west + method northwest : CellularAutomaton.northwest + method northeast : CellularAutomaton.northeast + method southeast : CellularAutomaton.southeast + method southwest : CellularAutomaton.southwest + method neighbors : CellularAutomaton.neighbors + method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution + method evolve : CellularAutomaton.evolve + method option : CellularAutomaton.option + method prompt : CellularAutomaton.prompt + method prompt2 : CellularAutomaton.prompt2 +} +type Main { + attribute rows + attribute columns + attribute board_size + attribute population_map + attribute cells + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method size_of_board : Board.size_of_board + method board_init : Board.board_init + method init : CellularAutomaton.init + method print : CellularAutomaton.print + method num_cells : CellularAutomaton.num_cells + method cell : CellularAutomaton.cell + method north : CellularAutomaton.north + method south : CellularAutomaton.south + method east : CellularAutomaton.east + method west : CellularAutomaton.west + method northwest : CellularAutomaton.northwest + method northeast : CellularAutomaton.northeast + method southeast : CellularAutomaton.southeast + method southwest : CellularAutomaton.southwest + method neighbors : CellularAutomaton.neighbors + method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution + method evolve : CellularAutomaton.evolve + method option : CellularAutomaton.option + method prompt : CellularAutomaton.prompt + method prompt2 : CellularAutomaton.prompt2 + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: \n +s_4: +s_5: X +s_6: - +s_7: \nPlease chose a number:\n +s_8: \t1: A cross\n +s_9: \t2: A slash from the upper left to lower right\n +s_10: \t3: A slash from the upper right to lower left\n +s_11: \t4: An X\n +s_12: \t5: A greater than sign \n +s_13: \t6: A less than sign\n +s_14: \t7: Two greater than signs\n +s_15: \t8: Two less than signs\n +s_16: \t9: A 'V'\n +s_17: \t10: An inverse 'V'\n +s_18: \t11: Numbers 9 and 10 combined\n +s_19: \t12: A full grid\n +s_20: \t13: A 'T'\n +s_21: \t14: A plus '+'\n +s_22: \t15: A 'W'\n +s_23: \t16: An 'M'\n +s_24: \t17: An 'E'\n +s_25: \t18: A '3'\n +s_26: \t19: An 'O'\n +s_27: \t20: An '8'\n +s_28: \t21: An 'S'\n +s_29: Your choice => +s_30: +s_31: XXXX X XX X XXXX +s_32: XX X XX X XX X XX X XX +s_33: XX X XX X XX +s_34: XXX X X X X XXXX +s_35: XXXXX X XXXXX X XXXX +s_36: X X X X X X X +s_37: X X X X X X X +s_38: X X XXXXX X X +s_39: XXXXX X X X X +s_40: XXXXXXXXXXXXXXXXXXXXXXXXX +s_41: X X X X X X X X +s_42: X X X X X +s_43: X X X X X +s_44: X XX X X X +s_45: X X X XX X +s_46: X X X X X +s_47: X X X X X +s_48: X X X X X X X X X +s_49: X X X X X +s_50: X X X X X +s_51: XX XXXX XXXX XX +s_52: Would you like to continue with the next generation? \n +s_53: Please use lowercase y or n for your answer [y]: +s_54: n +s_55: \n\n +s_56: Would you like to choose a background pattern? \n +s_57: Please use lowercase y or n for your answer [n]: +s_58: y +s_59: Welcome to the Game of Life.\n +s_60: There are many initial states to choose from. \n + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Board_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + LOCAL instance_4 + LOCAL value_5 + LOCAL result_init_6 + LOCAL instance_7 + LOCAL value_8 + LOCAL result_init_9 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self rows instance_1 + instance_4 = ALLOCATE Int + value_5 = LOAD 0 + result_init_6 = CALL Int_init + SetAttr self columns instance_4 + instance_7 = ALLOCATE Int + value_8 = LOAD 0 + result_init_9 = CALL Int_init + SetAttr self board_size instance_7 +} +function Board.size_of_board { + PARAM self + PARAM initial + + LOCAL result_0 + + result_0 = VCALL String length + + RETURN result_0 +} +function Board.board_init { + PARAM self + PARAM start + + LOCAL result_0 + LOCAL size_1 + LOCAL result_2 + LOCAL result_3 + LOCAL op_4 + LOCAL left_5 + LOCAL right_6 + LOCAL instance_7 + LOCAL value_8 + LOCAL result_init_9 + LOCAL result_init_10 + LOCAL result_11 + LOCAL result_12 + LOCAL op_13 + LOCAL left_14 + LOCAL right_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL result_20 + LOCAL result_21 + LOCAL op_22 + LOCAL left_23 + LOCAL right_24 + LOCAL instance_25 + LOCAL value_26 + LOCAL result_init_27 + LOCAL result_init_28 + LOCAL result_29 + LOCAL result_30 + LOCAL op_31 + LOCAL left_32 + LOCAL right_33 + LOCAL instance_34 + LOCAL value_35 + LOCAL result_init_36 + LOCAL result_init_37 + LOCAL result_38 + LOCAL result_39 + LOCAL op_40 + LOCAL left_41 + LOCAL right_42 + LOCAL instance_43 + LOCAL value_44 + LOCAL result_init_45 + LOCAL result_init_46 + LOCAL result_47 + LOCAL result_48 + LOCAL op_49 + LOCAL left_50 + LOCAL right_51 + LOCAL instance_52 + LOCAL value_53 + LOCAL result_init_54 + LOCAL result_init_55 + LOCAL instance_56 + LOCAL value_57 + LOCAL result_init_58 + LOCAL result_59 + LOCAL instance_60 + LOCAL value_61 + LOCAL result_init_62 + LOCAL result_63 + LOCAL result_64 + LOCAL instance_65 + LOCAL value_66 + LOCAL result_init_67 + LOCAL result_68 + LOCAL instance_69 + LOCAL value_70 + LOCAL result_init_71 + LOCAL result_72 + LOCAL result_73 + LOCAL instance_74 + LOCAL value_75 + LOCAL result_init_76 + LOCAL result_77 + LOCAL instance_78 + LOCAL value_79 + LOCAL result_init_80 + LOCAL result_81 + LOCAL result_82 + LOCAL instance_83 + LOCAL value_84 + LOCAL result_init_85 + LOCAL result_86 + LOCAL instance_87 + LOCAL value_88 + LOCAL result_init_89 + LOCAL result_90 + LOCAL result_91 + LOCAL instance_92 + LOCAL value_93 + LOCAL result_init_94 + LOCAL result_95 + LOCAL instance_96 + LOCAL value_97 + LOCAL result_init_98 + LOCAL result_99 + LOCAL result_100 + LOCAL instance_101 + LOCAL value_102 + LOCAL result_init_103 + LOCAL result_104 + LOCAL instance_105 + LOCAL value_106 + LOCAL result_init_107 + LOCAL result_108 + LOCAL result_109 + LOCAL instance_110 + LOCAL value_111 + LOCAL result_init_112 + LOCAL result_113 + LOCAL instance_114 + LOCAL value_115 + LOCAL result_init_116 + LOCAL result_117 + LOCAL result_118 + LOCAL let_result_119 + + result_0 = VCALL Board size_of_board + size_1 = result_0 + instance_7 = ALLOCATE Int + value_8 = LOAD 15 + result_init_9 = CALL Int_init + left_5 = GetAttr size_1 value + right_6 = GetAttr instance_7 value + op_4 = left_5 = right_6 + result_3 = ALLOCATE Bool + result_init_10 = CALL Bool_init + IF result_3 GOTO label_1 + instance_16 = ALLOCATE Int + value_17 = LOAD 16 + result_init_18 = CALL Int_init + left_14 = GetAttr size_1 value + right_15 = GetAttr instance_16 value + op_13 = left_14 = right_15 + result_12 = ALLOCATE Bool + result_init_19 = CALL Bool_init + IF result_12 GOTO label_2 + instance_25 = ALLOCATE Int + value_26 = LOAD 20 + result_init_27 = CALL Int_init + left_23 = GetAttr size_1 value + right_24 = GetAttr instance_25 value + op_22 = left_23 = right_24 + result_21 = ALLOCATE Bool + result_init_28 = CALL Bool_init + IF result_21 GOTO label_3 + instance_34 = ALLOCATE Int + value_35 = LOAD 21 + result_init_36 = CALL Int_init + left_32 = GetAttr size_1 value + right_33 = GetAttr instance_34 value + op_31 = left_32 = right_33 + result_30 = ALLOCATE Bool + result_init_37 = CALL Bool_init + IF result_30 GOTO label_4 + instance_43 = ALLOCATE Int + value_44 = LOAD 25 + result_init_45 = CALL Int_init + left_41 = GetAttr size_1 value + right_42 = GetAttr instance_43 value + op_40 = left_41 = right_42 + result_39 = ALLOCATE Bool + result_init_46 = CALL Bool_init + IF result_39 GOTO label_5 + instance_52 = ALLOCATE Int + value_53 = LOAD 28 + result_init_54 = CALL Int_init + left_50 = GetAttr size_1 value + right_51 = GetAttr instance_52 value + op_49 = left_50 = right_51 + result_48 = ALLOCATE Bool + result_init_55 = CALL Bool_init + IF result_48 GOTO label_6 + instance_56 = ALLOCATE Int + value_57 = LOAD 5 + result_init_58 = CALL Int_init + SetAttr self rows instance_56 + instance_60 = ALLOCATE Int + value_61 = LOAD 5 + result_init_62 = CALL Int_init + SetAttr self columns instance_60 + SetAttr self board_size size_1 + result_47 = size_1 + GOTO label_7 + LABEL label_6 + instance_65 = ALLOCATE Int + value_66 = LOAD 7 + result_init_67 = CALL Int_init + SetAttr self rows instance_65 + instance_69 = ALLOCATE Int + value_70 = LOAD 4 + result_init_71 = CALL Int_init + SetAttr self columns instance_69 + SetAttr self board_size size_1 + result_47 = size_1 + LABEL label_7 + result_38 = result_47 + GOTO label_8 + LABEL label_5 + instance_74 = ALLOCATE Int + value_75 = LOAD 5 + result_init_76 = CALL Int_init + SetAttr self rows instance_74 + instance_78 = ALLOCATE Int + value_79 = LOAD 5 + result_init_80 = CALL Int_init + SetAttr self columns instance_78 + SetAttr self board_size size_1 + result_38 = size_1 + LABEL label_8 + result_29 = result_38 + GOTO label_9 + LABEL label_4 + instance_83 = ALLOCATE Int + value_84 = LOAD 3 + result_init_85 = CALL Int_init + SetAttr self rows instance_83 + instance_87 = ALLOCATE Int + value_88 = LOAD 7 + result_init_89 = CALL Int_init + SetAttr self columns instance_87 + SetAttr self board_size size_1 + result_29 = size_1 + LABEL label_9 + result_20 = result_29 + GOTO label_10 + LABEL label_3 + instance_92 = ALLOCATE Int + value_93 = LOAD 4 + result_init_94 = CALL Int_init + SetAttr self rows instance_92 + instance_96 = ALLOCATE Int + value_97 = LOAD 5 + result_init_98 = CALL Int_init + SetAttr self columns instance_96 + SetAttr self board_size size_1 + result_20 = size_1 + LABEL label_10 + result_11 = result_20 + GOTO label_11 + LABEL label_2 + instance_101 = ALLOCATE Int + value_102 = LOAD 4 + result_init_103 = CALL Int_init + SetAttr self rows instance_101 + instance_105 = ALLOCATE Int + value_106 = LOAD 4 + result_init_107 = CALL Int_init + SetAttr self columns instance_105 + SetAttr self board_size size_1 + result_11 = size_1 + LABEL label_11 + result_2 = result_11 + GOTO label_12 + LABEL label_1 + instance_110 = ALLOCATE Int + value_111 = LOAD 3 + result_init_112 = CALL Int_init + SetAttr self rows instance_110 + instance_114 = ALLOCATE Int + value_115 = LOAD 5 + result_init_116 = CALL Int_init + SetAttr self columns instance_114 + SetAttr self board_size size_1 + result_2 = size_1 + LABEL label_12 + let_result_119 = self + + RETURN let_result_119 +} +function CellularAutomaton_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = CALL Board_init + + RETURN + instance_1 = ALLOCATE String + value_2 = LOAD empty_str + result_init_3 = CALL String_init + SetAttr self population_map instance_1 +} +function CellularAutomaton.init { + PARAM self + PARAM map + + LOCAL result_0 + LOCAL result_1 + + SetAttr self population_map map + result_1 = VCALL CellularAutomaton board_init + + RETURN self +} +function CellularAutomaton.print { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL i_3 + LOCAL board_size_4 + LOCAL num_5 + LOCAL result_6 + LOCAL internal_7 + LOCAL instance_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL result_17 + LOCAL population_map_18 + LOCAL columns_19 + LOCAL result_20 + LOCAL internal_21 + LOCAL instance_22 + LOCAL result_init_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL columns_28 + LOCAL result_init_29 + LOCAL result_30 + LOCAL result_31 + LOCAL internal_32 + LOCAL instance_33 + LOCAL result_init_34 + LOCAL let_result_35 + LOCAL let_result_36 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + i_3 = instance_0 + board_size_4 = GetAttr self board_size + num_5 = board_size_4 + internal_7 = LOAD s_3 + instance_8 = ALLOCATE String + result_init_9 = CALL String_init + result_6 = VCALL CellularAutomaton out_string + LABEL label_13 + left_13 = GetAttr i_3 value + right_14 = GetAttr num_5 value + op_12 = left_13 < right_14 + result_11 = ALLOCATE Bool + result_init_15 = CALL Bool_init + IF result_11 GOTO label_14 + GOTO label_15 + LABEL label_14 + population_map_18 = GetAttr self population_map + columns_19 = GetAttr self columns + result_17 = VCALL String substr + result_16 = VCALL CellularAutomaton out_string + internal_21 = LOAD s_3 + instance_22 = ALLOCATE String + result_init_23 = CALL String_init + result_20 = VCALL CellularAutomaton out_string + columns_28 = GetAttr self columns + left_26 = GetAttr i_3 value + right_27 = GetAttr columns_28 value + op_25 = left_26 + right_27 + result_24 = ALLOCATE Int + result_init_29 = CALL Int_init + i_3 = result_24 + GOTO label_13 + LABEL label_15 + result_10 = LOAD None + internal_32 = LOAD s_3 + instance_33 = ALLOCATE String + result_init_34 = CALL String_init + result_31 = VCALL CellularAutomaton out_string + let_result_35 = self + let_result_36 = let_result_35 + + RETURN let_result_36 +} +function CellularAutomaton.num_cells { + PARAM self + + LOCAL result_0 + LOCAL population_map_1 + + population_map_1 = GetAttr self population_map + result_0 = VCALL String length + + RETURN result_0 +} +function CellularAutomaton.cell { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL board_size_9 + LOCAL instance_10 + LOCAL value_11 + LOCAL result_init_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL population_map_16 + LOCAL instance_17 + LOCAL value_18 + LOCAL result_init_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + + board_size_9 = GetAttr self board_size + instance_10 = ALLOCATE Int + value_11 = LOAD 1 + result_init_12 = CALL Int_init + left_7 = GetAttr board_size_9 value + right_8 = GetAttr instance_10 value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_13 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr position value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_16 + population_map_16 = GetAttr self population_map + instance_17 = ALLOCATE Int + value_18 = LOAD 1 + result_init_19 = CALL Int_init + result_15 = VCALL String substr + result_0 = result_15 + GOTO label_17 + LABEL label_16 + internal_20 = LOAD s_4 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + result_0 = instance_21 + LABEL label_17 + + RETURN result_0 +} +function CellularAutomaton.north { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL columns_9 + LOCAL result_init_10 + LOCAL instance_11 + LOCAL value_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL columns_20 + LOCAL result_init_21 + LOCAL internal_22 + LOCAL instance_23 + LOCAL result_init_24 + + columns_9 = GetAttr self columns + left_7 = GetAttr position value + right_8 = GetAttr columns_9 value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_10 = CALL Int_init + instance_11 = ALLOCATE Int + value_12 = LOAD 0 + result_init_13 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_11 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_18 + columns_20 = GetAttr self columns + left_18 = GetAttr position value + right_19 = GetAttr columns_20 value + op_17 = left_18 - right_19 + result_16 = ALLOCATE Int + result_init_21 = CALL Int_init + result_15 = VCALL CellularAutomaton cell + result_0 = result_15 + GOTO label_19 + LABEL label_18 + internal_22 = LOAD s_4 + instance_23 = ALLOCATE String + result_init_24 = CALL String_init + result_0 = instance_23 + LABEL label_19 + + RETURN result_0 +} +function CellularAutomaton.south { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL board_size_5 + LOCAL result_6 + LOCAL op_7 + LOCAL left_8 + LOCAL right_9 + LOCAL columns_10 + LOCAL result_init_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL columns_18 + LOCAL result_init_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + + board_size_5 = GetAttr self board_size + columns_10 = GetAttr self columns + left_8 = GetAttr position value + right_9 = GetAttr columns_10 value + op_7 = left_8 + right_9 + result_6 = ALLOCATE Int + result_init_11 = CALL Int_init + left_3 = GetAttr board_size_5 value + right_4 = GetAttr result_6 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_12 = CALL Bool_init + IF result_1 GOTO label_20 + columns_18 = GetAttr self columns + left_16 = GetAttr position value + right_17 = GetAttr columns_18 value + op_15 = left_16 + right_17 + result_14 = ALLOCATE Int + result_init_19 = CALL Int_init + result_13 = VCALL CellularAutomaton cell + result_0 = result_13 + GOTO label_21 + LABEL label_20 + internal_20 = LOAD s_4 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + result_0 = instance_21 + LABEL label_21 + + RETURN result_0 +} +function CellularAutomaton.east { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL result_9 + LOCAL op_10 + LOCAL left_11 + LOCAL right_12 + LOCAL result_13 + LOCAL op_14 + LOCAL left_15 + LOCAL right_16 + LOCAL instance_17 + LOCAL value_18 + LOCAL result_init_19 + LOCAL result_init_20 + LOCAL columns_21 + LOCAL result_init_22 + LOCAL columns_23 + LOCAL result_init_24 + LOCAL result_25 + LOCAL op_26 + LOCAL left_27 + LOCAL right_28 + LOCAL instance_29 + LOCAL value_30 + LOCAL result_init_31 + LOCAL result_init_32 + LOCAL result_init_33 + LOCAL result_34 + LOCAL result_35 + LOCAL op_36 + LOCAL left_37 + LOCAL right_38 + LOCAL instance_39 + LOCAL value_40 + LOCAL result_init_41 + LOCAL result_init_42 + LOCAL internal_43 + LOCAL instance_44 + LOCAL result_init_45 + + instance_17 = ALLOCATE Int + value_18 = LOAD 1 + result_init_19 = CALL Int_init + left_15 = GetAttr position value + right_16 = GetAttr instance_17 value + op_14 = left_15 + right_16 + result_13 = ALLOCATE Int + result_init_20 = CALL Int_init + columns_21 = GetAttr self columns + left_11 = GetAttr result_13 value + right_12 = GetAttr columns_21 value + op_10 = left_11 / right_12 + result_9 = ALLOCATE Int + result_init_22 = CALL Int_init + columns_23 = GetAttr self columns + left_7 = GetAttr result_9 value + right_8 = GetAttr columns_23 value + op_6 = left_7 * right_8 + result_5 = ALLOCATE Int + result_init_24 = CALL Int_init + instance_29 = ALLOCATE Int + value_30 = LOAD 1 + result_init_31 = CALL Int_init + left_27 = GetAttr position value + right_28 = GetAttr instance_29 value + op_26 = left_27 + right_28 + result_25 = ALLOCATE Int + result_init_32 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr result_25 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_33 = CALL Bool_init + IF result_1 GOTO label_22 + instance_39 = ALLOCATE Int + value_40 = LOAD 1 + result_init_41 = CALL Int_init + left_37 = GetAttr position value + right_38 = GetAttr instance_39 value + op_36 = left_37 + right_38 + result_35 = ALLOCATE Int + result_init_42 = CALL Int_init + result_34 = VCALL CellularAutomaton cell + result_0 = result_34 + GOTO label_23 + LABEL label_22 + internal_43 = LOAD s_4 + instance_44 = ALLOCATE String + result_init_45 = CALL String_init + result_0 = instance_44 + LABEL label_23 + + RETURN result_0 +} +function CellularAutomaton.west { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL instance_5 + LOCAL value_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL op_11 + LOCAL left_12 + LOCAL right_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL result_18 + LOCAL op_19 + LOCAL left_20 + LOCAL right_21 + LOCAL columns_22 + LOCAL result_init_23 + LOCAL columns_24 + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL result_27 + LOCAL result_28 + LOCAL op_29 + LOCAL left_30 + LOCAL right_31 + LOCAL instance_32 + LOCAL value_33 + LOCAL result_init_34 + LOCAL result_init_35 + LOCAL internal_36 + LOCAL instance_37 + LOCAL result_init_38 + LOCAL internal_39 + LOCAL instance_40 + LOCAL result_init_41 + + instance_5 = ALLOCATE Int + value_6 = LOAD 0 + result_init_7 = CALL Int_init + left_3 = GetAttr position value + right_4 = GetAttr instance_5 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_24 + columns_22 = GetAttr self columns + left_20 = GetAttr position value + right_21 = GetAttr columns_22 value + op_19 = left_20 / right_21 + result_18 = ALLOCATE Int + result_init_23 = CALL Int_init + columns_24 = GetAttr self columns + left_16 = GetAttr result_18 value + right_17 = GetAttr columns_24 value + op_15 = left_16 * right_17 + result_14 = ALLOCATE Int + result_init_25 = CALL Int_init + left_12 = GetAttr result_14 value + right_13 = GetAttr position value + op_11 = left_12 = right_13 + result_10 = ALLOCATE Bool + result_init_26 = CALL Bool_init + IF result_10 GOTO label_25 + instance_32 = ALLOCATE Int + value_33 = LOAD 1 + result_init_34 = CALL Int_init + left_30 = GetAttr position value + right_31 = GetAttr instance_32 value + op_29 = left_30 - right_31 + result_28 = ALLOCATE Int + result_init_35 = CALL Int_init + result_27 = VCALL CellularAutomaton cell + result_9 = result_27 + GOTO label_26 + LABEL label_25 + internal_36 = LOAD s_4 + instance_37 = ALLOCATE String + result_init_38 = CALL String_init + result_9 = instance_37 + LABEL label_26 + result_0 = result_9 + GOTO label_27 + LABEL label_24 + internal_39 = LOAD s_4 + instance_40 = ALLOCATE String + result_init_41 = CALL String_init + result_0 = instance_40 + LABEL label_27 + + RETURN result_0 +} +function CellularAutomaton.northwest { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL columns_9 + LOCAL result_init_10 + LOCAL instance_11 + LOCAL value_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL result_20 + LOCAL op_21 + LOCAL left_22 + LOCAL right_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL columns_28 + LOCAL result_init_29 + LOCAL columns_30 + LOCAL result_init_31 + LOCAL result_init_32 + LOCAL result_33 + LOCAL result_34 + LOCAL op_35 + LOCAL left_36 + LOCAL right_37 + LOCAL instance_38 + LOCAL value_39 + LOCAL result_init_40 + LOCAL result_init_41 + LOCAL internal_42 + LOCAL instance_43 + LOCAL result_init_44 + LOCAL internal_45 + LOCAL instance_46 + LOCAL result_init_47 + + columns_9 = GetAttr self columns + left_7 = GetAttr position value + right_8 = GetAttr columns_9 value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_10 = CALL Int_init + instance_11 = ALLOCATE Int + value_12 = LOAD 0 + result_init_13 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_11 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_28 + columns_28 = GetAttr self columns + left_26 = GetAttr position value + right_27 = GetAttr columns_28 value + op_25 = left_26 / right_27 + result_24 = ALLOCATE Int + result_init_29 = CALL Int_init + columns_30 = GetAttr self columns + left_22 = GetAttr result_24 value + right_23 = GetAttr columns_30 value + op_21 = left_22 * right_23 + result_20 = ALLOCATE Int + result_init_31 = CALL Int_init + left_18 = GetAttr result_20 value + right_19 = GetAttr position value + op_17 = left_18 = right_19 + result_16 = ALLOCATE Bool + result_init_32 = CALL Bool_init + IF result_16 GOTO label_29 + instance_38 = ALLOCATE Int + value_39 = LOAD 1 + result_init_40 = CALL Int_init + left_36 = GetAttr position value + right_37 = GetAttr instance_38 value + op_35 = left_36 - right_37 + result_34 = ALLOCATE Int + result_init_41 = CALL Int_init + result_33 = VCALL CellularAutomaton north + result_15 = result_33 + GOTO label_30 + LABEL label_29 + internal_42 = LOAD s_4 + instance_43 = ALLOCATE String + result_init_44 = CALL String_init + result_15 = instance_43 + LABEL label_30 + result_0 = result_15 + GOTO label_31 + LABEL label_28 + internal_45 = LOAD s_4 + instance_46 = ALLOCATE String + result_init_47 = CALL String_init + result_0 = instance_46 + LABEL label_31 + + RETURN result_0 +} +function CellularAutomaton.northeast { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL columns_9 + LOCAL result_init_10 + LOCAL instance_11 + LOCAL value_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL result_20 + LOCAL op_21 + LOCAL left_22 + LOCAL right_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL result_28 + LOCAL op_29 + LOCAL left_30 + LOCAL right_31 + LOCAL instance_32 + LOCAL value_33 + LOCAL result_init_34 + LOCAL result_init_35 + LOCAL columns_36 + LOCAL result_init_37 + LOCAL columns_38 + LOCAL result_init_39 + LOCAL result_40 + LOCAL op_41 + LOCAL left_42 + LOCAL right_43 + LOCAL instance_44 + LOCAL value_45 + LOCAL result_init_46 + LOCAL result_init_47 + LOCAL result_init_48 + LOCAL result_49 + LOCAL result_50 + LOCAL op_51 + LOCAL left_52 + LOCAL right_53 + LOCAL instance_54 + LOCAL value_55 + LOCAL result_init_56 + LOCAL result_init_57 + LOCAL internal_58 + LOCAL instance_59 + LOCAL result_init_60 + LOCAL internal_61 + LOCAL instance_62 + LOCAL result_init_63 + + columns_9 = GetAttr self columns + left_7 = GetAttr position value + right_8 = GetAttr columns_9 value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_10 = CALL Int_init + instance_11 = ALLOCATE Int + value_12 = LOAD 0 + result_init_13 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_11 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_32 + instance_32 = ALLOCATE Int + value_33 = LOAD 1 + result_init_34 = CALL Int_init + left_30 = GetAttr position value + right_31 = GetAttr instance_32 value + op_29 = left_30 + right_31 + result_28 = ALLOCATE Int + result_init_35 = CALL Int_init + columns_36 = GetAttr self columns + left_26 = GetAttr result_28 value + right_27 = GetAttr columns_36 value + op_25 = left_26 / right_27 + result_24 = ALLOCATE Int + result_init_37 = CALL Int_init + columns_38 = GetAttr self columns + left_22 = GetAttr result_24 value + right_23 = GetAttr columns_38 value + op_21 = left_22 * right_23 + result_20 = ALLOCATE Int + result_init_39 = CALL Int_init + instance_44 = ALLOCATE Int + value_45 = LOAD 1 + result_init_46 = CALL Int_init + left_42 = GetAttr position value + right_43 = GetAttr instance_44 value + op_41 = left_42 + right_43 + result_40 = ALLOCATE Int + result_init_47 = CALL Int_init + left_18 = GetAttr result_20 value + right_19 = GetAttr result_40 value + op_17 = left_18 = right_19 + result_16 = ALLOCATE Bool + result_init_48 = CALL Bool_init + IF result_16 GOTO label_33 + instance_54 = ALLOCATE Int + value_55 = LOAD 1 + result_init_56 = CALL Int_init + left_52 = GetAttr position value + right_53 = GetAttr instance_54 value + op_51 = left_52 + right_53 + result_50 = ALLOCATE Int + result_init_57 = CALL Int_init + result_49 = VCALL CellularAutomaton north + result_15 = result_49 + GOTO label_34 + LABEL label_33 + internal_58 = LOAD s_4 + instance_59 = ALLOCATE String + result_init_60 = CALL String_init + result_15 = instance_59 + LABEL label_34 + result_0 = result_15 + GOTO label_35 + LABEL label_32 + internal_61 = LOAD s_4 + instance_62 = ALLOCATE String + result_init_63 = CALL String_init + result_0 = instance_62 + LABEL label_35 + + RETURN result_0 +} +function CellularAutomaton.southeast { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL board_size_5 + LOCAL result_6 + LOCAL op_7 + LOCAL left_8 + LOCAL right_9 + LOCAL columns_10 + LOCAL result_init_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL result_18 + LOCAL op_19 + LOCAL left_20 + LOCAL right_21 + LOCAL result_22 + LOCAL op_23 + LOCAL left_24 + LOCAL right_25 + LOCAL result_26 + LOCAL op_27 + LOCAL left_28 + LOCAL right_29 + LOCAL instance_30 + LOCAL value_31 + LOCAL result_init_32 + LOCAL result_init_33 + LOCAL columns_34 + LOCAL result_init_35 + LOCAL columns_36 + LOCAL result_init_37 + LOCAL result_38 + LOCAL op_39 + LOCAL left_40 + LOCAL right_41 + LOCAL instance_42 + LOCAL value_43 + LOCAL result_init_44 + LOCAL result_init_45 + LOCAL result_init_46 + LOCAL result_47 + LOCAL result_48 + LOCAL op_49 + LOCAL left_50 + LOCAL right_51 + LOCAL instance_52 + LOCAL value_53 + LOCAL result_init_54 + LOCAL result_init_55 + LOCAL internal_56 + LOCAL instance_57 + LOCAL result_init_58 + LOCAL internal_59 + LOCAL instance_60 + LOCAL result_init_61 + + board_size_5 = GetAttr self board_size + columns_10 = GetAttr self columns + left_8 = GetAttr position value + right_9 = GetAttr columns_10 value + op_7 = left_8 + right_9 + result_6 = ALLOCATE Int + result_init_11 = CALL Int_init + left_3 = GetAttr board_size_5 value + right_4 = GetAttr result_6 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_12 = CALL Bool_init + IF result_1 GOTO label_36 + instance_30 = ALLOCATE Int + value_31 = LOAD 1 + result_init_32 = CALL Int_init + left_28 = GetAttr position value + right_29 = GetAttr instance_30 value + op_27 = left_28 + right_29 + result_26 = ALLOCATE Int + result_init_33 = CALL Int_init + columns_34 = GetAttr self columns + left_24 = GetAttr result_26 value + right_25 = GetAttr columns_34 value + op_23 = left_24 / right_25 + result_22 = ALLOCATE Int + result_init_35 = CALL Int_init + columns_36 = GetAttr self columns + left_20 = GetAttr result_22 value + right_21 = GetAttr columns_36 value + op_19 = left_20 * right_21 + result_18 = ALLOCATE Int + result_init_37 = CALL Int_init + instance_42 = ALLOCATE Int + value_43 = LOAD 1 + result_init_44 = CALL Int_init + left_40 = GetAttr position value + right_41 = GetAttr instance_42 value + op_39 = left_40 + right_41 + result_38 = ALLOCATE Int + result_init_45 = CALL Int_init + left_16 = GetAttr result_18 value + right_17 = GetAttr result_38 value + op_15 = left_16 = right_17 + result_14 = ALLOCATE Bool + result_init_46 = CALL Bool_init + IF result_14 GOTO label_37 + instance_52 = ALLOCATE Int + value_53 = LOAD 1 + result_init_54 = CALL Int_init + left_50 = GetAttr position value + right_51 = GetAttr instance_52 value + op_49 = left_50 + right_51 + result_48 = ALLOCATE Int + result_init_55 = CALL Int_init + result_47 = VCALL CellularAutomaton south + result_13 = result_47 + GOTO label_38 + LABEL label_37 + internal_56 = LOAD s_4 + instance_57 = ALLOCATE String + result_init_58 = CALL String_init + result_13 = instance_57 + LABEL label_38 + result_0 = result_13 + GOTO label_39 + LABEL label_36 + internal_59 = LOAD s_4 + instance_60 = ALLOCATE String + result_init_61 = CALL String_init + result_0 = instance_60 + LABEL label_39 + + RETURN result_0 +} +function CellularAutomaton.southwest { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL board_size_5 + LOCAL result_6 + LOCAL op_7 + LOCAL left_8 + LOCAL right_9 + LOCAL columns_10 + LOCAL result_init_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL result_18 + LOCAL op_19 + LOCAL left_20 + LOCAL right_21 + LOCAL result_22 + LOCAL op_23 + LOCAL left_24 + LOCAL right_25 + LOCAL columns_26 + LOCAL result_init_27 + LOCAL columns_28 + LOCAL result_init_29 + LOCAL result_init_30 + LOCAL result_31 + LOCAL result_32 + LOCAL op_33 + LOCAL left_34 + LOCAL right_35 + LOCAL instance_36 + LOCAL value_37 + LOCAL result_init_38 + LOCAL result_init_39 + LOCAL internal_40 + LOCAL instance_41 + LOCAL result_init_42 + LOCAL internal_43 + LOCAL instance_44 + LOCAL result_init_45 + + board_size_5 = GetAttr self board_size + columns_10 = GetAttr self columns + left_8 = GetAttr position value + right_9 = GetAttr columns_10 value + op_7 = left_8 + right_9 + result_6 = ALLOCATE Int + result_init_11 = CALL Int_init + left_3 = GetAttr board_size_5 value + right_4 = GetAttr result_6 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_12 = CALL Bool_init + IF result_1 GOTO label_40 + columns_26 = GetAttr self columns + left_24 = GetAttr position value + right_25 = GetAttr columns_26 value + op_23 = left_24 / right_25 + result_22 = ALLOCATE Int + result_init_27 = CALL Int_init + columns_28 = GetAttr self columns + left_20 = GetAttr result_22 value + right_21 = GetAttr columns_28 value + op_19 = left_20 * right_21 + result_18 = ALLOCATE Int + result_init_29 = CALL Int_init + left_16 = GetAttr result_18 value + right_17 = GetAttr position value + op_15 = left_16 = right_17 + result_14 = ALLOCATE Bool + result_init_30 = CALL Bool_init + IF result_14 GOTO label_41 + instance_36 = ALLOCATE Int + value_37 = LOAD 1 + result_init_38 = CALL Int_init + left_34 = GetAttr position value + right_35 = GetAttr instance_36 value + op_33 = left_34 - right_35 + result_32 = ALLOCATE Int + result_init_39 = CALL Int_init + result_31 = VCALL CellularAutomaton south + result_13 = result_31 + GOTO label_42 + LABEL label_41 + internal_40 = LOAD s_4 + instance_41 = ALLOCATE String + result_init_42 = CALL String_init + result_13 = instance_41 + LABEL label_42 + result_0 = result_13 + GOTO label_43 + LABEL label_40 + internal_43 = LOAD s_4 + instance_44 = ALLOCATE String + result_init_45 = CALL String_init + result_0 = instance_44 + LABEL label_43 + + RETURN result_0 +} +function CellularAutomaton.neighbors { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL result_4 + LOCAL op_5 + LOCAL left_6 + LOCAL right_7 + LOCAL result_8 + LOCAL op_9 + LOCAL left_10 + LOCAL right_11 + LOCAL result_12 + LOCAL op_13 + LOCAL left_14 + LOCAL right_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL result_20 + LOCAL op_21 + LOCAL left_22 + LOCAL right_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL result_28 + LOCAL result_29 + LOCAL op_30 + LOCAL left_31 + LOCAL right_32 + LOCAL result_33 + LOCAL internal_34 + LOCAL instance_35 + LOCAL result_init_36 + LOCAL result_init_37 + LOCAL instance_38 + LOCAL value_39 + LOCAL result_init_40 + LOCAL instance_41 + LOCAL value_42 + LOCAL result_init_43 + LOCAL result_44 + LOCAL result_45 + LOCAL op_46 + LOCAL left_47 + LOCAL right_48 + LOCAL result_49 + LOCAL internal_50 + LOCAL instance_51 + LOCAL result_init_52 + LOCAL result_init_53 + LOCAL instance_54 + LOCAL value_55 + LOCAL result_init_56 + LOCAL instance_57 + LOCAL value_58 + LOCAL result_init_59 + LOCAL result_init_60 + LOCAL result_61 + LOCAL result_62 + LOCAL op_63 + LOCAL left_64 + LOCAL right_65 + LOCAL result_66 + LOCAL internal_67 + LOCAL instance_68 + LOCAL result_init_69 + LOCAL result_init_70 + LOCAL instance_71 + LOCAL value_72 + LOCAL result_init_73 + LOCAL instance_74 + LOCAL value_75 + LOCAL result_init_76 + LOCAL result_init_77 + LOCAL result_78 + LOCAL result_79 + LOCAL op_80 + LOCAL left_81 + LOCAL right_82 + LOCAL result_83 + LOCAL internal_84 + LOCAL instance_85 + LOCAL result_init_86 + LOCAL result_init_87 + LOCAL instance_88 + LOCAL value_89 + LOCAL result_init_90 + LOCAL instance_91 + LOCAL value_92 + LOCAL result_init_93 + LOCAL result_init_94 + LOCAL result_95 + LOCAL result_96 + LOCAL op_97 + LOCAL left_98 + LOCAL right_99 + LOCAL result_100 + LOCAL internal_101 + LOCAL instance_102 + LOCAL result_init_103 + LOCAL result_init_104 + LOCAL instance_105 + LOCAL value_106 + LOCAL result_init_107 + LOCAL instance_108 + LOCAL value_109 + LOCAL result_init_110 + LOCAL result_init_111 + LOCAL result_112 + LOCAL result_113 + LOCAL op_114 + LOCAL left_115 + LOCAL right_116 + LOCAL result_117 + LOCAL internal_118 + LOCAL instance_119 + LOCAL result_init_120 + LOCAL result_init_121 + LOCAL instance_122 + LOCAL value_123 + LOCAL result_init_124 + LOCAL instance_125 + LOCAL value_126 + LOCAL result_init_127 + LOCAL result_init_128 + LOCAL result_129 + LOCAL result_130 + LOCAL op_131 + LOCAL left_132 + LOCAL right_133 + LOCAL result_134 + LOCAL internal_135 + LOCAL instance_136 + LOCAL result_init_137 + LOCAL result_init_138 + LOCAL instance_139 + LOCAL value_140 + LOCAL result_init_141 + LOCAL instance_142 + LOCAL value_143 + LOCAL result_init_144 + LOCAL result_init_145 + LOCAL result_146 + LOCAL result_147 + LOCAL op_148 + LOCAL left_149 + LOCAL right_150 + LOCAL result_151 + LOCAL internal_152 + LOCAL instance_153 + LOCAL result_init_154 + LOCAL result_init_155 + LOCAL instance_156 + LOCAL value_157 + LOCAL result_init_158 + LOCAL instance_159 + LOCAL value_160 + LOCAL result_init_161 + LOCAL result_init_162 + + result_33 = VCALL CellularAutomaton north + internal_34 = LOAD s_5 + instance_35 = ALLOCATE String + result_init_36 = CALL String_init + left_31 = GetAttr result_33 value + right_32 = GetAttr instance_35 value + op_30 = left_31 = right_32 + result_29 = ALLOCATE Bool + result_init_37 = CALL Bool_init + IF result_29 GOTO label_44 + instance_38 = ALLOCATE Int + value_39 = LOAD 0 + result_init_40 = CALL Int_init + result_28 = instance_38 + GOTO label_45 + LABEL label_44 + instance_41 = ALLOCATE Int + value_42 = LOAD 1 + result_init_43 = CALL Int_init + result_28 = instance_41 + LABEL label_45 + result_49 = VCALL CellularAutomaton south + internal_50 = LOAD s_5 + instance_51 = ALLOCATE String + result_init_52 = CALL String_init + left_47 = GetAttr result_49 value + right_48 = GetAttr instance_51 value + op_46 = left_47 = right_48 + result_45 = ALLOCATE Bool + result_init_53 = CALL Bool_init + IF result_45 GOTO label_46 + instance_54 = ALLOCATE Int + value_55 = LOAD 0 + result_init_56 = CALL Int_init + result_44 = instance_54 + GOTO label_47 + LABEL label_46 + instance_57 = ALLOCATE Int + value_58 = LOAD 1 + result_init_59 = CALL Int_init + result_44 = instance_57 + LABEL label_47 + left_26 = GetAttr result_28 value + right_27 = GetAttr result_44 value + op_25 = left_26 + right_27 + result_24 = ALLOCATE Int + result_init_60 = CALL Int_init + result_66 = VCALL CellularAutomaton east + internal_67 = LOAD s_5 + instance_68 = ALLOCATE String + result_init_69 = CALL String_init + left_64 = GetAttr result_66 value + right_65 = GetAttr instance_68 value + op_63 = left_64 = right_65 + result_62 = ALLOCATE Bool + result_init_70 = CALL Bool_init + IF result_62 GOTO label_48 + instance_71 = ALLOCATE Int + value_72 = LOAD 0 + result_init_73 = CALL Int_init + result_61 = instance_71 + GOTO label_49 + LABEL label_48 + instance_74 = ALLOCATE Int + value_75 = LOAD 1 + result_init_76 = CALL Int_init + result_61 = instance_74 + LABEL label_49 + left_22 = GetAttr result_24 value + right_23 = GetAttr result_61 value + op_21 = left_22 + right_23 + result_20 = ALLOCATE Int + result_init_77 = CALL Int_init + result_83 = VCALL CellularAutomaton west + internal_84 = LOAD s_5 + instance_85 = ALLOCATE String + result_init_86 = CALL String_init + left_81 = GetAttr result_83 value + right_82 = GetAttr instance_85 value + op_80 = left_81 = right_82 + result_79 = ALLOCATE Bool + result_init_87 = CALL Bool_init + IF result_79 GOTO label_50 + instance_88 = ALLOCATE Int + value_89 = LOAD 0 + result_init_90 = CALL Int_init + result_78 = instance_88 + GOTO label_51 + LABEL label_50 + instance_91 = ALLOCATE Int + value_92 = LOAD 1 + result_init_93 = CALL Int_init + result_78 = instance_91 + LABEL label_51 + left_18 = GetAttr result_20 value + right_19 = GetAttr result_78 value + op_17 = left_18 + right_19 + result_16 = ALLOCATE Int + result_init_94 = CALL Int_init + result_100 = VCALL CellularAutomaton northeast + internal_101 = LOAD s_5 + instance_102 = ALLOCATE String + result_init_103 = CALL String_init + left_98 = GetAttr result_100 value + right_99 = GetAttr instance_102 value + op_97 = left_98 = right_99 + result_96 = ALLOCATE Bool + result_init_104 = CALL Bool_init + IF result_96 GOTO label_52 + instance_105 = ALLOCATE Int + value_106 = LOAD 0 + result_init_107 = CALL Int_init + result_95 = instance_105 + GOTO label_53 + LABEL label_52 + instance_108 = ALLOCATE Int + value_109 = LOAD 1 + result_init_110 = CALL Int_init + result_95 = instance_108 + LABEL label_53 + left_14 = GetAttr result_16 value + right_15 = GetAttr result_95 value + op_13 = left_14 + right_15 + result_12 = ALLOCATE Int + result_init_111 = CALL Int_init + result_117 = VCALL CellularAutomaton northwest + internal_118 = LOAD s_5 + instance_119 = ALLOCATE String + result_init_120 = CALL String_init + left_115 = GetAttr result_117 value + right_116 = GetAttr instance_119 value + op_114 = left_115 = right_116 + result_113 = ALLOCATE Bool + result_init_121 = CALL Bool_init + IF result_113 GOTO label_54 + instance_122 = ALLOCATE Int + value_123 = LOAD 0 + result_init_124 = CALL Int_init + result_112 = instance_122 + GOTO label_55 + LABEL label_54 + instance_125 = ALLOCATE Int + value_126 = LOAD 1 + result_init_127 = CALL Int_init + result_112 = instance_125 + LABEL label_55 + left_10 = GetAttr result_12 value + right_11 = GetAttr result_112 value + op_9 = left_10 + right_11 + result_8 = ALLOCATE Int + result_init_128 = CALL Int_init + result_134 = VCALL CellularAutomaton southeast + internal_135 = LOAD s_5 + instance_136 = ALLOCATE String + result_init_137 = CALL String_init + left_132 = GetAttr result_134 value + right_133 = GetAttr instance_136 value + op_131 = left_132 = right_133 + result_130 = ALLOCATE Bool + result_init_138 = CALL Bool_init + IF result_130 GOTO label_56 + instance_139 = ALLOCATE Int + value_140 = LOAD 0 + result_init_141 = CALL Int_init + result_129 = instance_139 + GOTO label_57 + LABEL label_56 + instance_142 = ALLOCATE Int + value_143 = LOAD 1 + result_init_144 = CALL Int_init + result_129 = instance_142 + LABEL label_57 + left_6 = GetAttr result_8 value + right_7 = GetAttr result_129 value + op_5 = left_6 + right_7 + result_4 = ALLOCATE Int + result_init_145 = CALL Int_init + result_151 = VCALL CellularAutomaton southwest + internal_152 = LOAD s_5 + instance_153 = ALLOCATE String + result_init_154 = CALL String_init + left_149 = GetAttr result_151 value + right_150 = GetAttr instance_153 value + op_148 = left_149 = right_150 + result_147 = ALLOCATE Bool + result_init_155 = CALL Bool_init + IF result_147 GOTO label_58 + instance_156 = ALLOCATE Int + value_157 = LOAD 0 + result_init_158 = CALL Int_init + result_146 = instance_156 + GOTO label_59 + LABEL label_58 + instance_159 = ALLOCATE Int + value_160 = LOAD 1 + result_init_161 = CALL Int_init + result_146 = instance_159 + LABEL label_59 + left_2 = GetAttr result_4 value + right_3 = GetAttr result_146 value + op_1 = left_2 + right_3 + result_0 = ALLOCATE Int + result_init_162 = CALL Int_init + + RETURN result_0 +} +function CellularAutomaton.cell_at_next_evolution { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + LOCAL result_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL result_28 + LOCAL internal_29 + LOCAL instance_30 + LOCAL result_init_31 + LOCAL result_init_32 + LOCAL internal_33 + LOCAL instance_34 + LOCAL result_init_35 + LOCAL internal_36 + LOCAL instance_37 + LOCAL result_init_38 + LOCAL internal_39 + LOCAL instance_40 + LOCAL result_init_41 + + result_5 = VCALL CellularAutomaton neighbors + instance_6 = ALLOCATE Int + value_7 = LOAD 3 + result_init_8 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_1 GOTO label_60 + result_15 = VCALL CellularAutomaton neighbors + instance_16 = ALLOCATE Int + value_17 = LOAD 2 + result_init_18 = CALL Int_init + left_13 = GetAttr result_15 value + right_14 = GetAttr instance_16 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_19 = CALL Bool_init + IF result_11 GOTO label_61 + internal_20 = LOAD s_6 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + result_10 = instance_21 + GOTO label_62 + LABEL label_61 + result_28 = VCALL CellularAutomaton cell + internal_29 = LOAD s_5 + instance_30 = ALLOCATE String + result_init_31 = CALL String_init + left_26 = GetAttr result_28 value + right_27 = GetAttr instance_30 value + op_25 = left_26 = right_27 + result_24 = ALLOCATE Bool + result_init_32 = CALL Bool_init + IF result_24 GOTO label_63 + internal_33 = LOAD s_6 + instance_34 = ALLOCATE String + result_init_35 = CALL String_init + result_23 = instance_34 + GOTO label_64 + LABEL label_63 + internal_36 = LOAD s_5 + instance_37 = ALLOCATE String + result_init_38 = CALL String_init + result_23 = instance_37 + LABEL label_64 + result_10 = result_23 + LABEL label_62 + result_0 = result_10 + GOTO label_65 + LABEL label_60 + internal_39 = LOAD s_5 + instance_40 = ALLOCATE String + result_init_41 = CALL String_init + result_0 = instance_40 + LABEL label_65 + + RETURN result_0 +} +function CellularAutomaton.evolve { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL position_3 + LOCAL result_4 + LOCAL num_5 + LOCAL temp_6 + LOCAL result_7 + LOCAL result_8 + LOCAL op_9 + LOCAL left_10 + LOCAL right_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL result_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL instance_20 + LOCAL value_21 + LOCAL result_init_22 + LOCAL result_init_23 + LOCAL result_24 + LOCAL result_25 + LOCAL let_result_26 + LOCAL let_result_27 + LOCAL let_result_28 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + position_3 = instance_0 + result_4 = VCALL CellularAutomaton num_cells + num_5 = result_4 + temp_6 = [] + LABEL label_66 + left_10 = GetAttr position_3 value + right_11 = GetAttr num_5 value + op_9 = left_10 < right_11 + result_8 = ALLOCATE Bool + result_init_12 = CALL Bool_init + IF result_8 GOTO label_67 + GOTO label_68 + LABEL label_67 + result_14 = VCALL CellularAutomaton cell_at_next_evolution + result_13 = VCALL String concat + temp_6 = result_13 + instance_20 = ALLOCATE Int + value_21 = LOAD 1 + result_init_22 = CALL Int_init + left_18 = GetAttr position_3 value + right_19 = GetAttr instance_20 value + op_17 = left_18 + right_19 + result_16 = ALLOCATE Int + result_init_23 = CALL Int_init + position_3 = result_16 + GOTO label_66 + LABEL label_68 + result_7 = LOAD None + SetAttr self population_map temp_6 + let_result_26 = self + let_result_27 = let_result_26 + let_result_28 = let_result_27 + + RETURN let_result_28 +} +function CellularAutomaton.option { + PARAM self + + LOCAL num_0 + LOCAL result_1 + LOCAL internal_2 + LOCAL instance_3 + LOCAL result_init_4 + LOCAL result_5 + LOCAL internal_6 + LOCAL instance_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL internal_10 + LOCAL instance_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL internal_14 + LOCAL instance_15 + LOCAL result_init_16 + LOCAL result_17 + LOCAL internal_18 + LOCAL instance_19 + LOCAL result_init_20 + LOCAL result_21 + LOCAL internal_22 + LOCAL instance_23 + LOCAL result_init_24 + LOCAL result_25 + LOCAL internal_26 + LOCAL instance_27 + LOCAL result_init_28 + LOCAL result_29 + LOCAL internal_30 + LOCAL instance_31 + LOCAL result_init_32 + LOCAL result_33 + LOCAL internal_34 + LOCAL instance_35 + LOCAL result_init_36 + LOCAL result_37 + LOCAL internal_38 + LOCAL instance_39 + LOCAL result_init_40 + LOCAL result_41 + LOCAL internal_42 + LOCAL instance_43 + LOCAL result_init_44 + LOCAL result_45 + LOCAL internal_46 + LOCAL instance_47 + LOCAL result_init_48 + LOCAL result_49 + LOCAL internal_50 + LOCAL instance_51 + LOCAL result_init_52 + LOCAL result_53 + LOCAL internal_54 + LOCAL instance_55 + LOCAL result_init_56 + LOCAL result_57 + LOCAL internal_58 + LOCAL instance_59 + LOCAL result_init_60 + LOCAL result_61 + LOCAL internal_62 + LOCAL instance_63 + LOCAL result_init_64 + LOCAL result_65 + LOCAL internal_66 + LOCAL instance_67 + LOCAL result_init_68 + LOCAL result_69 + LOCAL internal_70 + LOCAL instance_71 + LOCAL result_init_72 + LOCAL result_73 + LOCAL internal_74 + LOCAL instance_75 + LOCAL result_init_76 + LOCAL result_77 + LOCAL internal_78 + LOCAL instance_79 + LOCAL result_init_80 + LOCAL result_81 + LOCAL internal_82 + LOCAL instance_83 + LOCAL result_init_84 + LOCAL result_85 + LOCAL internal_86 + LOCAL instance_87 + LOCAL result_init_88 + LOCAL result_89 + LOCAL internal_90 + LOCAL instance_91 + LOCAL result_init_92 + LOCAL result_93 + LOCAL result_94 + LOCAL result_95 + LOCAL internal_96 + LOCAL instance_97 + LOCAL result_init_98 + LOCAL result_99 + LOCAL result_100 + LOCAL op_101 + LOCAL left_102 + LOCAL right_103 + LOCAL instance_104 + LOCAL value_105 + LOCAL result_init_106 + LOCAL result_init_107 + LOCAL result_108 + LOCAL result_109 + LOCAL op_110 + LOCAL left_111 + LOCAL right_112 + LOCAL instance_113 + LOCAL value_114 + LOCAL result_init_115 + LOCAL result_init_116 + LOCAL result_117 + LOCAL result_118 + LOCAL op_119 + LOCAL left_120 + LOCAL right_121 + LOCAL instance_122 + LOCAL value_123 + LOCAL result_init_124 + LOCAL result_init_125 + LOCAL result_126 + LOCAL result_127 + LOCAL op_128 + LOCAL left_129 + LOCAL right_130 + LOCAL instance_131 + LOCAL value_132 + LOCAL result_init_133 + LOCAL result_init_134 + LOCAL result_135 + LOCAL result_136 + LOCAL op_137 + LOCAL left_138 + LOCAL right_139 + LOCAL instance_140 + LOCAL value_141 + LOCAL result_init_142 + LOCAL result_init_143 + LOCAL result_144 + LOCAL result_145 + LOCAL op_146 + LOCAL left_147 + LOCAL right_148 + LOCAL instance_149 + LOCAL value_150 + LOCAL result_init_151 + LOCAL result_init_152 + LOCAL result_153 + LOCAL result_154 + LOCAL op_155 + LOCAL left_156 + LOCAL right_157 + LOCAL instance_158 + LOCAL value_159 + LOCAL result_init_160 + LOCAL result_init_161 + LOCAL result_162 + LOCAL result_163 + LOCAL op_164 + LOCAL left_165 + LOCAL right_166 + LOCAL instance_167 + LOCAL value_168 + LOCAL result_init_169 + LOCAL result_init_170 + LOCAL result_171 + LOCAL result_172 + LOCAL op_173 + LOCAL left_174 + LOCAL right_175 + LOCAL instance_176 + LOCAL value_177 + LOCAL result_init_178 + LOCAL result_init_179 + LOCAL result_180 + LOCAL result_181 + LOCAL op_182 + LOCAL left_183 + LOCAL right_184 + LOCAL instance_185 + LOCAL value_186 + LOCAL result_init_187 + LOCAL result_init_188 + LOCAL result_189 + LOCAL result_190 + LOCAL op_191 + LOCAL left_192 + LOCAL right_193 + LOCAL instance_194 + LOCAL value_195 + LOCAL result_init_196 + LOCAL result_init_197 + LOCAL result_198 + LOCAL result_199 + LOCAL op_200 + LOCAL left_201 + LOCAL right_202 + LOCAL instance_203 + LOCAL value_204 + LOCAL result_init_205 + LOCAL result_init_206 + LOCAL result_207 + LOCAL result_208 + LOCAL op_209 + LOCAL left_210 + LOCAL right_211 + LOCAL instance_212 + LOCAL value_213 + LOCAL result_init_214 + LOCAL result_init_215 + LOCAL result_216 + LOCAL result_217 + LOCAL op_218 + LOCAL left_219 + LOCAL right_220 + LOCAL instance_221 + LOCAL value_222 + LOCAL result_init_223 + LOCAL result_init_224 + LOCAL result_225 + LOCAL result_226 + LOCAL op_227 + LOCAL left_228 + LOCAL right_229 + LOCAL instance_230 + LOCAL value_231 + LOCAL result_init_232 + LOCAL result_init_233 + LOCAL result_234 + LOCAL result_235 + LOCAL op_236 + LOCAL left_237 + LOCAL right_238 + LOCAL instance_239 + LOCAL value_240 + LOCAL result_init_241 + LOCAL result_init_242 + LOCAL result_243 + LOCAL result_244 + LOCAL op_245 + LOCAL left_246 + LOCAL right_247 + LOCAL instance_248 + LOCAL value_249 + LOCAL result_init_250 + LOCAL result_init_251 + LOCAL result_252 + LOCAL result_253 + LOCAL op_254 + LOCAL left_255 + LOCAL right_256 + LOCAL instance_257 + LOCAL value_258 + LOCAL result_init_259 + LOCAL result_init_260 + LOCAL result_261 + LOCAL result_262 + LOCAL op_263 + LOCAL left_264 + LOCAL right_265 + LOCAL instance_266 + LOCAL value_267 + LOCAL result_init_268 + LOCAL result_init_269 + LOCAL result_270 + LOCAL result_271 + LOCAL op_272 + LOCAL left_273 + LOCAL right_274 + LOCAL instance_275 + LOCAL value_276 + LOCAL result_init_277 + LOCAL result_init_278 + LOCAL result_279 + LOCAL result_280 + LOCAL op_281 + LOCAL left_282 + LOCAL right_283 + LOCAL instance_284 + LOCAL value_285 + LOCAL result_init_286 + LOCAL result_init_287 + LOCAL internal_288 + LOCAL instance_289 + LOCAL result_init_290 + LOCAL internal_291 + LOCAL instance_292 + LOCAL result_init_293 + LOCAL internal_294 + LOCAL instance_295 + LOCAL result_init_296 + LOCAL internal_297 + LOCAL instance_298 + LOCAL result_init_299 + LOCAL internal_300 + LOCAL instance_301 + LOCAL result_init_302 + LOCAL internal_303 + LOCAL instance_304 + LOCAL result_init_305 + LOCAL internal_306 + LOCAL instance_307 + LOCAL result_init_308 + LOCAL internal_309 + LOCAL instance_310 + LOCAL result_init_311 + LOCAL internal_312 + LOCAL instance_313 + LOCAL result_init_314 + LOCAL internal_315 + LOCAL instance_316 + LOCAL result_init_317 + LOCAL internal_318 + LOCAL instance_319 + LOCAL result_init_320 + LOCAL internal_321 + LOCAL instance_322 + LOCAL result_init_323 + LOCAL internal_324 + LOCAL instance_325 + LOCAL result_init_326 + LOCAL internal_327 + LOCAL instance_328 + LOCAL result_init_329 + LOCAL internal_330 + LOCAL instance_331 + LOCAL result_init_332 + LOCAL internal_333 + LOCAL instance_334 + LOCAL result_init_335 + LOCAL internal_336 + LOCAL instance_337 + LOCAL result_init_338 + LOCAL internal_339 + LOCAL instance_340 + LOCAL result_init_341 + LOCAL internal_342 + LOCAL instance_343 + LOCAL result_init_344 + LOCAL internal_345 + LOCAL instance_346 + LOCAL result_init_347 + LOCAL internal_348 + LOCAL instance_349 + LOCAL result_init_350 + LOCAL internal_351 + LOCAL instance_352 + LOCAL result_init_353 + LOCAL let_result_354 + + num_0 = [] + internal_2 = LOAD s_7 + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + result_1 = VCALL CellularAutomaton out_string + internal_6 = LOAD s_8 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + result_5 = VCALL CellularAutomaton out_string + internal_10 = LOAD s_9 + instance_11 = ALLOCATE String + result_init_12 = CALL String_init + result_9 = VCALL CellularAutomaton out_string + internal_14 = LOAD s_10 + instance_15 = ALLOCATE String + result_init_16 = CALL String_init + result_13 = VCALL CellularAutomaton out_string + internal_18 = LOAD s_11 + instance_19 = ALLOCATE String + result_init_20 = CALL String_init + result_17 = VCALL CellularAutomaton out_string + internal_22 = LOAD s_12 + instance_23 = ALLOCATE String + result_init_24 = CALL String_init + result_21 = VCALL CellularAutomaton out_string + internal_26 = LOAD s_13 + instance_27 = ALLOCATE String + result_init_28 = CALL String_init + result_25 = VCALL CellularAutomaton out_string + internal_30 = LOAD s_14 + instance_31 = ALLOCATE String + result_init_32 = CALL String_init + result_29 = VCALL CellularAutomaton out_string + internal_34 = LOAD s_15 + instance_35 = ALLOCATE String + result_init_36 = CALL String_init + result_33 = VCALL CellularAutomaton out_string + internal_38 = LOAD s_16 + instance_39 = ALLOCATE String + result_init_40 = CALL String_init + result_37 = VCALL CellularAutomaton out_string + internal_42 = LOAD s_17 + instance_43 = ALLOCATE String + result_init_44 = CALL String_init + result_41 = VCALL CellularAutomaton out_string + internal_46 = LOAD s_18 + instance_47 = ALLOCATE String + result_init_48 = CALL String_init + result_45 = VCALL CellularAutomaton out_string + internal_50 = LOAD s_19 + instance_51 = ALLOCATE String + result_init_52 = CALL String_init + result_49 = VCALL CellularAutomaton out_string + internal_54 = LOAD s_20 + instance_55 = ALLOCATE String + result_init_56 = CALL String_init + result_53 = VCALL CellularAutomaton out_string + internal_58 = LOAD s_21 + instance_59 = ALLOCATE String + result_init_60 = CALL String_init + result_57 = VCALL CellularAutomaton out_string + internal_62 = LOAD s_22 + instance_63 = ALLOCATE String + result_init_64 = CALL String_init + result_61 = VCALL CellularAutomaton out_string + internal_66 = LOAD s_23 + instance_67 = ALLOCATE String + result_init_68 = CALL String_init + result_65 = VCALL CellularAutomaton out_string + internal_70 = LOAD s_24 + instance_71 = ALLOCATE String + result_init_72 = CALL String_init + result_69 = VCALL CellularAutomaton out_string + internal_74 = LOAD s_25 + instance_75 = ALLOCATE String + result_init_76 = CALL String_init + result_73 = VCALL CellularAutomaton out_string + internal_78 = LOAD s_26 + instance_79 = ALLOCATE String + result_init_80 = CALL String_init + result_77 = VCALL CellularAutomaton out_string + internal_82 = LOAD s_27 + instance_83 = ALLOCATE String + result_init_84 = CALL String_init + result_81 = VCALL CellularAutomaton out_string + internal_86 = LOAD s_28 + instance_87 = ALLOCATE String + result_init_88 = CALL String_init + result_85 = VCALL CellularAutomaton out_string + internal_90 = LOAD s_29 + instance_91 = ALLOCATE String + result_init_92 = CALL String_init + result_89 = VCALL CellularAutomaton out_string + result_93 = VCALL CellularAutomaton in_int + num_0 = result_93 + internal_96 = LOAD s_3 + instance_97 = ALLOCATE String + result_init_98 = CALL String_init + result_95 = VCALL CellularAutomaton out_string + instance_104 = ALLOCATE Int + value_105 = LOAD 1 + result_init_106 = CALL Int_init + left_102 = GetAttr num_0 value + right_103 = GetAttr instance_104 value + op_101 = left_102 = right_103 + result_100 = ALLOCATE Bool + result_init_107 = CALL Bool_init + IF result_100 GOTO label_69 + instance_113 = ALLOCATE Int + value_114 = LOAD 2 + result_init_115 = CALL Int_init + left_111 = GetAttr num_0 value + right_112 = GetAttr instance_113 value + op_110 = left_111 = right_112 + result_109 = ALLOCATE Bool + result_init_116 = CALL Bool_init + IF result_109 GOTO label_70 + instance_122 = ALLOCATE Int + value_123 = LOAD 3 + result_init_124 = CALL Int_init + left_120 = GetAttr num_0 value + right_121 = GetAttr instance_122 value + op_119 = left_120 = right_121 + result_118 = ALLOCATE Bool + result_init_125 = CALL Bool_init + IF result_118 GOTO label_71 + instance_131 = ALLOCATE Int + value_132 = LOAD 4 + result_init_133 = CALL Int_init + left_129 = GetAttr num_0 value + right_130 = GetAttr instance_131 value + op_128 = left_129 = right_130 + result_127 = ALLOCATE Bool + result_init_134 = CALL Bool_init + IF result_127 GOTO label_72 + instance_140 = ALLOCATE Int + value_141 = LOAD 5 + result_init_142 = CALL Int_init + left_138 = GetAttr num_0 value + right_139 = GetAttr instance_140 value + op_137 = left_138 = right_139 + result_136 = ALLOCATE Bool + result_init_143 = CALL Bool_init + IF result_136 GOTO label_73 + instance_149 = ALLOCATE Int + value_150 = LOAD 6 + result_init_151 = CALL Int_init + left_147 = GetAttr num_0 value + right_148 = GetAttr instance_149 value + op_146 = left_147 = right_148 + result_145 = ALLOCATE Bool + result_init_152 = CALL Bool_init + IF result_145 GOTO label_74 + instance_158 = ALLOCATE Int + value_159 = LOAD 7 + result_init_160 = CALL Int_init + left_156 = GetAttr num_0 value + right_157 = GetAttr instance_158 value + op_155 = left_156 = right_157 + result_154 = ALLOCATE Bool + result_init_161 = CALL Bool_init + IF result_154 GOTO label_75 + instance_167 = ALLOCATE Int + value_168 = LOAD 8 + result_init_169 = CALL Int_init + left_165 = GetAttr num_0 value + right_166 = GetAttr instance_167 value + op_164 = left_165 = right_166 + result_163 = ALLOCATE Bool + result_init_170 = CALL Bool_init + IF result_163 GOTO label_76 + instance_176 = ALLOCATE Int + value_177 = LOAD 9 + result_init_178 = CALL Int_init + left_174 = GetAttr num_0 value + right_175 = GetAttr instance_176 value + op_173 = left_174 = right_175 + result_172 = ALLOCATE Bool + result_init_179 = CALL Bool_init + IF result_172 GOTO label_77 + instance_185 = ALLOCATE Int + value_186 = LOAD 10 + result_init_187 = CALL Int_init + left_183 = GetAttr num_0 value + right_184 = GetAttr instance_185 value + op_182 = left_183 = right_184 + result_181 = ALLOCATE Bool + result_init_188 = CALL Bool_init + IF result_181 GOTO label_78 + instance_194 = ALLOCATE Int + value_195 = LOAD 11 + result_init_196 = CALL Int_init + left_192 = GetAttr num_0 value + right_193 = GetAttr instance_194 value + op_191 = left_192 = right_193 + result_190 = ALLOCATE Bool + result_init_197 = CALL Bool_init + IF result_190 GOTO label_79 + instance_203 = ALLOCATE Int + value_204 = LOAD 12 + result_init_205 = CALL Int_init + left_201 = GetAttr num_0 value + right_202 = GetAttr instance_203 value + op_200 = left_201 = right_202 + result_199 = ALLOCATE Bool + result_init_206 = CALL Bool_init + IF result_199 GOTO label_80 + instance_212 = ALLOCATE Int + value_213 = LOAD 13 + result_init_214 = CALL Int_init + left_210 = GetAttr num_0 value + right_211 = GetAttr instance_212 value + op_209 = left_210 = right_211 + result_208 = ALLOCATE Bool + result_init_215 = CALL Bool_init + IF result_208 GOTO label_81 + instance_221 = ALLOCATE Int + value_222 = LOAD 14 + result_init_223 = CALL Int_init + left_219 = GetAttr num_0 value + right_220 = GetAttr instance_221 value + op_218 = left_219 = right_220 + result_217 = ALLOCATE Bool + result_init_224 = CALL Bool_init + IF result_217 GOTO label_82 + instance_230 = ALLOCATE Int + value_231 = LOAD 15 + result_init_232 = CALL Int_init + left_228 = GetAttr num_0 value + right_229 = GetAttr instance_230 value + op_227 = left_228 = right_229 + result_226 = ALLOCATE Bool + result_init_233 = CALL Bool_init + IF result_226 GOTO label_83 + instance_239 = ALLOCATE Int + value_240 = LOAD 16 + result_init_241 = CALL Int_init + left_237 = GetAttr num_0 value + right_238 = GetAttr instance_239 value + op_236 = left_237 = right_238 + result_235 = ALLOCATE Bool + result_init_242 = CALL Bool_init + IF result_235 GOTO label_84 + instance_248 = ALLOCATE Int + value_249 = LOAD 17 + result_init_250 = CALL Int_init + left_246 = GetAttr num_0 value + right_247 = GetAttr instance_248 value + op_245 = left_246 = right_247 + result_244 = ALLOCATE Bool + result_init_251 = CALL Bool_init + IF result_244 GOTO label_85 + instance_257 = ALLOCATE Int + value_258 = LOAD 18 + result_init_259 = CALL Int_init + left_255 = GetAttr num_0 value + right_256 = GetAttr instance_257 value + op_254 = left_255 = right_256 + result_253 = ALLOCATE Bool + result_init_260 = CALL Bool_init + IF result_253 GOTO label_86 + instance_266 = ALLOCATE Int + value_267 = LOAD 19 + result_init_268 = CALL Int_init + left_264 = GetAttr num_0 value + right_265 = GetAttr instance_266 value + op_263 = left_264 = right_265 + result_262 = ALLOCATE Bool + result_init_269 = CALL Bool_init + IF result_262 GOTO label_87 + instance_275 = ALLOCATE Int + value_276 = LOAD 20 + result_init_277 = CALL Int_init + left_273 = GetAttr num_0 value + right_274 = GetAttr instance_275 value + op_272 = left_273 = right_274 + result_271 = ALLOCATE Bool + result_init_278 = CALL Bool_init + IF result_271 GOTO label_88 + instance_284 = ALLOCATE Int + value_285 = LOAD 21 + result_init_286 = CALL Int_init + left_282 = GetAttr num_0 value + right_283 = GetAttr instance_284 value + op_281 = left_282 = right_283 + result_280 = ALLOCATE Bool + result_init_287 = CALL Bool_init + IF result_280 GOTO label_89 + internal_288 = LOAD s_30 + instance_289 = ALLOCATE String + result_init_290 = CALL String_init + result_279 = instance_289 + GOTO label_90 + LABEL label_89 + internal_291 = LOAD s_31 + instance_292 = ALLOCATE String + result_init_293 = CALL String_init + result_279 = instance_292 + LABEL label_90 + result_270 = result_279 + GOTO label_91 + LABEL label_88 + internal_294 = LOAD s_32 + instance_295 = ALLOCATE String + result_init_296 = CALL String_init + result_270 = instance_295 + LABEL label_91 + result_261 = result_270 + GOTO label_92 + LABEL label_87 + internal_297 = LOAD s_33 + instance_298 = ALLOCATE String + result_init_299 = CALL String_init + result_261 = instance_298 + LABEL label_92 + result_252 = result_261 + GOTO label_93 + LABEL label_86 + internal_300 = LOAD s_34 + instance_301 = ALLOCATE String + result_init_302 = CALL String_init + result_252 = instance_301 + LABEL label_93 + result_243 = result_252 + GOTO label_94 + LABEL label_85 + internal_303 = LOAD s_35 + instance_304 = ALLOCATE String + result_init_305 = CALL String_init + result_243 = instance_304 + LABEL label_94 + result_234 = result_243 + GOTO label_95 + LABEL label_84 + internal_306 = LOAD s_36 + instance_307 = ALLOCATE String + result_init_308 = CALL String_init + result_234 = instance_307 + LABEL label_95 + result_225 = result_234 + GOTO label_96 + LABEL label_83 + internal_309 = LOAD s_37 + instance_310 = ALLOCATE String + result_init_311 = CALL String_init + result_225 = instance_310 + LABEL label_96 + result_216 = result_225 + GOTO label_97 + LABEL label_82 + internal_312 = LOAD s_38 + instance_313 = ALLOCATE String + result_init_314 = CALL String_init + result_216 = instance_313 + LABEL label_97 + result_207 = result_216 + GOTO label_98 + LABEL label_81 + internal_315 = LOAD s_39 + instance_316 = ALLOCATE String + result_init_317 = CALL String_init + result_207 = instance_316 + LABEL label_98 + result_198 = result_207 + GOTO label_99 + LABEL label_80 + internal_318 = LOAD s_40 + instance_319 = ALLOCATE String + result_init_320 = CALL String_init + result_198 = instance_319 + LABEL label_99 + result_189 = result_198 + GOTO label_100 + LABEL label_79 + internal_321 = LOAD s_41 + instance_322 = ALLOCATE String + result_init_323 = CALL String_init + result_189 = instance_322 + LABEL label_100 + result_180 = result_189 + GOTO label_101 + LABEL label_78 + internal_324 = LOAD s_42 + instance_325 = ALLOCATE String + result_init_326 = CALL String_init + result_180 = instance_325 + LABEL label_101 + result_171 = result_180 + GOTO label_102 + LABEL label_77 + internal_327 = LOAD s_43 + instance_328 = ALLOCATE String + result_init_329 = CALL String_init + result_171 = instance_328 + LABEL label_102 + result_162 = result_171 + GOTO label_103 + LABEL label_76 + internal_330 = LOAD s_44 + instance_331 = ALLOCATE String + result_init_332 = CALL String_init + result_162 = instance_331 + LABEL label_103 + result_153 = result_162 + GOTO label_104 + LABEL label_75 + internal_333 = LOAD s_45 + instance_334 = ALLOCATE String + result_init_335 = CALL String_init + result_153 = instance_334 + LABEL label_104 + result_144 = result_153 + GOTO label_105 + LABEL label_74 + internal_336 = LOAD s_46 + instance_337 = ALLOCATE String + result_init_338 = CALL String_init + result_144 = instance_337 + LABEL label_105 + result_135 = result_144 + GOTO label_106 + LABEL label_73 + internal_339 = LOAD s_47 + instance_340 = ALLOCATE String + result_init_341 = CALL String_init + result_135 = instance_340 + LABEL label_106 + result_126 = result_135 + GOTO label_107 + LABEL label_72 + internal_342 = LOAD s_48 + instance_343 = ALLOCATE String + result_init_344 = CALL String_init + result_126 = instance_343 + LABEL label_107 + result_117 = result_126 + GOTO label_108 + LABEL label_71 + internal_345 = LOAD s_49 + instance_346 = ALLOCATE String + result_init_347 = CALL String_init + result_117 = instance_346 + LABEL label_108 + result_108 = result_117 + GOTO label_109 + LABEL label_70 + internal_348 = LOAD s_50 + instance_349 = ALLOCATE String + result_init_350 = CALL String_init + result_108 = instance_349 + LABEL label_109 + result_99 = result_108 + GOTO label_110 + LABEL label_69 + internal_351 = LOAD s_51 + instance_352 = ALLOCATE String + result_init_353 = CALL String_init + result_99 = instance_352 + LABEL label_110 + let_result_354 = result_99 + + RETURN let_result_354 +} +function CellularAutomaton.prompt { + PARAM self + + LOCAL ans_0 + LOCAL result_1 + LOCAL internal_2 + LOCAL instance_3 + LOCAL result_init_4 + LOCAL result_5 + LOCAL internal_6 + LOCAL instance_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL result_11 + LOCAL internal_12 + LOCAL instance_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + LOCAL result_init_23 + LOCAL instance_24 + LOCAL value_25 + LOCAL result_init_26 + LOCAL instance_27 + LOCAL value_28 + LOCAL result_init_29 + LOCAL let_result_30 + + ans_0 = [] + internal_2 = LOAD s_52 + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + result_1 = VCALL CellularAutomaton out_string + internal_6 = LOAD s_53 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + result_5 = VCALL CellularAutomaton out_string + result_9 = VCALL CellularAutomaton in_string + ans_0 = result_9 + internal_12 = LOAD s_3 + instance_13 = ALLOCATE String + result_init_14 = CALL String_init + result_11 = VCALL CellularAutomaton out_string + internal_20 = LOAD s_54 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + op_17 = CALL String_equals + result_16 = ALLOCATE Bool + result_init_23 = CALL Bool_init + IF result_16 GOTO label_111 + instance_24 = ALLOCATE Bool + value_25 = LOAD 0 + result_init_26 = CALL Bool_init + result_15 = instance_24 + GOTO label_112 + LABEL label_111 + instance_27 = ALLOCATE Bool + value_28 = LOAD 0 + result_init_29 = CALL Bool_init + result_15 = instance_27 + LABEL label_112 + let_result_30 = result_15 + + RETURN let_result_30 +} +function CellularAutomaton.prompt2 { + PARAM self + + LOCAL ans_0 + LOCAL result_1 + LOCAL internal_2 + LOCAL instance_3 + LOCAL result_init_4 + LOCAL result_5 + LOCAL internal_6 + LOCAL instance_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL internal_10 + LOCAL instance_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL result_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + LOCAL result_init_23 + LOCAL instance_24 + LOCAL value_25 + LOCAL result_init_26 + LOCAL instance_27 + LOCAL value_28 + LOCAL result_init_29 + LOCAL let_result_30 + + ans_0 = [] + internal_2 = LOAD s_55 + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + result_1 = VCALL CellularAutomaton out_string + internal_6 = LOAD s_56 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + result_5 = VCALL CellularAutomaton out_string + internal_10 = LOAD s_57 + instance_11 = ALLOCATE String + result_init_12 = CALL String_init + result_9 = VCALL CellularAutomaton out_string + result_13 = VCALL CellularAutomaton in_string + ans_0 = result_13 + internal_20 = LOAD s_58 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + op_17 = CALL String_equals + result_16 = ALLOCATE Bool + result_init_23 = CALL Bool_init + IF result_16 GOTO label_113 + instance_24 = ALLOCATE Bool + value_25 = LOAD 0 + result_init_26 = CALL Bool_init + result_15 = instance_24 + GOTO label_114 + LABEL label_113 + instance_27 = ALLOCATE Bool + value_28 = LOAD 0 + result_init_29 = CALL Bool_init + result_15 = instance_27 + LABEL label_114 + let_result_30 = result_15 + + RETURN let_result_30 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL CellularAutomaton_init + + RETURN + SetAttr self cells None +} +function Main.main { + PARAM self + + LOCAL continue_0 + LOCAL choice_1 + LOCAL result_2 + LOCAL internal_3 + LOCAL instance_4 + LOCAL result_init_5 + LOCAL result_6 + LOCAL internal_7 + LOCAL instance_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL instance_12 + LOCAL value_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL result_17 + LOCAL result_18 + LOCAL result_19 + LOCAL init_20 + LOCAL result_21 + LOCAL result_22 + LOCAL cells_23 + LOCAL result_24 + LOCAL result_25 + LOCAL result_26 + LOCAL instance_27 + LOCAL value_28 + LOCAL result_init_29 + LOCAL result_30 + LOCAL result_31 + LOCAL cells_32 + LOCAL result_33 + LOCAL cells_34 + LOCAL let_result_35 + LOCAL let_result_36 + + continue_0 = [] + choice_1 = [] + internal_3 = LOAD s_59 + instance_4 = ALLOCATE String + result_init_5 = CALL String_init + result_2 = VCALL Main out_string + internal_7 = LOAD s_60 + instance_8 = ALLOCATE String + result_init_9 = CALL String_init + result_6 = VCALL Main out_string + LABEL label_115 + result_11 = VCALL Main prompt2 + IF result_11 GOTO label_116 + GOTO label_117 + LABEL label_116 + instance_12 = ALLOCATE Bool + value_13 = LOAD 0 + result_init_14 = CALL Bool_init + continue_0 = instance_12 + result_16 = VCALL Main option + choice_1 = result_16 + result_19 = ALLOCATE CellularAutomaton + init_20 = CALL CellularAutomaton_init + result_18 = VCALL CellularAutomaton init + SetAttr self cells result_18 + cells_23 = GetAttr self cells + result_22 = VCALL CellularAutomaton print + LABEL label_118 + IF continue_0 GOTO label_119 + GOTO label_120 + LABEL label_119 + result_26 = VCALL Main prompt + IF result_26 GOTO label_121 + instance_27 = ALLOCATE Bool + value_28 = LOAD 0 + result_init_29 = CALL Bool_init + continue_0 = instance_27 + result_25 = instance_27 + GOTO label_122 + LABEL label_121 + cells_32 = GetAttr self cells + result_31 = VCALL CellularAutomaton evolve + cells_34 = GetAttr self cells + result_33 = VCALL CellularAutomaton print + result_25 = result_33 + LABEL label_122 + GOTO label_118 + LABEL label_120 + result_24 = LOAD None + GOTO label_115 + LABEL label_117 + result_10 = LOAD None + let_result_35 = self + let_result_36 = let_result_35 + + RETURN let_result_36 +} \ No newline at end of file diff --git a/tests/codegen/list_test.cil b/tests/codegen/list_test.cil new file mode 100644 index 00000000..5b6efabf --- /dev/null +++ b/tests/codegen/list_test.cil @@ -0,0 +1,560 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type List { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method isNil : List.isNil + method head : List.head + method tail : List.tail + method cons : List.cons +} +type Cons { + attribute car + attribute cdr + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method isNil : Cons.isNil + method head : Cons.head + method tail : Cons.tail + method cons : List.cons + method init : Cons.init +} +type Main { + attribute mylist + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method print_list : Main.print_list + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: +s_4: \n + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function List_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL Object_init + + RETURN +} +function List.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function List.head { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = VCALL List abort + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + + RETURN instance_1 +} +function List.tail { + PARAM self + + LOCAL result_0 + + result_0 = VCALL List abort + + RETURN self +} +function List.cons { + PARAM self + PARAM i + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_1 = ALLOCATE Cons + init_2 = CALL Cons_init + result_0 = VCALL Cons init + + RETURN result_0 +} +function Cons_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = CALL List_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self car instance_1 + SetAttr self cdr None +} +function Cons.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function Cons.head { + PARAM self + + LOCAL car_0 + + car_0 = GetAttr self car + + RETURN car_0 +} +function Cons.tail { + PARAM self + + LOCAL cdr_0 + + cdr_0 = GetAttr self cdr + + RETURN cdr_0 +} +function Cons.init { + PARAM self + PARAM i + PARAM rest + + LOCAL result_0 + LOCAL result_1 + + SetAttr self car i + SetAttr self cdr rest + + RETURN self +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN + SetAttr self mylist None +} +function Main.print_list { + PARAM self + PARAM l + + LOCAL result_0 + LOCAL result_1 + LOCAL result_2 + LOCAL result_3 + LOCAL result_4 + LOCAL internal_5 + LOCAL instance_6 + LOCAL result_init_7 + LOCAL result_8 + LOCAL result_9 + LOCAL result_10 + LOCAL internal_11 + LOCAL instance_12 + LOCAL result_init_13 + + result_1 = VCALL List isNil + IF result_1 GOTO label_1 + result_3 = VCALL List head + result_2 = VCALL Main out_int + internal_5 = LOAD s_3 + instance_6 = ALLOCATE String + result_init_7 = CALL String_init + result_4 = VCALL Main out_string + result_9 = VCALL List tail + result_8 = VCALL Main print_list + result_0 = result_8 + GOTO label_2 + LABEL label_1 + internal_11 = LOAD s_4 + instance_12 = ALLOCATE String + result_init_13 = CALL String_init + result_10 = VCALL Main out_string + result_0 = result_10 + LABEL label_2 + + RETURN result_0 +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL result_2 + LOCAL result_3 + LOCAL result_4 + LOCAL result_5 + LOCAL init_6 + LOCAL instance_7 + LOCAL value_8 + LOCAL result_init_9 + LOCAL instance_10 + LOCAL value_11 + LOCAL result_init_12 + LOCAL instance_13 + LOCAL value_14 + LOCAL result_init_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL instance_19 + LOCAL value_20 + LOCAL result_init_21 + LOCAL result_22 + LOCAL result_23 + LOCAL result_24 + LOCAL op_25 + LOCAL internal_26 + LOCAL result_27 + LOCAL mylist_28 + LOCAL result_init_29 + LOCAL result_30 + LOCAL mylist_31 + LOCAL result_32 + LOCAL mylist_33 + LOCAL result_34 + + result_5 = ALLOCATE List + init_6 = CALL List_init + instance_7 = ALLOCATE Int + value_8 = LOAD 1 + result_init_9 = CALL Int_init + result_4 = VCALL List cons + instance_10 = ALLOCATE Int + value_11 = LOAD 2 + result_init_12 = CALL Int_init + result_3 = VCALL List cons + instance_13 = ALLOCATE Int + value_14 = LOAD 3 + result_init_15 = CALL Int_init + result_2 = VCALL List cons + instance_16 = ALLOCATE Int + value_17 = LOAD 4 + result_init_18 = CALL Int_init + result_1 = VCALL List cons + instance_19 = ALLOCATE Int + value_20 = LOAD 5 + result_init_21 = CALL Int_init + result_0 = VCALL List cons + SetAttr self mylist result_0 + LABEL label_3 + mylist_28 = GetAttr self mylist + result_27 = VCALL List isNil + internal_26 = GetAttr result_27 value + op_25 = not internal_26 + result_24 = ALLOCATE Bool + result_init_29 = CALL Bool_init + IF result_24 GOTO label_4 + GOTO label_5 + LABEL label_4 + mylist_31 = GetAttr self mylist + result_30 = VCALL Main print_list + mylist_33 = GetAttr self mylist + result_32 = VCALL List tail + SetAttr self mylist result_32 + GOTO label_3 + LABEL label_5 + result_23 = LOAD None + + RETURN result_23 +} \ No newline at end of file diff --git a/tests/codegen/new_complex_test.cil b/tests/codegen/new_complex_test.cil new file mode 100644 index 00000000..8c07af1f --- /dev/null +++ b/tests/codegen/new_complex_test.cil @@ -0,0 +1,719 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} +type Complex { + attribute x + attribute y + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method init : Complex.init + method print : Complex.print + method reflect_0 : Complex.reflect_0 + method reflect_X : Complex.reflect_X + method reflect_Y : Complex.reflect_Y + method equal : Complex.equal + method x_value : Complex.x_value + method y_value : Complex.y_value +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: =(\n +s_4: =)\n +s_5: + +s_6: I + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL instance_3 + LOCAL value_4 + LOCAL result_init_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL c_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_15 + LOCAL result_16 + LOCAL result_init_17 + LOCAL result_18 + LOCAL internal_19 + LOCAL instance_20 + LOCAL result_init_21 + LOCAL result_22 + LOCAL internal_23 + LOCAL instance_24 + LOCAL result_init_25 + LOCAL result_26 + LOCAL result_27 + LOCAL result_28 + LOCAL result_29 + LOCAL result_30 + LOCAL result_31 + LOCAL internal_32 + LOCAL instance_33 + LOCAL result_init_34 + LOCAL result_35 + LOCAL internal_36 + LOCAL instance_37 + LOCAL result_init_38 + LOCAL let_result_39 + + result_1 = ALLOCATE Complex + init_2 = CALL Complex_init + instance_3 = ALLOCATE Int + value_4 = LOAD 1 + result_init_5 = CALL Int_init + instance_6 = ALLOCATE Int + value_7 = LOAD 1 + result_init_8 = CALL Int_init + result_0 = VCALL Complex init + c_9 = result_0 + result_15 = VCALL Complex reflect_X + result_16 = VCALL Complex reflect_0 + left_13 = GetAttr result_15 value + right_14 = GetAttr result_16 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_17 = CALL Bool_init + IF result_11 GOTO label_1 + internal_19 = LOAD s_3 + instance_20 = ALLOCATE String + result_init_21 = CALL String_init + result_18 = VCALL Main out_string + result_10 = result_18 + GOTO label_2 + LABEL label_1 + internal_23 = LOAD s_4 + instance_24 = ALLOCATE String + result_init_25 = CALL String_init + result_22 = VCALL Main out_string + result_10 = result_22 + LABEL label_2 + result_29 = VCALL Complex reflect_X + result_28 = VCALL Complex reflect_Y + result_30 = VCALL Complex reflect_0 + result_27 = VCALL Complex equal + IF result_27 GOTO label_3 + internal_32 = LOAD s_3 + instance_33 = ALLOCATE String + result_init_34 = CALL String_init + result_31 = VCALL Main out_string + result_26 = result_31 + GOTO label_4 + LABEL label_3 + internal_36 = LOAD s_4 + instance_37 = ALLOCATE String + result_init_38 = CALL String_init + result_35 = VCALL Main out_string + result_26 = result_35 + LABEL label_4 + let_result_39 = result_26 + + RETURN let_result_39 +} +function Complex_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + LOCAL instance_4 + LOCAL value_5 + LOCAL result_init_6 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self x instance_1 + instance_4 = ALLOCATE Int + value_5 = LOAD 0 + result_init_6 = CALL Int_init + SetAttr self y instance_4 +} +function Complex.init { + PARAM self + PARAM a + PARAM b + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL x_4 + LOCAL result_init_5 + LOCAL result_6 + LOCAL op_7 + LOCAL left_8 + LOCAL right_9 + LOCAL y_10 + LOCAL result_init_11 + + x_4 = GetAttr self x + left_2 = GetAttr x_4 value + right_3 = GetAttr a value + op_1 = left_2 = right_3 + result_0 = ALLOCATE Bool + result_init_5 = CALL Bool_init + y_10 = GetAttr self y + left_8 = GetAttr y_10 value + right_9 = GetAttr b value + op_7 = left_8 = right_9 + result_6 = ALLOCATE Bool + result_init_11 = CALL Bool_init + + RETURN self +} +function Complex.print { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL y_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL result_12 + LOCAL result_13 + LOCAL x_14 + LOCAL internal_15 + LOCAL instance_16 + LOCAL result_init_17 + LOCAL y_18 + LOCAL internal_19 + LOCAL instance_20 + LOCAL result_init_21 + LOCAL result_22 + LOCAL x_23 + + y_5 = GetAttr self y + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + left_3 = GetAttr y_5 value + right_4 = GetAttr instance_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_1 GOTO label_5 + x_14 = GetAttr self x + result_13 = VCALL Complex out_int + internal_15 = LOAD s_5 + instance_16 = ALLOCATE String + result_init_17 = CALL String_init + result_12 = VCALL IO out_string + y_18 = GetAttr self y + result_11 = VCALL IO out_int + internal_19 = LOAD s_6 + instance_20 = ALLOCATE String + result_init_21 = CALL String_init + result_10 = VCALL IO out_string + result_0 = result_10 + GOTO label_6 + LABEL label_5 + x_23 = GetAttr self x + result_22 = VCALL Complex out_int + result_0 = result_22 + LABEL label_6 + + RETURN result_0 +} +function Complex.reflect_0 { + PARAM self + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL x_4 + LOCAL result_5 + LOCAL op_6 + LOCAL internal_7 + LOCAL x_8 + LOCAL result_init_9 + LOCAL result_init_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL y_15 + LOCAL result_16 + LOCAL op_17 + LOCAL internal_18 + LOCAL y_19 + LOCAL result_init_20 + LOCAL result_init_21 + + x_4 = GetAttr self x + x_8 = GetAttr self x + internal_7 = GetAttr x_8 value + op_6 = ~ internal_7 + result_5 = ALLOCATE Int + result_init_9 = CALL Int_init + left_2 = GetAttr x_4 value + left_2 = GetAttr x_4 value + op_1 = left_2 = right_3 + result_0 = ALLOCATE Bool + result_init_10 = CALL Bool_init + y_15 = GetAttr self y + y_19 = GetAttr self y + internal_18 = GetAttr y_19 value + op_17 = ~ internal_18 + result_16 = ALLOCATE Int + result_init_20 = CALL Int_init + left_13 = GetAttr y_15 value + left_13 = GetAttr y_15 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_21 = CALL Bool_init + + RETURN self +} +function Complex.reflect_X { + PARAM self + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL y_4 + LOCAL result_5 + LOCAL op_6 + LOCAL internal_7 + LOCAL y_8 + LOCAL result_init_9 + LOCAL result_init_10 + + y_4 = GetAttr self y + y_8 = GetAttr self y + internal_7 = GetAttr y_8 value + op_6 = ~ internal_7 + result_5 = ALLOCATE Int + result_init_9 = CALL Int_init + left_2 = GetAttr y_4 value + left_2 = GetAttr y_4 value + op_1 = left_2 = right_3 + result_0 = ALLOCATE Bool + result_init_10 = CALL Bool_init + + RETURN self +} +function Complex.reflect_Y { + PARAM self + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL x_4 + LOCAL result_5 + LOCAL op_6 + LOCAL internal_7 + LOCAL x_8 + LOCAL result_init_9 + LOCAL result_init_10 + + x_4 = GetAttr self x + x_8 = GetAttr self x + internal_7 = GetAttr x_8 value + op_6 = ~ internal_7 + result_5 = ALLOCATE Int + result_init_9 = CALL Int_init + left_2 = GetAttr x_4 value + left_2 = GetAttr x_4 value + op_1 = left_2 = right_3 + result_0 = ALLOCATE Bool + result_init_10 = CALL Bool_init + + RETURN self +} +function Complex.equal { + PARAM self + PARAM d + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL x_5 + LOCAL result_6 + LOCAL result_init_7 + LOCAL instance_8 + LOCAL value_9 + LOCAL result_init_10 + LOCAL result_11 + LOCAL result_12 + LOCAL op_13 + LOCAL left_14 + LOCAL right_15 + LOCAL y_16 + LOCAL result_17 + LOCAL result_init_18 + LOCAL instance_19 + LOCAL value_20 + LOCAL result_init_21 + LOCAL instance_22 + LOCAL value_23 + LOCAL result_init_24 + + x_5 = GetAttr self x + result_6 = VCALL Complex x_value + left_3 = GetAttr x_5 value + right_4 = GetAttr result_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_7 = CALL Bool_init + IF result_1 GOTO label_7 + instance_8 = ALLOCATE Bool + value_9 = LOAD 0 + result_init_10 = CALL Bool_init + result_0 = instance_8 + GOTO label_8 + LABEL label_7 + y_16 = GetAttr self y + result_17 = VCALL Complex y_value + left_14 = GetAttr y_16 value + right_15 = GetAttr result_17 value + op_13 = left_14 = right_15 + result_12 = ALLOCATE Bool + result_init_18 = CALL Bool_init + IF result_12 GOTO label_9 + instance_19 = ALLOCATE Bool + value_20 = LOAD 0 + result_init_21 = CALL Bool_init + result_11 = instance_19 + GOTO label_10 + LABEL label_9 + instance_22 = ALLOCATE Bool + value_23 = LOAD 0 + result_init_24 = CALL Bool_init + result_11 = instance_22 + LABEL label_10 + result_0 = result_11 + LABEL label_8 + + RETURN result_0 +} +function Complex.x_value { + PARAM self + + LOCAL x_0 + + x_0 = GetAttr self x + + RETURN x_0 +} +function Complex.y_value { + PARAM self + + LOCAL y_0 + + y_0 = GetAttr self y + + RETURN y_0 +} \ No newline at end of file diff --git a/tests/codegen/palindrome_test.cil b/tests/codegen/palindrome_test.cil new file mode 100644 index 00000000..3bb7d0a1 --- /dev/null +++ b/tests/codegen/palindrome_test.cil @@ -0,0 +1,517 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + attribute i + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method pal : Main.pal + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: enter a string\n +s_4: that was not a palindrome\n +s_5: that was a palindrome\n + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self i instance_1 +} +function Main.pal { + PARAM self + PARAM s + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL result_20 + LOCAL result_21 + LOCAL op_22 + LOCAL left_23 + LOCAL right_24 + LOCAL result_25 + LOCAL instance_26 + LOCAL value_27 + LOCAL result_init_28 + LOCAL instance_29 + LOCAL value_30 + LOCAL result_init_31 + LOCAL result_32 + LOCAL instance_33 + LOCAL value_34 + LOCAL result_init_35 + LOCAL result_36 + LOCAL op_37 + LOCAL left_38 + LOCAL right_39 + LOCAL result_40 + LOCAL instance_41 + LOCAL value_42 + LOCAL result_init_43 + LOCAL result_init_44 + LOCAL result_init_45 + LOCAL instance_46 + LOCAL value_47 + LOCAL result_init_48 + LOCAL result_49 + LOCAL result_50 + LOCAL result_51 + LOCAL op_52 + LOCAL left_53 + LOCAL right_54 + LOCAL result_55 + LOCAL instance_56 + LOCAL value_57 + LOCAL result_init_58 + LOCAL result_init_59 + LOCAL instance_60 + LOCAL value_61 + LOCAL result_init_62 + LOCAL instance_63 + LOCAL value_64 + LOCAL result_init_65 + LOCAL instance_66 + LOCAL value_67 + LOCAL result_init_68 + + result_5 = VCALL String length + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_1 GOTO label_1 + result_15 = VCALL String length + instance_16 = ALLOCATE Int + value_17 = LOAD 1 + result_init_18 = CALL Int_init + left_13 = GetAttr result_15 value + right_14 = GetAttr instance_16 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_19 = CALL Bool_init + IF result_11 GOTO label_2 + instance_26 = ALLOCATE Int + value_27 = LOAD 1 + result_init_28 = CALL Int_init + instance_29 = ALLOCATE Int + value_30 = LOAD 0 + result_init_31 = CALL Int_init + result_25 = VCALL String substr + instance_33 = ALLOCATE Int + value_34 = LOAD 1 + result_init_35 = CALL Int_init + result_40 = VCALL String length + instance_41 = ALLOCATE Int + value_42 = LOAD 1 + result_init_43 = CALL Int_init + left_38 = GetAttr result_40 value + right_39 = GetAttr instance_41 value + op_37 = left_38 - right_39 + result_36 = ALLOCATE Int + result_init_44 = CALL Int_init + result_32 = VCALL String substr + left_23 = GetAttr result_25 value + right_24 = GetAttr result_32 value + op_22 = left_23 = right_24 + result_21 = ALLOCATE Bool + result_init_45 = CALL Bool_init + IF result_21 GOTO label_3 + instance_46 = ALLOCATE Bool + value_47 = LOAD 0 + result_init_48 = CALL Bool_init + result_20 = instance_46 + GOTO label_4 + LABEL label_3 + result_55 = VCALL String length + instance_56 = ALLOCATE Int + value_57 = LOAD 2 + result_init_58 = CALL Int_init + left_53 = GetAttr result_55 value + right_54 = GetAttr instance_56 value + op_52 = left_53 - right_54 + result_51 = ALLOCATE Int + result_init_59 = CALL Int_init + instance_60 = ALLOCATE Int + value_61 = LOAD 1 + result_init_62 = CALL Int_init + result_50 = VCALL String substr + result_49 = VCALL Main pal + result_20 = result_49 + LABEL label_4 + result_10 = result_20 + GOTO label_5 + LABEL label_2 + instance_63 = ALLOCATE Bool + value_64 = LOAD 0 + result_init_65 = CALL Bool_init + result_10 = instance_63 + LABEL label_5 + result_0 = result_10 + GOTO label_6 + LABEL label_1 + instance_66 = ALLOCATE Bool + value_67 = LOAD 0 + result_init_68 = CALL Bool_init + result_0 = instance_66 + LABEL label_6 + + RETURN result_0 +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL op_1 + LOCAL internal_2 + LOCAL instance_3 + LOCAL value_4 + LOCAL result_init_5 + LOCAL result_init_6 + LOCAL result_7 + LOCAL result_8 + LOCAL internal_9 + LOCAL instance_10 + LOCAL result_init_11 + LOCAL result_12 + LOCAL result_13 + LOCAL result_14 + LOCAL result_15 + LOCAL internal_16 + LOCAL instance_17 + LOCAL result_init_18 + LOCAL result_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + + instance_3 = ALLOCATE Int + value_4 = LOAD 1 + result_init_5 = CALL Int_init + internal_2 = GetAttr instance_3 value + op_1 = ~ internal_2 + result_0 = ALLOCATE Int + result_init_6 = CALL Int_init + SetAttr self i result_0 + internal_9 = LOAD s_3 + instance_10 = ALLOCATE String + result_init_11 = CALL String_init + result_8 = VCALL Main out_string + result_14 = VCALL Main in_string + result_13 = VCALL Main pal + IF result_13 GOTO label_7 + internal_16 = LOAD s_4 + instance_17 = ALLOCATE String + result_init_18 = CALL String_init + result_15 = VCALL Main out_string + result_12 = result_15 + GOTO label_8 + LABEL label_7 + internal_20 = LOAD s_5 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + result_19 = VCALL Main out_string + result_12 = result_19 + LABEL label_8 + + RETURN result_12 +} \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 6cf06449..2f7bc741 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -53,6 +53,10 @@ s_0: .asciiz "Abort called from class " s_1: .asciiz " " empty_str: .asciiz "" +s_3: .asciiz "2 is trivially prime.\n" +s_4: .asciiz " is prime.\n" +s_5: .asciiz "continue" +s_6: .asciiz "halt" .text dispatch_void_error: la $a0 dispatch_void @@ -599,16 +603,55 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Main_init: -addi $sp, $sp, -52 +addi $sp, $sp, -540 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal IO_init sw $a1, 4($sp) move $a1, $zero +la $t0, s_3 +sw $t0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 8($sp) li $a0, 20 li $v0, 9 syscall @@ -622,19 +665,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 24($sp) +la $t0, 2 +sw $t0, 28($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 16($sp) -lw $t0, 56($sp) -lw $t1, 8($sp) +sw $a1, 32($sp) +lw $t0, 544($sp) +lw $t1, 24($sp) sw $t1, 16($t0) +lw $t0, 544($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 544($sp) +lw $t1, 36($sp) +sw $t1, 20($t0) li $a0, 20 li $v0, 9 syscall @@ -648,18 +699,139 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 20($sp) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 48($sp) +lw $t0, 544($sp) +lw $t1, 40($sp) +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +la $t0, 500 +sw $t0, 56($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 60($sp) +lw $t0, 544($sp) +lw $t1, 52($sp) +sw $t1, 28($t0) +label_1: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +lw $t0, 68($sp) +lw $a0, 16($t0) +bnez $a0, label_2 +b label_3 +label_2: +lw $t0, 544($sp) lw $t1, 20($t0) +sw $t1, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +la $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) +add $a0, $a0, $t1 +sw $a0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 28($sp) -lw $t0, 56($sp) -lw $t1, 20($sp) +sw $a1, 112($sp) +lw $t0, 544($sp) +lw $t1, 80($sp) sw $t1, 20($t0) li $a0, 20 li $v0, 9 @@ -674,19 +846,41 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 120($sp) +la $t0, 2 +sw $t0, 124($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 40($sp) -lw $t0, 56($sp) -lw $t1, 32($sp) +sw $a1, 128($sp) +lw $t0, 544($sp) +lw $t1, 120($sp) sw $t1, 24($t0) +label_4: +lw $t0, 544($sp) +lw $t1, 20($t0) +sw $t1, 160($sp) +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 180($sp) +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 184($sp) +lw $t0, 180($sp) +lw $t1, 16($t0) +sw $t1, 172($sp) +lw $t0, 184($sp) +lw $t1, 16($t0) +sw $t1, 176($sp) +lw $a0, 172($sp) +lw $t1, 176($sp) +mul $a0, $a0, $t1 +sw $a0, 168($sp) li $a0, 20 li $v0, 9 syscall @@ -700,24 +894,664 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 52($sp) -lw $t0, 56($sp) -lw $t1, 44($sp) -sw $t1, 28($t0) -lw $t0, 56($sp) -la $t1, void +sw $a1, 188($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 152($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 156($sp) +lw $a0, 152($sp) +lw $t1, 156($sp) +slt $a0, $a0, $t1 +sw $a0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 192($sp) +lw $t0, 144($sp) +lw $a0, 16($t0) +bnez $a0, label_7 +lw $t0, 544($sp) +lw $t1, 20($t0) +sw $t1, 232($sp) +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 252($sp) +lw $t0, 544($sp) +lw $t1, 20($t0) +sw $t1, 272($sp) +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 276($sp) +lw $t0, 272($sp) +lw $t1, 16($t0) +sw $t1, 264($sp) +lw $t0, 276($sp) +lw $t1, 16($t0) +sw $t1, 268($sp) +lw $a0, 264($sp) +lw $t1, 268($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 260($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 256($sp) +move $t0, $sp +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 280($sp) +lw $t0, 252($sp) +lw $t1, 16($t0) +sw $t1, 244($sp) +lw $t0, 256($sp) +lw $t1, 16($t0) +sw $t1, 248($sp) +lw $a0, 244($sp) +lw $t1, 248($sp) +mul $a0, $a0, $t1 +sw $a0, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 236($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +lw $t0, 232($sp) +lw $t1, 16($t0) +sw $t1, 224($sp) +lw $t0, 236($sp) +lw $t1, 16($t0) +sw $t1, 228($sp) +lw $a0, 224($sp) +lw $t1, 228($sp) +sub $a0, $a0, $t1 +sw $a0, 220($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 216($sp) +move $t0, $sp +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 288($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 300($sp) +lw $t0, 216($sp) +lw $t1, 16($t0) +sw $t1, 208($sp) +lw $t0, 292($sp) +lw $t1, 16($t0) +sw $t1, 212($sp) +lw $a0, 208($sp) +lw $t1, 212($sp) +seq $a0, $a0, $t1 +sw $a0, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 200($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 304($sp) +lw $t0, 200($sp) +lw $a0, 16($t0) +bnez $a0, label_8 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 308($sp) +move $t0, $sp +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 308($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 316($sp) +lw $t1, 308($sp) +sw $t1, 196($sp) +b label_9 +label_8: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 320($sp) +move $t0, $sp +lw $t1, 324($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 328($sp) +lw $t1, 320($sp) +sw $t1, 196($sp) +label_9: +lw $t1, 196($sp) +sw $t1, 140($sp) +b label_10 +label_7: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 340($sp) +lw $t1, 332($sp) +sw $t1, 140($sp) +label_10: +lw $t0, 140($sp) +lw $a0, 16($t0) +bnez $a0, label_5 +b label_6 +label_5: +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 360($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 364($sp) +la $t0, 1 +sw $t0, 368($sp) +move $t0, $sp +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 364($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 372($sp) +lw $t0, 360($sp) +lw $t1, 16($t0) +sw $t1, 352($sp) +lw $t0, 364($sp) +lw $t1, 16($t0) +sw $t1, 356($sp) +lw $a0, 352($sp) +lw $t1, 356($sp) +add $a0, $a0, $t1 +sw $a0, 348($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 344($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 344($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 376($sp) +lw $t0, 544($sp) +lw $t1, 344($sp) +sw $t1, 24($t0) +b label_4 +label_6: +lw $t0, 544($sp) +lw $t1, 20($t0) +sw $t1, 404($sp) +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 424($sp) +lw $t0, 544($sp) +lw $t1, 24($t0) +sw $t1, 428($sp) +lw $t0, 424($sp) +lw $t1, 16($t0) +sw $t1, 416($sp) +lw $t0, 428($sp) +lw $t1, 16($t0) +sw $t1, 420($sp) +lw $a0, 416($sp) +lw $t1, 420($sp) +mul $a0, $a0, $t1 +sw $a0, 412($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 412($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 432($sp) +lw $t0, 404($sp) +lw $t1, 16($t0) +sw $t1, 396($sp) +lw $t0, 408($sp) +lw $t1, 16($t0) +sw $t1, 400($sp) +lw $a0, 396($sp) +lw $t1, 400($sp) +slt $a0, $a0, $t1 +sw $a0, 392($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 388($sp) +move $t0, $sp +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 388($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 436($sp) +lw $t0, 388($sp) +lw $a0, 16($t0) +bnez $a0, label_11 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 440($sp) +move $t0, $sp +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 448($sp) +lw $t1, 440($sp) +sw $t1, 384($sp) +b label_12 +label_11: +lw $t0, 544($sp) +lw $t1, 20($t0) +sw $t1, 452($sp) +lw $t0, 544($sp) +lw $t1, 452($sp) +sw $t1, 16($t0) +lw $t0, 544($sp) +lw $t1, 16($t0) +sw $t1, 464($sp) +move $t0, $sp +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 460($sp) +la $t0, s_4 +sw $t0, 472($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +move $t0, $sp +lw $t1, 472($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 480($sp) +move $t0, $sp +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 544($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 468($sp) +lw $t1, 468($sp) +sw $t1, 384($sp) +label_12: +lw $t0, 544($sp) +lw $t1, 28($t0) +sw $t1, 504($sp) +lw $t0, 544($sp) +lw $t1, 20($t0) +sw $t1, 508($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 496($sp) +lw $t0, 508($sp) +lw $t1, 16($t0) +sw $t1, 500($sp) +lw $a0, 496($sp) +lw $t1, 500($sp) +sle $a0, $a0, $t1 +sw $a0, 492($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 488($sp) +move $t0, $sp +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 512($sp) +lw $t0, 488($sp) +lw $a0, 16($t0) +bnez $a0, label_13 +la $t0, s_5 +sw $t0, 516($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 520($sp) +move $t0, $sp +lw $t1, 516($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 520($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 524($sp) +lw $t1, 520($sp) +sw $t1, 484($sp) +b label_14 +label_13: +la $t0, s_6 +sw $t0, 532($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 536($sp) +move $t0, $sp +lw $t1, 532($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 536($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 540($sp) +move $t0, $sp +lw $t1, 536($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 536($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 528($sp) +lw $t1, 528($sp) +sw $t1, 484($sp) +label_14: +b label_1 +label_3: +lw $t0, 544($sp) +lw $t1, 64($sp) sw $t1, 32($t0) lw $ra, 0($sp) -addi $sp, $sp, 60 +addi $sp, $sp, 548 jr $ra Main.main: addi $sp, $sp, -12 diff --git a/tests/codegen/primes_test.cil b/tests/codegen/primes_test.cil new file mode 100644 index 00000000..607d37a7 --- /dev/null +++ b/tests/codegen/primes_test.cil @@ -0,0 +1,613 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + attribute out + attribute testee + attribute divisor + attribute stop + attribute m + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: 2 is trivially prime.\n +s_4: is prime.\n +s_5: continue +s_6: halt + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL internal_2 + LOCAL instance_3 + LOCAL result_init_4 + LOCAL instance_5 + LOCAL value_6 + LOCAL result_init_7 + LOCAL out_8 + LOCAL instance_9 + LOCAL value_10 + LOCAL result_init_11 + LOCAL instance_12 + LOCAL value_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL testee_23 + LOCAL instance_24 + LOCAL value_25 + LOCAL result_init_26 + LOCAL result_init_27 + LOCAL result_28 + LOCAL instance_29 + LOCAL value_30 + LOCAL result_init_31 + LOCAL result_32 + LOCAL result_33 + LOCAL result_34 + LOCAL result_35 + LOCAL op_36 + LOCAL left_37 + LOCAL right_38 + LOCAL testee_39 + LOCAL result_40 + LOCAL op_41 + LOCAL left_42 + LOCAL right_43 + LOCAL divisor_44 + LOCAL divisor_45 + LOCAL result_init_46 + LOCAL result_init_47 + LOCAL result_48 + LOCAL result_49 + LOCAL op_50 + LOCAL left_51 + LOCAL right_52 + LOCAL result_53 + LOCAL op_54 + LOCAL left_55 + LOCAL right_56 + LOCAL testee_57 + LOCAL result_58 + LOCAL op_59 + LOCAL left_60 + LOCAL right_61 + LOCAL divisor_62 + LOCAL result_63 + LOCAL op_64 + LOCAL left_65 + LOCAL right_66 + LOCAL testee_67 + LOCAL divisor_68 + LOCAL result_init_69 + LOCAL result_init_70 + LOCAL result_init_71 + LOCAL instance_72 + LOCAL value_73 + LOCAL result_init_74 + LOCAL result_init_75 + LOCAL instance_76 + LOCAL value_77 + LOCAL result_init_78 + LOCAL instance_79 + LOCAL value_80 + LOCAL result_init_81 + LOCAL instance_82 + LOCAL value_83 + LOCAL result_init_84 + LOCAL result_85 + LOCAL op_86 + LOCAL left_87 + LOCAL right_88 + LOCAL divisor_89 + LOCAL instance_90 + LOCAL value_91 + LOCAL result_init_92 + LOCAL result_init_93 + LOCAL result_94 + LOCAL result_95 + LOCAL result_96 + LOCAL op_97 + LOCAL left_98 + LOCAL right_99 + LOCAL testee_100 + LOCAL result_101 + LOCAL op_102 + LOCAL left_103 + LOCAL right_104 + LOCAL divisor_105 + LOCAL divisor_106 + LOCAL result_init_107 + LOCAL result_init_108 + LOCAL instance_109 + LOCAL value_110 + LOCAL result_init_111 + LOCAL testee_112 + LOCAL result_113 + LOCAL result_114 + LOCAL out_115 + LOCAL result_116 + LOCAL internal_117 + LOCAL instance_118 + LOCAL result_init_119 + LOCAL result_120 + LOCAL result_121 + LOCAL op_122 + LOCAL left_123 + LOCAL right_124 + LOCAL stop_125 + LOCAL testee_126 + LOCAL result_init_127 + LOCAL internal_128 + LOCAL instance_129 + LOCAL result_init_130 + LOCAL result_131 + LOCAL internal_132 + LOCAL instance_133 + LOCAL result_init_134 + + result_0 = CALL IO_init + + RETURN + internal_2 = LOAD s_3 + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + result_1 = VCALL Main out_string + instance_5 = ALLOCATE Int + value_6 = LOAD 2 + result_init_7 = CALL Int_init + SetAttr self out instance_5 + out_8 = GetAttr self out + SetAttr self testee out_8 + instance_9 = ALLOCATE Int + value_10 = LOAD 0 + result_init_11 = CALL Int_init + SetAttr self divisor instance_9 + instance_12 = ALLOCATE Int + value_13 = LOAD 500 + result_init_14 = CALL Int_init + SetAttr self stop instance_12 + LABEL label_1 + instance_16 = ALLOCATE Bool + value_17 = LOAD 0 + result_init_18 = CALL Bool_init + IF instance_16 GOTO label_2 + GOTO label_3 + LABEL label_2 + testee_23 = GetAttr self testee + instance_24 = ALLOCATE Int + value_25 = LOAD 1 + result_init_26 = CALL Int_init + left_21 = GetAttr testee_23 value + right_22 = GetAttr instance_24 value + op_20 = left_21 + right_22 + result_19 = ALLOCATE Int + result_init_27 = CALL Int_init + SetAttr self testee result_19 + instance_29 = ALLOCATE Int + value_30 = LOAD 2 + result_init_31 = CALL Int_init + SetAttr self divisor instance_29 + LABEL label_4 + testee_39 = GetAttr self testee + divisor_44 = GetAttr self divisor + divisor_45 = GetAttr self divisor + left_42 = GetAttr divisor_44 value + right_43 = GetAttr divisor_45 value + op_41 = left_42 * right_43 + result_40 = ALLOCATE Int + result_init_46 = CALL Int_init + left_37 = GetAttr testee_39 value + right_38 = GetAttr result_40 value + op_36 = left_37 < right_38 + result_35 = ALLOCATE Bool + result_init_47 = CALL Bool_init + IF result_35 GOTO label_7 + testee_57 = GetAttr self testee + divisor_62 = GetAttr self divisor + testee_67 = GetAttr self testee + divisor_68 = GetAttr self divisor + left_65 = GetAttr testee_67 value + right_66 = GetAttr divisor_68 value + op_64 = left_65 / right_66 + result_63 = ALLOCATE Int + result_init_69 = CALL Int_init + left_60 = GetAttr divisor_62 value + right_61 = GetAttr result_63 value + op_59 = left_60 * right_61 + result_58 = ALLOCATE Int + result_init_70 = CALL Int_init + left_55 = GetAttr testee_57 value + right_56 = GetAttr result_58 value + op_54 = left_55 - right_56 + result_53 = ALLOCATE Int + result_init_71 = CALL Int_init + instance_72 = ALLOCATE Int + value_73 = LOAD 0 + result_init_74 = CALL Int_init + left_51 = GetAttr result_53 value + right_52 = GetAttr instance_72 value + op_50 = left_51 = right_52 + result_49 = ALLOCATE Bool + result_init_75 = CALL Bool_init + IF result_49 GOTO label_8 + instance_76 = ALLOCATE Bool + value_77 = LOAD 0 + result_init_78 = CALL Bool_init + result_48 = instance_76 + GOTO label_9 + LABEL label_8 + instance_79 = ALLOCATE Bool + value_80 = LOAD 0 + result_init_81 = CALL Bool_init + result_48 = instance_79 + LABEL label_9 + result_34 = result_48 + GOTO label_10 + LABEL label_7 + instance_82 = ALLOCATE Bool + value_83 = LOAD 0 + result_init_84 = CALL Bool_init + result_34 = instance_82 + LABEL label_10 + IF result_34 GOTO label_5 + GOTO label_6 + LABEL label_5 + divisor_89 = GetAttr self divisor + instance_90 = ALLOCATE Int + value_91 = LOAD 1 + result_init_92 = CALL Int_init + left_87 = GetAttr divisor_89 value + right_88 = GetAttr instance_90 value + op_86 = left_87 + right_88 + result_85 = ALLOCATE Int + result_init_93 = CALL Int_init + SetAttr self divisor result_85 + GOTO label_4 + LABEL label_6 + result_33 = LOAD None + testee_100 = GetAttr self testee + divisor_105 = GetAttr self divisor + divisor_106 = GetAttr self divisor + left_103 = GetAttr divisor_105 value + right_104 = GetAttr divisor_106 value + op_102 = left_103 * right_104 + result_101 = ALLOCATE Int + result_init_107 = CALL Int_init + left_98 = GetAttr testee_100 value + right_99 = GetAttr result_101 value + op_97 = left_98 < right_99 + result_96 = ALLOCATE Bool + result_init_108 = CALL Bool_init + IF result_96 GOTO label_11 + instance_109 = ALLOCATE Int + value_110 = LOAD 0 + result_init_111 = CALL Int_init + result_95 = instance_109 + GOTO label_12 + LABEL label_11 + testee_112 = GetAttr self testee + SetAttr self out testee_112 + out_115 = GetAttr self out + result_114 = VCALL Main out_int + internal_117 = LOAD s_4 + instance_118 = ALLOCATE String + result_init_119 = CALL String_init + result_116 = VCALL Main out_string + result_95 = result_116 + LABEL label_12 + stop_125 = GetAttr self stop + testee_126 = GetAttr self testee + left_123 = GetAttr stop_125 value + right_124 = GetAttr testee_126 value + op_122 = left_123 <= right_124 + result_121 = ALLOCATE Bool + result_init_127 = CALL Bool_init + IF result_121 GOTO label_13 + internal_128 = LOAD s_5 + instance_129 = ALLOCATE String + result_init_130 = CALL String_init + result_120 = instance_129 + GOTO label_14 + LABEL label_13 + internal_132 = LOAD s_6 + instance_133 = ALLOCATE String + result_init_134 = CALL String_init + result_131 = VCALL String abort + result_120 = result_131 + LABEL label_14 + GOTO label_1 + LABEL label_3 + result_15 = LOAD None + SetAttr self m result_15 +} +function Main.main { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + + RETURN instance_0 +} \ No newline at end of file diff --git a/tests/codegen/sort-list_test.cil b/tests/codegen/sort-list_test.cil new file mode 100644 index 00000000..1120b83a --- /dev/null +++ b/tests/codegen/sort-list_test.cil @@ -0,0 +1,819 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type List { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : List.isNil + method cons : List.cons + method car : List.car + method cdr : List.cdr + method rev : List.rev + method sort : List.sort + method insert : List.insert + method rcons : List.rcons + method print_list : List.print_list +} +type Cons { + attribute xcar + attribute xcdr + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : Cons.isNil + method cons : List.cons + method car : Cons.car + method cdr : Cons.cdr + method rev : Cons.rev + method sort : Cons.sort + method insert : Cons.insert + method rcons : Cons.rcons + method print_list : Cons.print_list + method init : Cons.init +} +type Nil { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : Nil.isNil + method cons : List.cons + method car : List.car + method cdr : List.cdr + method rev : Nil.rev + method sort : Nil.sort + method insert : Nil.insert + method rcons : Nil.rcons + method print_list : Nil.print_list +} +type Main { + attribute l + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method iota : Main.iota + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: \n +s_4: How many numbers to sort? + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT_STR msg_0 + type_name_1 = TYPEOF self + PRINT_STR type_name_1 + eol_2 = LOAD s_1 + PRINT_STR eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_STR v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT_INT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ STR + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ INT + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function List_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN +} +function List.isNil { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = VCALL List abort + instance_1 = ALLOCATE Bool + value_2 = LOAD 0 + result_init_3 = CALL Bool_init + + RETURN instance_1 +} +function List.cons { + PARAM self + PARAM hd + + LOCAL result_0 + LOCAL init_1 + LOCAL new_cell_2 + LOCAL result_3 + LOCAL let_result_4 + + result_0 = ALLOCATE Cons + init_1 = CALL Cons_init + new_cell_2 = result_0 + result_3 = VCALL Cons init + let_result_4 = result_3 + + RETURN let_result_4 +} +function List.car { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_0 = VCALL List abort + result_1 = ALLOCATE Int + init_2 = CALL Int_init + + RETURN result_1 +} +function List.cdr { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_0 = VCALL List abort + result_1 = ALLOCATE List + init_2 = CALL List_init + + RETURN result_1 +} +function List.rev { + PARAM self + + LOCAL result_0 + + result_0 = VCALL List cdr + + RETURN result_0 +} +function List.sort { + PARAM self + + LOCAL result_0 + + result_0 = VCALL List cdr + + RETURN result_0 +} +function List.insert { + PARAM self + PARAM i + + LOCAL result_0 + + result_0 = VCALL List cdr + + RETURN result_0 +} +function List.rcons { + PARAM self + PARAM i + + LOCAL result_0 + + result_0 = VCALL List cdr + + RETURN result_0 +} +function List.print_list { + PARAM self + + LOCAL result_0 + + result_0 = VCALL List abort + + RETURN result_0 +} +function Cons_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = CALL List_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self xcar instance_1 + SetAttr self xcdr None +} +function Cons.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function Cons.init { + PARAM self + PARAM hd + PARAM tl + + LOCAL result_0 + LOCAL result_1 + + SetAttr self xcar hd + SetAttr self xcdr tl + + RETURN self +} +function Cons.car { + PARAM self + + LOCAL xcar_0 + + xcar_0 = GetAttr self xcar + + RETURN xcar_0 +} +function Cons.cdr { + PARAM self + + LOCAL xcdr_0 + + xcdr_0 = GetAttr self xcdr + + RETURN xcdr_0 +} +function Cons.rev { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL xcdr_2 + LOCAL xcar_3 + + xcdr_2 = GetAttr self xcdr + result_1 = VCALL List rev + xcar_3 = GetAttr self xcar + result_0 = VCALL List rcons + + RETURN result_0 +} +function Cons.sort { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL xcdr_2 + LOCAL xcar_3 + + xcdr_2 = GetAttr self xcdr + result_1 = VCALL List sort + xcar_3 = GetAttr self xcar + result_0 = VCALL List insert + + RETURN result_0 +} +function Cons.insert { + PARAM self + PARAM i + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL xcar_5 + LOCAL result_init_6 + LOCAL result_7 + LOCAL result_8 + LOCAL init_9 + LOCAL result_10 + LOCAL xcdr_11 + LOCAL xcar_12 + LOCAL result_13 + LOCAL result_14 + LOCAL init_15 + + xcar_5 = GetAttr self xcar + left_3 = GetAttr i value + right_4 = GetAttr xcar_5 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_6 = CALL Bool_init + IF result_1 GOTO label_1 + result_8 = ALLOCATE Cons + init_9 = CALL Cons_init + xcdr_11 = GetAttr self xcdr + result_10 = VCALL List insert + xcar_12 = GetAttr self xcar + result_7 = VCALL Cons init + result_0 = result_7 + GOTO label_2 + LABEL label_1 + result_14 = ALLOCATE Cons + init_15 = CALL Cons_init + result_13 = VCALL Cons init + result_0 = result_13 + LABEL label_2 + + RETURN result_0 +} +function Cons.rcons { + PARAM self + PARAM i + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL result_3 + LOCAL xcdr_4 + LOCAL xcar_5 + + result_1 = ALLOCATE Cons + init_2 = CALL Cons_init + xcdr_4 = GetAttr self xcdr + result_3 = VCALL List rcons + xcar_5 = GetAttr self xcar + result_0 = VCALL Cons init + + RETURN result_0 +} +function Cons.print_list { + PARAM self + + LOCAL result_0 + LOCAL xcar_1 + LOCAL result_2 + LOCAL internal_3 + LOCAL instance_4 + LOCAL result_init_5 + LOCAL result_6 + LOCAL xcdr_7 + + xcar_1 = GetAttr self xcar + result_0 = VCALL Cons out_int + internal_3 = LOAD s_3 + instance_4 = ALLOCATE String + result_init_5 = CALL String_init + result_2 = VCALL Cons out_string + xcdr_7 = GetAttr self xcdr + result_6 = VCALL List print_list + + RETURN result_6 +} +function Nil_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL List_init + + RETURN +} +function Nil.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function Nil.rev { + PARAM self + + + + + RETURN self +} +function Nil.sort { + PARAM self + + + + + RETURN self +} +function Nil.insert { + PARAM self + PARAM i + + LOCAL result_0 + + result_0 = VCALL Nil rcons + + RETURN result_0 +} +function Nil.rcons { + PARAM self + PARAM i + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_1 = ALLOCATE Cons + init_2 = CALL Cons_init + result_0 = VCALL Cons init + + RETURN result_0 +} +function Nil.print_list { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN + SetAttr self l None +} +function Main.iota { + PARAM self + PARAM i + + LOCAL result_0 + LOCAL init_1 + LOCAL result_2 + LOCAL instance_3 + LOCAL value_4 + LOCAL result_init_5 + LOCAL j_6 + LOCAL result_7 + LOCAL result_8 + LOCAL op_9 + LOCAL left_10 + LOCAL right_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL result_14 + LOCAL init_15 + LOCAL l_16 + LOCAL result_17 + LOCAL result_18 + LOCAL op_19 + LOCAL left_20 + LOCAL right_21 + LOCAL instance_22 + LOCAL value_23 + LOCAL result_init_24 + LOCAL result_init_25 + LOCAL result_26 + LOCAL let_result_27 + LOCAL l_28 + + result_0 = ALLOCATE Nil + init_1 = CALL Nil_init + SetAttr self l result_0 + instance_3 = ALLOCATE Int + value_4 = LOAD 0 + result_init_5 = CALL Int_init + j_6 = instance_3 + LABEL label_3 + left_10 = GetAttr j_6 value + right_11 = GetAttr i value + op_9 = left_10 < right_11 + result_8 = ALLOCATE Bool + result_init_12 = CALL Bool_init + IF result_8 GOTO label_4 + GOTO label_5 + LABEL label_4 + result_14 = ALLOCATE Cons + init_15 = CALL Cons_init + l_16 = GetAttr self l + result_13 = VCALL Cons init + SetAttr self l result_13 + instance_22 = ALLOCATE Int + value_23 = LOAD 1 + result_init_24 = CALL Int_init + left_20 = GetAttr j_6 value + right_21 = GetAttr instance_22 value + op_19 = left_20 + right_21 + result_18 = ALLOCATE Int + result_init_25 = CALL Int_init + j_6 = result_18 + GOTO label_3 + LABEL label_5 + result_7 = LOAD None + let_result_27 = result_7 + l_28 = GetAttr self l + + RETURN l_28 +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + LOCAL result_4 + LOCAL result_5 + LOCAL result_6 + LOCAL result_7 + LOCAL result_8 + + internal_1 = LOAD s_4 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL Main out_string + result_8 = VCALL Main in_int + result_7 = VCALL Main iota + result_6 = VCALL List rev + result_5 = VCALL List sort + result_4 = VCALL List print_list + + RETURN result_4 +} \ No newline at end of file diff --git a/tests/codegen/test.py b/tests/codegen/test.py index 958bc4c5..7176cd9a 100644 --- a/tests/codegen/test.py +++ b/tests/codegen/test.py @@ -1,11 +1,12 @@ -f1 = open('hello_world_test.mips', 'r') +f1 = open('io_test.mips', 'r') lines_1 = f1.readlines() -f2 = open('hello_world.mips', 'r') +f2 = open('io.mips', 'r') lines_2 = f2.readlines() - +print(len(lines_1)) +print(len(lines_2)) for i in range(0, len(lines_1)): if lines_1[i] != lines_2[i]: print('line: ',i) print('f1: ', lines_1[i]) - print('f2: ', lines_2[i]) \ No newline at end of file + print('f2: ', lines_2[i]) From f74be86a0340b7956fadda175d26771750211a98 Mon Sep 17 00:00:00 2001 From: hros18 Date: Sun, 13 Dec 2020 19:02:29 -0500 Subject: [PATCH 126/140] fixxing LoadNodeIL --- src/visitors/to_mips.py | 15 ++-- src/visitors/transpilator.py | 2 +- tests/codegen/arith.mips | 80 ++++++++++---------- tests/codegen/atoi.mips | 62 ++++++++-------- tests/codegen/cells.mips | 24 +++--- tests/codegen/complex.mips | 4 +- tests/codegen/fib.mips | 4 +- tests/codegen/graph.mips | 46 ++++++------ tests/codegen/life.mips | 132 ++++++++++++++++----------------- tests/codegen/list.mips | 10 +-- tests/codegen/new_complex.mips | 4 +- tests/codegen/palindrome.mips | 14 ++-- tests/codegen/primes.mips | 10 +-- tests/codegen/print-cool.mips | 8 +- tests/codegen/sort-list.mips | 2 +- 15 files changed, 209 insertions(+), 208 deletions(-) diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index cf6a4933..913b11f1 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -468,13 +468,14 @@ def visit(self, node): self.count += 1 print('LoadNodeIL') if node.msg: - self.text += f'la $t0, {node.msg}\n' - offset = self.var_offset[self.current_function.name][node.dest] - self.text += f'sw $t0, {offset}($sp)\n' - # else: - # self.text += f'li $t0, {node.msg}\n' - # offset = self.var_offset[self.current_function.name][node.dest] - # self.text += f'sw $t0, {offset}($sp)\n' + if isinstance(node.msg, str): + self.text += f'la $t0, {node.msg}\n' + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t0, {offset}($sp)\n' + else: + self.text += f'li $t0, {node.msg}\n' + offset = self.var_offset[self.current_function.name][node.dest] + self.text += f'sw $t0, {offset}($sp)\n' # @visitor.when(CIL_AST.LoadInt) # def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 1bece99e..387f5adb 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -668,7 +668,7 @@ def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope = scope, name = "result") case_expr = self.visit(node.expr, scope, sscope) - nscope = sscope.expr_dict[node] + nscope = sscope.exprs_dict[node] exit_label = self.get_label() label = self.get_label() diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index a4818c11..249b5440 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -1178,7 +1178,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 1 +li $t0, 1 sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) @@ -1205,7 +1205,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) -la $t0, 1 +li $t0, 1 sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) @@ -1306,7 +1306,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 100($sp) -la $t0, 1 +li $t0, 1 sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) @@ -1848,7 +1848,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 100($sp) -la $t0, 1 +li $t0, 1 sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) @@ -1909,7 +1909,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 136($sp) -la $t0, 2 +li $t0, 2 sw $t0, 140($sp) move $t0, $sp lw $t1, 140($t0) @@ -1970,7 +1970,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 172($sp) -la $t0, 3 +li $t0, 3 sw $t0, 176($sp) move $t0, $sp lw $t1, 176($t0) @@ -2208,7 +2208,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 8 +li $t0, 8 sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) @@ -2965,7 +2965,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 380($sp) -la $t0, 9 +li $t0, 9 sw $t0, 384($sp) move $t0, $sp lw $t1, 384($t0) @@ -2997,7 +2997,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 392($sp) -la $t0, 8 +li $t0, 8 sw $t0, 396($sp) move $t0, $sp lw $t1, 396($t0) @@ -3029,7 +3029,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 404($sp) -la $t0, 7 +li $t0, 7 sw $t0, 408($sp) move $t0, $sp lw $t1, 408($t0) @@ -3061,7 +3061,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 416($sp) -la $t0, 6 +li $t0, 6 sw $t0, 420($sp) move $t0, $sp lw $t1, 420($t0) @@ -3093,7 +3093,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 428($sp) -la $t0, 5 +li $t0, 5 sw $t0, 432($sp) move $t0, $sp lw $t1, 432($t0) @@ -3125,7 +3125,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 440($sp) -la $t0, 4 +li $t0, 4 sw $t0, 444($sp) move $t0, $sp lw $t1, 444($t0) @@ -3157,7 +3157,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 452($sp) -la $t0, 3 +li $t0, 3 sw $t0, 456($sp) move $t0, $sp lw $t1, 456($t0) @@ -3189,7 +3189,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 464($sp) -la $t0, 2 +li $t0, 2 sw $t0, 468($sp) move $t0, $sp lw $t1, 468($t0) @@ -3221,7 +3221,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 476($sp) -la $t0, 1 +li $t0, 1 sw $t0, 480($sp) move $t0, $sp lw $t1, 480($t0) @@ -3346,7 +3346,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 60($sp) -la $t0, 1 +li $t0, 1 sw $t0, 64($sp) move $t0, $sp lw $t1, 64($t0) @@ -3407,7 +3407,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 96($sp) -la $t0, 2 +li $t0, 2 sw $t0, 100($sp) move $t0, $sp lw $t1, 100($t0) @@ -3468,7 +3468,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 132($sp) -la $t0, 3 +li $t0, 3 sw $t0, 136($sp) move $t0, $sp lw $t1, 136($t0) @@ -3529,7 +3529,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 168($sp) -la $t0, 4 +li $t0, 4 sw $t0, 172($sp) move $t0, $sp lw $t1, 172($t0) @@ -3590,7 +3590,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 204($sp) -la $t0, 5 +li $t0, 5 sw $t0, 208($sp) move $t0, $sp lw $t1, 208($t0) @@ -3651,7 +3651,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 240($sp) -la $t0, 6 +li $t0, 6 sw $t0, 244($sp) move $t0, $sp lw $t1, 244($t0) @@ -3712,7 +3712,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 276($sp) -la $t0, 7 +li $t0, 7 sw $t0, 280($sp) move $t0, $sp lw $t1, 280($t0) @@ -3773,7 +3773,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 312($sp) -la $t0, 8 +li $t0, 8 sw $t0, 316($sp) move $t0, $sp lw $t1, 316($t0) @@ -3834,7 +3834,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 348($sp) -la $t0, 9 +li $t0, 9 sw $t0, 352($sp) move $t0, $sp lw $t1, 352($t0) @@ -4329,7 +4329,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 68($sp) -la $t0, 1 +li $t0, 1 sw $t0, 72($sp) move $t0, $sp lw $t1, 72($t0) @@ -4455,7 +4455,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 132($sp) -la $t0, 1 +li $t0, 1 sw $t0, 136($sp) move $t0, $sp lw $t1, 136($t0) @@ -4610,7 +4610,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 204($sp) -la $t0, 1 +li $t0, 1 sw $t0, 208($sp) move $t0, $sp lw $t1, 208($t0) @@ -4668,7 +4668,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 220($sp) -la $t0, 1 +li $t0, 1 sw $t0, 224($sp) move $t0, $sp lw $t1, 224($t0) @@ -4742,7 +4742,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 272($sp) -la $t0, 1 +li $t0, 1 sw $t0, 276($sp) move $t0, $sp lw $t1, 276($t0) @@ -4800,7 +4800,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 288($sp) -la $t0, 1 +li $t0, 1 sw $t0, 292($sp) move $t0, $sp lw $t1, 292($t0) @@ -5028,7 +5028,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 100($sp) -la $t0, 10 +li $t0, 10 sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) @@ -5086,7 +5086,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 124($sp) -la $t0, 1 +li $t0, 1 sw $t0, 128($sp) move $t0, $sp lw $t1, 128($t0) @@ -5177,7 +5177,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 160($sp) -la $t0, 1 +li $t0, 1 sw $t0, 164($sp) move $t0, $sp lw $t1, 164($t0) @@ -5396,7 +5396,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 124($sp) -la $t0, 1 +li $t0, 1 sw $t0, 128($sp) move $t0, $sp lw $t1, 128($t0) @@ -5628,7 +5628,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 56($sp) -la $t0, 10 +li $t0, 10 sw $t0, 60($sp) move $t0, $sp lw $t1, 60($t0) @@ -5703,7 +5703,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 120($sp) -la $t0, 10 +li $t0, 10 sw $t0, 124($sp) move $t0, $sp lw $t1, 124($t0) @@ -7073,7 +7073,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 100($sp) -la $t0, 1 +li $t0, 1 sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) @@ -7134,7 +7134,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 136($sp) -la $t0, 2 +li $t0, 2 sw $t0, 140($sp) move $t0, $sp lw $t1, 140($t0) @@ -8794,7 +8794,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 636($sp) -la $t0, 8 +li $t0, 8 sw $t0, 640($sp) move $t0, $sp lw $t1, 640($t0) diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index d52387e1..88ca5e4e 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -1294,7 +1294,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 380($sp) -la $t0, 9 +li $t0, 9 sw $t0, 384($sp) move $t0, $sp lw $t1, 384($t0) @@ -1326,7 +1326,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 392($sp) -la $t0, 8 +li $t0, 8 sw $t0, 396($sp) move $t0, $sp lw $t1, 396($t0) @@ -1358,7 +1358,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 404($sp) -la $t0, 7 +li $t0, 7 sw $t0, 408($sp) move $t0, $sp lw $t1, 408($t0) @@ -1390,7 +1390,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 416($sp) -la $t0, 6 +li $t0, 6 sw $t0, 420($sp) move $t0, $sp lw $t1, 420($t0) @@ -1422,7 +1422,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 428($sp) -la $t0, 5 +li $t0, 5 sw $t0, 432($sp) move $t0, $sp lw $t1, 432($t0) @@ -1454,7 +1454,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 440($sp) -la $t0, 4 +li $t0, 4 sw $t0, 444($sp) move $t0, $sp lw $t1, 444($t0) @@ -1486,7 +1486,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 452($sp) -la $t0, 3 +li $t0, 3 sw $t0, 456($sp) move $t0, $sp lw $t1, 456($t0) @@ -1518,7 +1518,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 464($sp) -la $t0, 2 +li $t0, 2 sw $t0, 468($sp) move $t0, $sp lw $t1, 468($t0) @@ -1550,7 +1550,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 476($sp) -la $t0, 1 +li $t0, 1 sw $t0, 480($sp) move $t0, $sp lw $t1, 480($t0) @@ -1675,7 +1675,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 60($sp) -la $t0, 1 +li $t0, 1 sw $t0, 64($sp) move $t0, $sp lw $t1, 64($t0) @@ -1736,7 +1736,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 96($sp) -la $t0, 2 +li $t0, 2 sw $t0, 100($sp) move $t0, $sp lw $t1, 100($t0) @@ -1797,7 +1797,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 132($sp) -la $t0, 3 +li $t0, 3 sw $t0, 136($sp) move $t0, $sp lw $t1, 136($t0) @@ -1858,7 +1858,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 168($sp) -la $t0, 4 +li $t0, 4 sw $t0, 172($sp) move $t0, $sp lw $t1, 172($t0) @@ -1919,7 +1919,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 204($sp) -la $t0, 5 +li $t0, 5 sw $t0, 208($sp) move $t0, $sp lw $t1, 208($t0) @@ -1980,7 +1980,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 240($sp) -la $t0, 6 +li $t0, 6 sw $t0, 244($sp) move $t0, $sp lw $t1, 244($t0) @@ -2041,7 +2041,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 276($sp) -la $t0, 7 +li $t0, 7 sw $t0, 280($sp) move $t0, $sp lw $t1, 280($t0) @@ -2102,7 +2102,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 312($sp) -la $t0, 8 +li $t0, 8 sw $t0, 316($sp) move $t0, $sp lw $t1, 316($t0) @@ -2163,7 +2163,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 348($sp) -la $t0, 9 +li $t0, 9 sw $t0, 352($sp) move $t0, $sp lw $t1, 352($t0) @@ -2658,7 +2658,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 68($sp) -la $t0, 1 +li $t0, 1 sw $t0, 72($sp) move $t0, $sp lw $t1, 72($t0) @@ -2784,7 +2784,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 132($sp) -la $t0, 1 +li $t0, 1 sw $t0, 136($sp) move $t0, $sp lw $t1, 136($t0) @@ -2939,7 +2939,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 204($sp) -la $t0, 1 +li $t0, 1 sw $t0, 208($sp) move $t0, $sp lw $t1, 208($t0) @@ -2997,7 +2997,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 220($sp) -la $t0, 1 +li $t0, 1 sw $t0, 224($sp) move $t0, $sp lw $t1, 224($t0) @@ -3071,7 +3071,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 272($sp) -la $t0, 1 +li $t0, 1 sw $t0, 276($sp) move $t0, $sp lw $t1, 276($t0) @@ -3129,7 +3129,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 288($sp) -la $t0, 1 +li $t0, 1 sw $t0, 292($sp) move $t0, $sp lw $t1, 292($t0) @@ -3357,7 +3357,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 100($sp) -la $t0, 10 +li $t0, 10 sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) @@ -3415,7 +3415,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 124($sp) -la $t0, 1 +li $t0, 1 sw $t0, 128($sp) move $t0, $sp lw $t1, 128($t0) @@ -3506,7 +3506,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 160($sp) -la $t0, 1 +li $t0, 1 sw $t0, 164($sp) move $t0, $sp lw $t1, 164($t0) @@ -3725,7 +3725,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 124($sp) -la $t0, 1 +li $t0, 1 sw $t0, 128($sp) move $t0, $sp lw $t1, 128($t0) @@ -3957,7 +3957,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 56($sp) -la $t0, 10 +li $t0, 10 sw $t0, 60($sp) move $t0, $sp lw $t1, 60($t0) @@ -4032,7 +4032,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 120($sp) -la $t0, 10 +li $t0, 10 sw $t0, 124($sp) move $t0, $sp lw $t1, 124($t0) @@ -4288,7 +4288,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 44($sp) -la $t0, 678987 +li $t0, 678987 sw $t0, 48($sp) move $t0, $sp lw $t1, 48($t0) diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 80317cb3..75fb05fd 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -775,7 +775,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 12($sp) -la $t0, 1 +li $t0, 1 sw $t0, 16($sp) move $t0, $sp lw $t1, 16($t0) @@ -884,7 +884,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 60($sp) -la $t0, 1 +li $t0, 1 sw $t0, 64($sp) move $t0, $sp lw $t1, 64($t0) @@ -971,7 +971,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 100($sp) -la $t0, 1 +li $t0, 1 sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) @@ -1065,7 +1065,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 44($sp) -la $t0, 1 +li $t0, 1 sw $t0, 48($sp) move $t0, $sp lw $t1, 48($t0) @@ -1159,7 +1159,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 84($sp) -la $t0, 1 +li $t0, 1 sw $t0, 88($sp) move $t0, $sp lw $t1, 88($t0) @@ -1385,7 +1385,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 108($sp) -la $t0, 1 +li $t0, 1 sw $t0, 112($sp) move $t0, $sp lw $t1, 112($t0) @@ -1515,7 +1515,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 172($sp) -la $t0, 1 +li $t0, 1 sw $t0, 176($sp) move $t0, $sp lw $t1, 176($t0) @@ -1678,7 +1678,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 240($sp) -la $t0, 1 +li $t0, 1 sw $t0, 244($sp) move $t0, $sp lw $t1, 244($t0) @@ -1739,7 +1739,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 256($sp) -la $t0, 1 +li $t0, 1 sw $t0, 260($sp) move $t0, $sp lw $t1, 260($t0) @@ -1951,7 +1951,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 72($sp) -la $t0, 1 +li $t0, 1 sw $t0, 76($sp) move $t0, $sp lw $t1, 76($t0) @@ -2123,7 +2123,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 40($sp) -la $t0, 20 +li $t0, 20 sw $t0, 44($sp) move $t0, $sp lw $t1, 44($t0) @@ -2240,7 +2240,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 124($sp) -la $t0, 1 +li $t0, 1 sw $t0, 128($sp) move $t0, $sp lw $t1, 128($t0) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index e40ae778..44921557 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -668,7 +668,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 16($sp) -la $t0, 1 +li $t0, 1 sw $t0, 20($sp) move $t0, $sp lw $t1, 20($t0) @@ -693,7 +693,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 1 +li $t0, 1 sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index deacccf2..0da6deab 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -758,7 +758,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) -la $t0, 1 +li $t0, 1 sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) @@ -961,7 +961,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 144($sp) -la $t0, 1 +li $t0, 1 sw $t0, 148($sp) move $t0, $sp lw $t1, 148($t0) diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index a9e671d7..c1d2531e 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -3308,7 +3308,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 380($sp) -la $t0, 9 +li $t0, 9 sw $t0, 384($sp) move $t0, $sp lw $t1, 384($t0) @@ -3340,7 +3340,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 392($sp) -la $t0, 8 +li $t0, 8 sw $t0, 396($sp) move $t0, $sp lw $t1, 396($t0) @@ -3372,7 +3372,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 404($sp) -la $t0, 7 +li $t0, 7 sw $t0, 408($sp) move $t0, $sp lw $t1, 408($t0) @@ -3404,7 +3404,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 416($sp) -la $t0, 6 +li $t0, 6 sw $t0, 420($sp) move $t0, $sp lw $t1, 420($t0) @@ -3436,7 +3436,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 428($sp) -la $t0, 5 +li $t0, 5 sw $t0, 432($sp) move $t0, $sp lw $t1, 432($t0) @@ -3468,7 +3468,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 440($sp) -la $t0, 4 +li $t0, 4 sw $t0, 444($sp) move $t0, $sp lw $t1, 444($t0) @@ -3500,7 +3500,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 452($sp) -la $t0, 3 +li $t0, 3 sw $t0, 456($sp) move $t0, $sp lw $t1, 456($t0) @@ -3532,7 +3532,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 464($sp) -la $t0, 2 +li $t0, 2 sw $t0, 468($sp) move $t0, $sp lw $t1, 468($t0) @@ -3564,7 +3564,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 476($sp) -la $t0, 1 +li $t0, 1 sw $t0, 480($sp) move $t0, $sp lw $t1, 480($t0) @@ -3700,7 +3700,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 68($sp) -la $t0, 1 +li $t0, 1 sw $t0, 72($sp) move $t0, $sp lw $t1, 72($t0) @@ -3826,7 +3826,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 132($sp) -la $t0, 1 +li $t0, 1 sw $t0, 136($sp) move $t0, $sp lw $t1, 136($t0) @@ -3981,7 +3981,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 204($sp) -la $t0, 1 +li $t0, 1 sw $t0, 208($sp) move $t0, $sp lw $t1, 208($t0) @@ -4039,7 +4039,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 220($sp) -la $t0, 1 +li $t0, 1 sw $t0, 224($sp) move $t0, $sp lw $t1, 224($t0) @@ -4113,7 +4113,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 272($sp) -la $t0, 1 +li $t0, 1 sw $t0, 276($sp) move $t0, $sp lw $t1, 276($t0) @@ -4171,7 +4171,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 288($sp) -la $t0, 1 +li $t0, 1 sw $t0, 292($sp) move $t0, $sp lw $t1, 292($t0) @@ -4399,7 +4399,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 72($sp) -la $t0, 1 +li $t0, 1 sw $t0, 76($sp) move $t0, $sp lw $t1, 76($t0) @@ -4563,7 +4563,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 192($sp) -la $t0, 10 +li $t0, 10 sw $t0, 196($sp) move $t0, $sp lw $t1, 196($t0) @@ -4621,7 +4621,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 216($sp) -la $t0, 1 +li $t0, 1 sw $t0, 220($sp) move $t0, $sp lw $t1, 220($t0) @@ -4712,7 +4712,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 252($sp) -la $t0, 1 +li $t0, 1 sw $t0, 256($sp) move $t0, $sp lw $t1, 256($t0) @@ -4916,7 +4916,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 368($sp) -la $t0, 1 +li $t0, 1 sw $t0, 372($sp) move $t0, $sp lw $t1, 372($t0) @@ -4974,7 +4974,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 400($sp) -la $t0, 1 +li $t0, 1 sw $t0, 404($sp) move $t0, $sp lw $t1, 404($t0) @@ -5105,7 +5105,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 468($sp) -la $t0, 1 +li $t0, 1 sw $t0, 472($sp) move $t0, $sp lw $t1, 472($t0) @@ -5163,7 +5163,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 500($sp) -la $t0, 1 +li $t0, 1 sw $t0, 504($sp) move $t0, $sp lw $t1, 504($t0) diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 831daeed..64058c55 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -861,7 +861,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 32($sp) -la $t0, 15 +li $t0, 15 sw $t0, 36($sp) move $t0, $sp lw $t1, 36($t0) @@ -922,7 +922,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 68($sp) -la $t0, 16 +li $t0, 16 sw $t0, 72($sp) move $t0, $sp lw $t1, 72($t0) @@ -983,7 +983,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 104($sp) -la $t0, 20 +li $t0, 20 sw $t0, 108($sp) move $t0, $sp lw $t1, 108($t0) @@ -1044,7 +1044,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 140($sp) -la $t0, 21 +li $t0, 21 sw $t0, 144($sp) move $t0, $sp lw $t1, 144($t0) @@ -1105,7 +1105,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 176($sp) -la $t0, 25 +li $t0, 25 sw $t0, 180($sp) move $t0, $sp lw $t1, 180($t0) @@ -1166,7 +1166,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 212($sp) -la $t0, 28 +li $t0, 28 sw $t0, 216($sp) move $t0, $sp lw $t1, 216($t0) @@ -1227,7 +1227,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 228($sp) -la $t0, 5 +li $t0, 5 sw $t0, 232($sp) move $t0, $sp lw $t1, 232($t0) @@ -1255,7 +1255,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 244($sp) -la $t0, 5 +li $t0, 5 sw $t0, 248($sp) move $t0, $sp lw $t1, 248($t0) @@ -1290,7 +1290,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 264($sp) -la $t0, 7 +li $t0, 7 sw $t0, 268($sp) move $t0, $sp lw $t1, 268($t0) @@ -1318,7 +1318,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 280($sp) -la $t0, 4 +li $t0, 4 sw $t0, 284($sp) move $t0, $sp lw $t1, 284($t0) @@ -1356,7 +1356,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 300($sp) -la $t0, 5 +li $t0, 5 sw $t0, 304($sp) move $t0, $sp lw $t1, 304($t0) @@ -1384,7 +1384,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 316($sp) -la $t0, 5 +li $t0, 5 sw $t0, 320($sp) move $t0, $sp lw $t1, 320($t0) @@ -1422,7 +1422,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 336($sp) -la $t0, 3 +li $t0, 3 sw $t0, 340($sp) move $t0, $sp lw $t1, 340($t0) @@ -1450,7 +1450,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 352($sp) -la $t0, 7 +li $t0, 7 sw $t0, 356($sp) move $t0, $sp lw $t1, 356($t0) @@ -1488,7 +1488,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 372($sp) -la $t0, 4 +li $t0, 4 sw $t0, 376($sp) move $t0, $sp lw $t1, 376($t0) @@ -1516,7 +1516,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 388($sp) -la $t0, 5 +li $t0, 5 sw $t0, 392($sp) move $t0, $sp lw $t1, 392($t0) @@ -1554,7 +1554,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 408($sp) -la $t0, 4 +li $t0, 4 sw $t0, 412($sp) move $t0, $sp lw $t1, 412($t0) @@ -1582,7 +1582,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 424($sp) -la $t0, 4 +li $t0, 4 sw $t0, 428($sp) move $t0, $sp lw $t1, 428($t0) @@ -1620,7 +1620,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 444($sp) -la $t0, 3 +li $t0, 3 sw $t0, 448($sp) move $t0, $sp lw $t1, 448($t0) @@ -1648,7 +1648,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 460($sp) -la $t0, 5 +li $t0, 5 sw $t0, 464($sp) move $t0, $sp lw $t1, 464($t0) @@ -2059,7 +2059,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 44($sp) -la $t0, 1 +li $t0, 1 sw $t0, 48($sp) move $t0, $sp lw $t1, 48($t0) @@ -2156,7 +2156,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 72($sp) -la $t0, 1 +li $t0, 1 sw $t0, 76($sp) move $t0, $sp lw $t1, 76($t0) @@ -2588,7 +2588,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 72($sp) -la $t0, 1 +li $t0, 1 sw $t0, 76($sp) move $t0, $sp lw $t1, 76($t0) @@ -2719,7 +2719,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 120($sp) -la $t0, 1 +li $t0, 1 sw $t0, 124($sp) move $t0, $sp lw $t1, 124($t0) @@ -2813,7 +2813,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 160($sp) -la $t0, 1 +li $t0, 1 sw $t0, 164($sp) move $t0, $sp lw $t1, 164($t0) @@ -3093,7 +3093,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 132($sp) -la $t0, 1 +li $t0, 1 sw $t0, 136($sp) move $t0, $sp lw $t1, 136($t0) @@ -3441,7 +3441,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 156($sp) -la $t0, 1 +li $t0, 1 sw $t0, 160($sp) move $t0, $sp lw $t1, 160($t0) @@ -3680,7 +3680,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 132($sp) -la $t0, 1 +li $t0, 1 sw $t0, 136($sp) move $t0, $sp lw $t1, 136($t0) @@ -3811,7 +3811,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 180($sp) -la $t0, 1 +li $t0, 1 sw $t0, 184($sp) move $t0, $sp lw $t1, 184($t0) @@ -3905,7 +3905,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 220($sp) -la $t0, 1 +li $t0, 1 sw $t0, 224($sp) move $t0, $sp lw $t1, 224($t0) @@ -4124,7 +4124,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 124($sp) -la $t0, 1 +li $t0, 1 sw $t0, 128($sp) move $t0, $sp lw $t1, 128($t0) @@ -4255,7 +4255,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 172($sp) -la $t0, 1 +li $t0, 1 sw $t0, 176($sp) move $t0, $sp lw $t1, 176($t0) @@ -4349,7 +4349,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 212($sp) -la $t0, 1 +li $t0, 1 sw $t0, 216($sp) move $t0, $sp lw $t1, 216($t0) @@ -4677,7 +4677,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 148($sp) -la $t0, 1 +li $t0, 1 sw $t0, 152($sp) move $t0, $sp lw $t1, 152($t0) @@ -4923,7 +4923,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 168($sp) -la $t0, 1 +li $t0, 1 sw $t0, 172($sp) move $t0, $sp lw $t1, 172($t0) @@ -5053,7 +5053,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 232($sp) -la $t0, 1 +li $t0, 1 sw $t0, 236($sp) move $t0, $sp lw $t1, 236($t0) @@ -5216,7 +5216,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 300($sp) -la $t0, 1 +li $t0, 1 sw $t0, 304($sp) move $t0, $sp lw $t1, 304($t0) @@ -5379,7 +5379,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 368($sp) -la $t0, 1 +li $t0, 1 sw $t0, 372($sp) move $t0, $sp lw $t1, 372($t0) @@ -5542,7 +5542,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 436($sp) -la $t0, 1 +li $t0, 1 sw $t0, 440($sp) move $t0, $sp lw $t1, 440($t0) @@ -5705,7 +5705,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 504($sp) -la $t0, 1 +li $t0, 1 sw $t0, 508($sp) move $t0, $sp lw $t1, 508($t0) @@ -5868,7 +5868,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 572($sp) -la $t0, 1 +li $t0, 1 sw $t0, 576($sp) move $t0, $sp lw $t1, 576($t0) @@ -6031,7 +6031,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 640($sp) -la $t0, 1 +li $t0, 1 sw $t0, 644($sp) move $t0, $sp lw $t1, 644($t0) @@ -6114,7 +6114,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 3 +li $t0, 3 sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) @@ -6189,7 +6189,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 68($sp) -la $t0, 2 +li $t0, 2 sw $t0, 72($sp) move $t0, $sp lw $t1, 72($t0) @@ -6563,7 +6563,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 84($sp) -la $t0, 1 +li $t0, 1 sw $t0, 88($sp) move $t0, $sp lw $t1, 88($t0) @@ -7593,7 +7593,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 420($sp) -la $t0, 1 +li $t0, 1 sw $t0, 424($sp) move $t0, $sp lw $t1, 424($t0) @@ -7654,7 +7654,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 456($sp) -la $t0, 2 +li $t0, 2 sw $t0, 460($sp) move $t0, $sp lw $t1, 460($t0) @@ -7715,7 +7715,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 492($sp) -la $t0, 3 +li $t0, 3 sw $t0, 496($sp) move $t0, $sp lw $t1, 496($t0) @@ -7776,7 +7776,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 528($sp) -la $t0, 4 +li $t0, 4 sw $t0, 532($sp) move $t0, $sp lw $t1, 532($t0) @@ -7837,7 +7837,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 564($sp) -la $t0, 5 +li $t0, 5 sw $t0, 568($sp) move $t0, $sp lw $t1, 568($t0) @@ -7898,7 +7898,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 600($sp) -la $t0, 6 +li $t0, 6 sw $t0, 604($sp) move $t0, $sp lw $t1, 604($t0) @@ -7959,7 +7959,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 636($sp) -la $t0, 7 +li $t0, 7 sw $t0, 640($sp) move $t0, $sp lw $t1, 640($t0) @@ -8020,7 +8020,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 672($sp) -la $t0, 8 +li $t0, 8 sw $t0, 676($sp) move $t0, $sp lw $t1, 676($t0) @@ -8081,7 +8081,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 708($sp) -la $t0, 9 +li $t0, 9 sw $t0, 712($sp) move $t0, $sp lw $t1, 712($t0) @@ -8142,7 +8142,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 744($sp) -la $t0, 10 +li $t0, 10 sw $t0, 748($sp) move $t0, $sp lw $t1, 748($t0) @@ -8203,7 +8203,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 780($sp) -la $t0, 11 +li $t0, 11 sw $t0, 784($sp) move $t0, $sp lw $t1, 784($t0) @@ -8264,7 +8264,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 816($sp) -la $t0, 12 +li $t0, 12 sw $t0, 820($sp) move $t0, $sp lw $t1, 820($t0) @@ -8325,7 +8325,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 852($sp) -la $t0, 13 +li $t0, 13 sw $t0, 856($sp) move $t0, $sp lw $t1, 856($t0) @@ -8386,7 +8386,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 888($sp) -la $t0, 14 +li $t0, 14 sw $t0, 892($sp) move $t0, $sp lw $t1, 892($t0) @@ -8447,7 +8447,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 924($sp) -la $t0, 15 +li $t0, 15 sw $t0, 928($sp) move $t0, $sp lw $t1, 928($t0) @@ -8508,7 +8508,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 960($sp) -la $t0, 16 +li $t0, 16 sw $t0, 964($sp) move $t0, $sp lw $t1, 964($t0) @@ -8569,7 +8569,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 996($sp) -la $t0, 17 +li $t0, 17 sw $t0, 1000($sp) move $t0, $sp lw $t1, 1000($t0) @@ -8630,7 +8630,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 1032($sp) -la $t0, 18 +li $t0, 18 sw $t0, 1036($sp) move $t0, $sp lw $t1, 1036($t0) @@ -8691,7 +8691,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 1068($sp) -la $t0, 19 +li $t0, 19 sw $t0, 1072($sp) move $t0, $sp lw $t1, 1072($t0) @@ -8752,7 +8752,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 1104($sp) -la $t0, 20 +li $t0, 20 sw $t0, 1108($sp) move $t0, $sp lw $t1, 1108($t0) @@ -8813,7 +8813,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 1140($sp) -la $t0, 21 +li $t0, 21 sw $t0, 1144($sp) move $t0, $sp lw $t1, 1144($t0) diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 11213717..33163db5 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -1093,7 +1093,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 32($sp) -la $t0, 1 +li $t0, 1 sw $t0, 36($sp) move $t0, $sp lw $t1, 36($t0) @@ -1132,7 +1132,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 44($sp) -la $t0, 2 +li $t0, 2 sw $t0, 48($sp) move $t0, $sp lw $t1, 48($t0) @@ -1171,7 +1171,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 56($sp) -la $t0, 3 +li $t0, 3 sw $t0, 60($sp) move $t0, $sp lw $t1, 60($t0) @@ -1210,7 +1210,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 68($sp) -la $t0, 4 +li $t0, 4 sw $t0, 72($sp) move $t0, $sp lw $t1, 72($t0) @@ -1249,7 +1249,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 80($sp) -la $t0, 5 +li $t0, 5 sw $t0, 84($sp) move $t0, $sp lw $t1, 84($t0) diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index fbeaa4df..0eedc34c 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -671,7 +671,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 16($sp) -la $t0, 1 +li $t0, 1 sw $t0, 20($sp) move $t0, $sp lw $t1, 20($t0) @@ -696,7 +696,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 1 +li $t0, 1 sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 3d495a63..d75290a8 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -741,7 +741,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 68($sp) -la $t0, 1 +li $t0, 1 sw $t0, 72($sp) move $t0, $sp lw $t1, 72($t0) @@ -802,7 +802,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 108($sp) -la $t0, 1 +li $t0, 1 sw $t0, 112($sp) move $t0, $sp lw $t1, 112($t0) @@ -867,7 +867,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 136($sp) -la $t0, 1 +li $t0, 1 sw $t0, 140($sp) move $t0, $sp lw $t1, 140($t0) @@ -903,7 +903,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 168($sp) -la $t0, 1 +li $t0, 1 sw $t0, 172($sp) move $t0, $sp lw $t1, 172($t0) @@ -1052,7 +1052,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 228($sp) -la $t0, 2 +li $t0, 2 sw $t0, 232($sp) move $t0, $sp lw $t1, 232($t0) @@ -1110,7 +1110,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 244($sp) -la $t0, 1 +li $t0, 1 sw $t0, 248($sp) move $t0, $sp lw $t1, 248($t0) @@ -1237,7 +1237,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 16($sp) -la $t0, 1 +li $t0, 1 sw $t0, 20($sp) move $t0, $sp lw $t1, 20($t0) diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 2f7bc741..45895387 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -666,7 +666,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) -la $t0, 2 +li $t0, 2 sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) @@ -726,7 +726,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 52($sp) -la $t0, 500 +li $t0, 500 sw $t0, 56($sp) move $t0, $sp lw $t1, 56($t0) @@ -786,7 +786,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 100($sp) -la $t0, 1 +li $t0, 1 sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) @@ -847,7 +847,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 120($sp) -la $t0, 2 +li $t0, 2 sw $t0, 124($sp) move $t0, $sp lw $t1, 124($t0) @@ -1216,7 +1216,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 364($sp) -la $t0, 1 +li $t0, 1 sw $t0, 368($sp) move $t0, $sp lw $t1, 368($t0) diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 8109bd75..a2b2176e 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -662,7 +662,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) -la $t0, 1 +li $t0, 1 sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) @@ -687,7 +687,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 40($sp) -la $t0, 4 +li $t0, 4 sw $t0, 44($sp) move $t0, $sp lw $t1, 44($t0) @@ -781,7 +781,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 72($sp) -la $t0, 3 +li $t0, 3 sw $t0, 76($sp) move $t0, $sp lw $t1, 76($t0) @@ -806,7 +806,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 84($sp) -la $t0, 1 +li $t0, 1 sw $t0, 88($sp) move $t0, $sp lw $t1, 88($t0) diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 505cf1a6..f913c9d7 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -1737,7 +1737,7 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 92($sp) -la $t0, 1 +li $t0, 1 sw $t0, 96($sp) move $t0, $sp lw $t1, 96($t0) From eed666e4c4014100b6790e9aaa0a5050cc61aac2 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sun, 13 Dec 2020 19:29:44 -0500 Subject: [PATCH 127/140] solving scope expr_dict --- src/visitors/transpilator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 387f5adb..1bece99e 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -668,7 +668,7 @@ def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope = scope, name = "result") case_expr = self.visit(node.expr, scope, sscope) - nscope = sscope.exprs_dict[node] + nscope = sscope.expr_dict[node] exit_label = self.get_label() label = self.get_label() From df3e889604ca25096db3e106c84c6a75277ec415 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sun, 13 Dec 2020 19:36:22 -0500 Subject: [PATCH 128/140] solving ascope problems --- src/visitors/transpilator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 1bece99e..c4ea8a34 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -469,9 +469,9 @@ def visit(self, node, scope, sscope): @visitor.when(AttrDeclarationNode) def visit(self, node, scope, sscope): + ascope = sscope.attr_scopes[node.id] if not node.expr: - ascope = sscope.attr_scopes[node.id] instance = None # print('attr_type:::::::::: ', node.type) if node.type in ['Int', 'Bool']: @@ -492,7 +492,7 @@ def visit(self, node, scope, sscope): self.register_instruction(SetAttribNodeIL('self', node.id,instance, self.current_type.name)) else: print('attr_type::::IN_______EXPRRRRRR:::::: ', node.type) - expr = self.visit(node.expr, scope, sscope) + expr = self.visit(node.expr, scope, ascope) self.register_instruction(SetAttribNodeIL('self', node.id, expr, self.current_type.name)) @visitor.when(VarDeclarationNode) From 8005b56f8a1dcea45b22d3d9751455bda21cda95 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Sun, 13 Dec 2020 19:39:18 -0500 Subject: [PATCH 129/140] passing hairscary.cl --- tests/codegen/hairyscary.mips | 1708 +++++++++++++++++++++++++++++++++ 1 file changed, 1708 insertions(+) create mode 100644 tests/codegen/hairyscary.mips diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips new file mode 100644 index 00000000..1f0fab29 --- /dev/null +++ b/tests/codegen/hairyscary.mips @@ -0,0 +1,1708 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +Foo_name: .asciiz "Foo" +Foo_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Bazz.printh +.word Foo.doh +Bar_name: .asciiz "Bar" +Bar_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Bazz.printh +.word Foo.doh +Razz_name: .asciiz "Razz" +Razz_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Bazz.printh +.word Foo.doh +Bazz_name: .asciiz "Bazz" +Bazz_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Bazz.printh +.word Bazz.doh +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "do nothing" +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_arg1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_arg2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_arg1_char +concat_arg2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_arg2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_arg2_char +finish_arg2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +Foo_init: +addi $sp, $sp, -120 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bazz_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 124($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_2 +b case_void_error +label_2: +blt $t1 7 label_3 +bgt $t1 7 label_3 +lw $t1, 124($sp) +sw $t1, 12($sp) +li $a0, 52 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Bar_name +sw $t1, 4($t0) +li $t1, 13 +sw $t1, 8($t0) +la $t1, Bar_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bar_init +sw $a1, 20($sp) +lw $t1, 16($sp) +sw $t1, 8($sp) +b label_1 +label_3: +blt $t1 5 label_4 +bgt $t1 5 label_4 +lw $t1, 124($sp) +sw $t1, 24($sp) +li $a0, 44 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Razz_name +sw $t1, 4($t0) +li $t1, 11 +sw $t1, 8($t0) +la $t1, Razz_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Razz_init +sw $a1, 32($sp) +lw $t1, 28($sp) +sw $t1, 8($sp) +b label_1 +label_4: +blt $t1 6 label_5 +bgt $t1 6 label_5 +lw $t1, 124($sp) +sw $t1, 36($sp) +lw $t1, 36($sp) +sw $t1, 8($sp) +b label_1 +label_5: +b case_no_match_error +label_1: +lw $t0, 124($sp) +lw $t1, 8($sp) +sw $t1, 28($t0) +lw $t0, 124($sp) +lw $t1, 28($t0) +sw $t1, 92($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 88($sp) +lw $t0, 124($sp) +lw $t1, 20($t0) +sw $t1, 100($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 96($sp) +lw $t0, 88($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 84($sp) +lw $a0, 80($sp) +lw $t1, 84($sp) +add $a0, $a0, $t1 +sw $a0, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 108($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $a0, 64($sp) +lw $t1, 68($sp) +add $a0, $a0, $t1 +sw $a0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 116($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +add $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 120($sp) +lw $t0, 124($sp) +lw $t1, 40($sp) +sw $t1, 32($t0) +lw $ra, 0($sp) +addi $sp, $sp, 128 +jr $ra +Foo.doh: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t1, 4($sp) +sw $t1, 8($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +li $t0, 2 +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +add $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +lw $t0, 60($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +lw $t0, 60($sp) +lw $t1, 24($t0) +sw $t1, 52($sp) +lw $t1, 52($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +Bar_init: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Razz_init +sw $a1, 4($sp) +move $a1, $zero +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 8($sp) +lw $t0, 16($sp) +lw $t1, 8($sp) +sw $t1, 44($t0) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 12($sp) +lw $t0, 16($sp) +lw $t1, 12($sp) +sw $t1, 48($t0) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Razz_init: +addi $sp, $sp, -140 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Foo_init +sw $a1, 4($sp) +move $a1, $zero +lw $t0, 144($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_7 +b case_void_error +label_7: +blt $t1 7 label_8 +bgt $t1 7 label_8 +lw $t1, 144($sp) +sw $t1, 12($sp) +li $a0, 52 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Bar_name +sw $t1, 4($t0) +li $t1, 13 +sw $t1, 8($t0) +la $t1, Bar_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bar_init +sw $a1, 20($sp) +lw $t1, 16($sp) +sw $t1, 8($sp) +b label_6 +label_8: +blt $t1 6 label_9 +bgt $t1 6 label_9 +lw $t1, 144($sp) +sw $t1, 24($sp) +lw $t1, 24($sp) +sw $t1, 8($sp) +b label_6 +label_9: +b case_no_match_error +label_6: +lw $t0, 144($sp) +lw $t1, 8($sp) +sw $t1, 36($t0) +lw $t0, 144($sp) +lw $t1, 28($t0) +sw $t1, 96($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, Bazz_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Bazz_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 92($sp) +lw $t0, 144($sp) +lw $t1, 20($t0) +sw $t1, 108($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 108($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 104($sp) +lw $t0, 92($sp) +lw $t1, 16($t0) +sw $t1, 84($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $a0, 84($sp) +lw $t1, 88($sp) +add $a0, $a0, $t1 +sw $a0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +lw $t0, 144($sp) +lw $t1, 36($t0) +sw $t1, 120($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 116($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +add $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 124($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 128($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 128($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +add $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 136($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 36($sp) +lw $t0, 136($sp) +lw $t1, 16($t0) +sw $t1, 40($sp) +lw $a0, 36($sp) +lw $t1, 40($sp) +add $a0, $a0, $t1 +sw $a0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +lw $t0, 144($sp) +lw $t1, 28($sp) +sw $t1, 40($t0) +lw $ra, 0($sp) +addi $sp, $sp, 148 +jr $ra +Bazz_init: +addi $sp, $sp, -64 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +li $t0, 1 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 68($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $t0, 68($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_11 +b case_void_error +label_11: +blt $t1 7 label_12 +bgt $t1 7 label_12 +lw $t1, 68($sp) +sw $t1, 24($sp) +li $a0, 52 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Bar_name +sw $t1, 4($t0) +li $t1, 13 +sw $t1, 8($t0) +la $t1, Bar_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bar_init +sw $a1, 32($sp) +lw $t1, 28($sp) +sw $t1, 20($sp) +b label_10 +label_12: +blt $t1 5 label_13 +bgt $t1 5 label_13 +lw $t1, 68($sp) +sw $t1, 36($sp) +li $a0, 44 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Razz_name +sw $t1, 4($t0) +li $t1, 11 +sw $t1, 8($t0) +la $t1, Razz_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Razz_init +sw $a1, 44($sp) +lw $t1, 40($sp) +sw $t1, 20($sp) +b label_10 +label_13: +blt $t1 8 label_14 +bgt $t1 8 label_14 +lw $t1, 68($sp) +sw $t1, 48($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Foo_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Foo_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Foo_init +sw $a1, 56($sp) +lw $t1, 52($sp) +sw $t1, 20($sp) +b label_10 +label_14: +blt $t1 6 label_15 +bgt $t1 6 label_15 +lw $t1, 68($sp) +sw $t1, 60($sp) +lw $t1, 60($sp) +sw $t1, 20($sp) +b label_10 +label_15: +b case_no_match_error +label_10: +lw $t0, 68($sp) +lw $t1, 20($sp) +sw $t1, 20($t0) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 64($sp) +lw $t0, 68($sp) +lw $t1, 64($sp) +sw $t1, 24($t0) +lw $ra, 0($sp) +addi $sp, $sp, 72 +jr $ra +Bazz.printh: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 20($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 28 +jr $ra +Bazz.doh: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t1, 4($sp) +sw $t1, 8($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +li $t0, 1 +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 40($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +add $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +lw $t0, 60($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +lw $t0, 60($sp) +lw $t1, 24($t0) +sw $t1, 52($sp) +lw $t1, 52($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +Main_init: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Object_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, Bazz_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Bazz_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bazz_init +sw $a1, 12($sp) +lw $t0, 40($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Foo_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Foo_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Foo_init +sw $a1, 20($sp) +lw $t0, 40($sp) +lw $t1, 16($sp) +sw $t1, 20($t0) +li $a0, 44 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Razz_name +sw $t1, 4($t0) +li $t1, 11 +sw $t1, 8($t0) +la $t1, Razz_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Razz_init +sw $a1, 28($sp) +lw $t0, 40($sp) +lw $t1, 24($sp) +sw $t1, 24($t0) +li $a0, 52 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Bar_name +sw $t1, 4($t0) +li $t1, 13 +sw $t1, 8($t0) +la $t1, Bar_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bar_init +sw $a1, 36($sp) +lw $t0, 40($sp) +lw $t1, 32($sp) +sw $t1, 28($t0) +lw $ra, 0($sp) +addi $sp, $sp, 44 +jr $ra +Main.main: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra \ No newline at end of file From 501470d7b1e08cd54c059abd0a037069b0766610 Mon Sep 17 00:00:00 2001 From: hros18 Date: Sun, 13 Dec 2020 22:06:08 -0500 Subject: [PATCH 130/140] new test passed, BoolConstant misstype, PASSED primes, list --- src/visitors/to_mips.py | 7 +- src/visitors/transpilator.py | 3 +- tests/codegen/arith.mips | 50 + tests/codegen/atoi.mips | 24 + tests/codegen/book_list.mips | 8 + tests/codegen/cells.cil | 848 +++++++ tests/codegen/cells.mips | 12 + tests/codegen/complex.mips | 6 + tests/codegen/fib.mips | 6 + tests/codegen/graph.cil | 1998 +++++++++++++++++ tests/codegen/graph.mips | 38 + tests/codegen/hairyscary.mips | 2 + tests/codegen/hairyscary_test.cil | 0 tests/codegen/life.cil | 3425 +++++++++++++++++++++++++++++ tests/codegen/life.mips | 46 + tests/codegen/list.cil | 559 +++++ tests/codegen/list.mips | 8 + tests/codegen/new_complex.mips | 12 + tests/codegen/palindrome.cil | 518 +++++ tests/codegen/palindrome.mips | 12 + tests/codegen/primes.cil | 615 ++++++ tests/codegen/primes.mips | 16 + tests/codegen/sort-list.mips | 12 + tests/codegen/test.py | 8 +- 24 files changed, 8229 insertions(+), 4 deletions(-) create mode 100644 tests/codegen/cells.cil create mode 100644 tests/codegen/graph.cil create mode 100644 tests/codegen/hairyscary_test.cil create mode 100644 tests/codegen/life.cil create mode 100644 tests/codegen/list.cil create mode 100644 tests/codegen/palindrome.cil create mode 100644 tests/codegen/primes.cil diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 913b11f1..f6880bf5 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -389,6 +389,8 @@ def visit(self, node): @visitor.when(LabelNodeIL) def visit(self, node): + print(self.count) + self.count += 1 print('LabelNodeIL') self.text += f'{node.label}:\n' @@ -467,15 +469,18 @@ def visit(self, node): print(self.count) self.count += 1 print('LoadNodeIL') - if node.msg: + print('-------------msg----------: ' + str(node.msg)) + if node.msg != None: if isinstance(node.msg, str): self.text += f'la $t0, {node.msg}\n' offset = self.var_offset[self.current_function.name][node.dest] self.text += f'sw $t0, {offset}($sp)\n' + print('Got str') else: self.text += f'li $t0, {node.msg}\n' offset = self.var_offset[self.current_function.name][node.dest] self.text += f'sw $t0, {offset}($sp)\n' + print('Got int') # @visitor.when(CIL_AST.LoadInt) # def visit(self, node): diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index c4ea8a34..8465cbf4 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -1315,8 +1315,9 @@ def visit(self, node, scope, sscope): @visitor.when(BoolNode) def visit(self, node, scope, sscope): boolean = 0 - if str(node.lex) == "true": + if str(node.lex) == "True": boolean = 1 + # print('booolean--------------- ', node.lex) instance = self.define_internal_local(scope=scope, name="instance") self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, instance)) value = self.define_internal_local(scope=scope, name="value") diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 249b5440..17d507c6 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -760,6 +760,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1730,6 +1732,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -1789,6 +1793,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 64($sp) +li $t0, 0 +sw $t0, 68($sp) move $t0, $sp lw $t1, 68($t0) addi $sp, $sp, -4 @@ -2046,6 +2052,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 188($sp) +li $t0, 0 +sw $t0, 192($sp) move $t0, $sp lw $t1, 192($t0) addi $sp, $sp, -4 @@ -2076,6 +2084,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 200($sp) +li $t0, 0 +sw $t0, 204($sp) move $t0, $sp lw $t1, 204($t0) addi $sp, $sp, -4 @@ -2106,6 +2116,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 212($sp) +li $t0, 1 +sw $t0, 216($sp) move $t0, $sp lw $t1, 216($t0) addi $sp, $sp, -4 @@ -2938,6 +2950,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 368($sp) +li $t0, 0 +sw $t0, 372($sp) move $t0, $sp lw $t1, 372($t0) addi $sp, $sp, -4 @@ -3253,6 +3267,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 488($sp) +li $t0, 0 +sw $t0, 492($sp) move $t0, $sp lw $t1, 492($t0) addi $sp, $sp, -4 @@ -3287,6 +3303,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -4270,6 +4288,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -4354,6 +4374,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 80($sp) +li $t0, 0 +sw $t0, 84($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 @@ -4480,6 +4502,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 144($sp) +li $t0, 0 +sw $t0, 148($sp) move $t0, $sp lw $t1, 148($t0) addi $sp, $sp, -4 @@ -4892,6 +4916,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 304($sp) +li $t0, 0 +sw $t0, 308($sp) move $t0, $sp lw $t1, 308($t0) addi $sp, $sp, -4 @@ -4926,6 +4952,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -4964,6 +4992,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -5253,6 +5283,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -5312,6 +5344,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 60($sp) +li $t0, 0 +sw $t0, 64($sp) move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 @@ -5569,6 +5603,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -5905,6 +5941,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 20($sp) +li $t0, 1 +sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -6955,6 +6993,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -7014,6 +7054,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 64($sp) +li $t0, 0 +sw $t0, 68($sp) move $t0, $sp lw $t1, 68($t0) addi $sp, $sp, -4 @@ -7210,6 +7252,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 152($sp) +li $t0, 0 +sw $t0, 156($sp) move $t0, $sp lw $t1, 156($t0) addi $sp, $sp, -4 @@ -7240,6 +7284,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 164($sp) +li $t0, 1 +sw $t0, 168($sp) move $t0, $sp lw $t1, 168($t0) addi $sp, $sp, -4 @@ -8654,6 +8700,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 536($sp) +li $t0, 0 +sw $t0, 540($sp) move $t0, $sp lw $t1, 540($t0) addi $sp, $sp, -4 @@ -9797,6 +9845,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 1044($sp) +li $t0, 0 +sw $t0, 1048($sp) move $t0, $sp lw $t1, 1048($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index 88ca5e4e..f718e230 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -1267,6 +1267,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 368($sp) +li $t0, 0 +sw $t0, 372($sp) move $t0, $sp lw $t1, 372($t0) addi $sp, $sp, -4 @@ -1582,6 +1584,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 488($sp) +li $t0, 0 +sw $t0, 492($sp) move $t0, $sp lw $t1, 492($t0) addi $sp, $sp, -4 @@ -1616,6 +1620,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -2599,6 +2605,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -2683,6 +2691,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 80($sp) +li $t0, 0 +sw $t0, 84($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 @@ -2809,6 +2819,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 144($sp) +li $t0, 0 +sw $t0, 148($sp) move $t0, $sp lw $t1, 148($t0) addi $sp, $sp, -4 @@ -3221,6 +3233,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 304($sp) +li $t0, 0 +sw $t0, 308($sp) move $t0, $sp lw $t1, 308($t0) addi $sp, $sp, -4 @@ -3255,6 +3269,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -3293,6 +3309,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -3582,6 +3600,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -3641,6 +3661,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 60($sp) +li $t0, 0 +sw $t0, 64($sp) move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 @@ -3898,6 +3920,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index 488e02cb..95697240 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -1194,6 +1194,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 1 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1391,6 +1393,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1610,6 +1614,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 1 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1641,6 +1647,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 1 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/cells.cil b/tests/codegen/cells.cil new file mode 100644 index 00000000..8ffe663e --- /dev/null +++ b/tests/codegen/cells.cil @@ -0,0 +1,848 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type CellularAutomaton { + attribute population_map + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method init : CellularAutomaton.init + method print : CellularAutomaton.print + method num_cells : CellularAutomaton.num_cells + method cell : CellularAutomaton.cell + method cell_left_neighbor : CellularAutomaton.cell_left_neighbor + method cell_right_neighbor : CellularAutomaton.cell_right_neighbor + method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution + method evolve : CellularAutomaton.evolve +} +type Main { + attribute cells + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: X +s_4: . +s_5: X + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT msg_0 + type_name_1 = TYPEOF self + PRINT type_name_1 + eol_2 = LOAD s_1 + PRINT eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function CellularAutomaton_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE String + value_2 = LOAD empty_str + result_init_3 = CALL String_init + SetAttr self population_map instance_1 +} +function CellularAutomaton.init { + PARAM self + PARAM map + + LOCAL result_0 + + SetAttr self population_map map + + RETURN self +} +function CellularAutomaton.print { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL CellularAutomaton.population_map + LOCAL internal_3 + LOCAL instance_4 + LOCAL result_init_5 + + CellularAutomaton.population_map = GetAttr self population_map + internal_3 = LOAD s_1 + instance_4 = ALLOCATE String + result_init_5 = CALL String_init + result_1 = VCALL String concat + result_0 = VCALL CellularAutomaton out_string + + RETURN self +} +function CellularAutomaton.num_cells { + PARAM self + + LOCAL result_0 + LOCAL CellularAutomaton.population_map + + CellularAutomaton.population_map = GetAttr self population_map + result_0 = VCALL String length + + RETURN result_0 +} +function CellularAutomaton.cell { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL CellularAutomaton.population_map + LOCAL instance_2 + LOCAL value_3 + LOCAL result_init_4 + + CellularAutomaton.population_map = GetAttr self population_map + instance_2 = ALLOCATE Int + value_3 = LOAD 1 + result_init_4 = CALL Int_init + result_0 = VCALL String substr + + RETURN result_0 +} +function CellularAutomaton.cell_left_neighbor { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL instance_5 + LOCAL value_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL op_11 + LOCAL left_12 + LOCAL right_13 + LOCAL instance_14 + LOCAL value_15 + LOCAL result_init_16 + LOCAL result_init_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL result_23 + LOCAL instance_24 + LOCAL value_25 + LOCAL result_init_26 + LOCAL result_init_27 + + instance_5 = ALLOCATE Int + value_6 = LOAD 0 + result_init_7 = CALL Int_init + left_3 = GetAttr position value + right_4 = GetAttr instance_5 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_1 + instance_14 = ALLOCATE Int + value_15 = LOAD 1 + result_init_16 = CALL Int_init + left_12 = GetAttr position value + right_13 = GetAttr instance_14 value + op_11 = left_12 - right_13 + result_10 = ALLOCATE Int + result_init_17 = CALL Int_init + result_9 = VCALL CellularAutomaton cell + result_0 = result_9 + GOTO label_2 + LABEL label_1 + result_23 = VCALL CellularAutomaton num_cells + instance_24 = ALLOCATE Int + value_25 = LOAD 1 + result_init_26 = CALL Int_init + left_21 = GetAttr result_23 value + right_22 = GetAttr instance_24 value + op_20 = left_21 - right_22 + result_19 = ALLOCATE Int + result_init_27 = CALL Int_init + result_18 = VCALL CellularAutomaton cell + result_0 = result_18 + LABEL label_2 + + RETURN result_0 +} +function CellularAutomaton.cell_right_neighbor { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL result_9 + LOCAL instance_10 + LOCAL value_11 + LOCAL result_init_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL instance_20 + LOCAL value_21 + LOCAL result_init_22 + LOCAL result_init_23 + LOCAL result_24 + LOCAL instance_25 + LOCAL value_26 + LOCAL result_init_27 + + result_9 = VCALL CellularAutomaton num_cells + instance_10 = ALLOCATE Int + value_11 = LOAD 1 + result_init_12 = CALL Int_init + left_7 = GetAttr result_9 value + right_8 = GetAttr instance_10 value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_13 = CALL Int_init + left_3 = GetAttr position value + right_4 = GetAttr result_5 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_3 + instance_20 = ALLOCATE Int + value_21 = LOAD 1 + result_init_22 = CALL Int_init + left_18 = GetAttr position value + right_19 = GetAttr instance_20 value + op_17 = left_18 + right_19 + result_16 = ALLOCATE Int + result_init_23 = CALL Int_init + result_15 = VCALL CellularAutomaton cell + result_0 = result_15 + GOTO label_4 + LABEL label_3 + instance_25 = ALLOCATE Int + value_26 = LOAD 0 + result_init_27 = CALL Int_init + result_24 = VCALL CellularAutomaton cell + result_0 = result_24 + LABEL label_4 + + RETURN result_0 +} +function CellularAutomaton.cell_at_next_evolution { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL result_9 + LOCAL op_10 + LOCAL left_11 + LOCAL right_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL result_18 + LOCAL internal_19 + LOCAL instance_20 + LOCAL result_init_21 + LOCAL result_init_22 + LOCAL instance_23 + LOCAL value_24 + LOCAL result_init_25 + LOCAL instance_26 + LOCAL value_27 + LOCAL result_init_28 + LOCAL result_29 + LOCAL result_30 + LOCAL op_31 + LOCAL left_32 + LOCAL right_33 + LOCAL result_34 + LOCAL internal_35 + LOCAL instance_36 + LOCAL result_init_37 + LOCAL result_init_38 + LOCAL instance_39 + LOCAL value_40 + LOCAL result_init_41 + LOCAL instance_42 + LOCAL value_43 + LOCAL result_init_44 + LOCAL result_init_45 + LOCAL result_46 + LOCAL result_47 + LOCAL op_48 + LOCAL left_49 + LOCAL right_50 + LOCAL result_51 + LOCAL internal_52 + LOCAL instance_53 + LOCAL result_init_54 + LOCAL result_init_55 + LOCAL instance_56 + LOCAL value_57 + LOCAL result_init_58 + LOCAL instance_59 + LOCAL value_60 + LOCAL result_init_61 + LOCAL result_init_62 + LOCAL instance_63 + LOCAL value_64 + LOCAL result_init_65 + LOCAL result_init_66 + LOCAL internal_67 + LOCAL instance_68 + LOCAL result_init_69 + LOCAL internal_70 + LOCAL instance_71 + LOCAL result_init_72 + + result_18 = VCALL CellularAutomaton cell + internal_19 = LOAD s_3 + instance_20 = ALLOCATE String + result_init_21 = CALL String_init + op_15 = CALL String_equals + result_14 = ALLOCATE Bool + result_init_22 = CALL Bool_init + IF result_14 GOTO label_5 + instance_23 = ALLOCATE Int + value_24 = LOAD 0 + result_init_25 = CALL Int_init + result_13 = instance_23 + GOTO label_6 + LABEL label_5 + instance_26 = ALLOCATE Int + value_27 = LOAD 1 + result_init_28 = CALL Int_init + result_13 = instance_26 + LABEL label_6 + result_34 = VCALL CellularAutomaton cell_left_neighbor + internal_35 = LOAD s_3 + instance_36 = ALLOCATE String + result_init_37 = CALL String_init + op_31 = CALL String_equals + result_30 = ALLOCATE Bool + result_init_38 = CALL Bool_init + IF result_30 GOTO label_7 + instance_39 = ALLOCATE Int + value_40 = LOAD 0 + result_init_41 = CALL Int_init + result_29 = instance_39 + GOTO label_8 + LABEL label_7 + instance_42 = ALLOCATE Int + value_43 = LOAD 1 + result_init_44 = CALL Int_init + result_29 = instance_42 + LABEL label_8 + left_11 = GetAttr result_13 value + right_12 = GetAttr result_29 value + op_10 = left_11 + right_12 + result_9 = ALLOCATE Int + result_init_45 = CALL Int_init + result_51 = VCALL CellularAutomaton cell_right_neighbor + internal_52 = LOAD s_3 + instance_53 = ALLOCATE String + result_init_54 = CALL String_init + op_48 = CALL String_equals + result_47 = ALLOCATE Bool + result_init_55 = CALL Bool_init + IF result_47 GOTO label_9 + instance_56 = ALLOCATE Int + value_57 = LOAD 0 + result_init_58 = CALL Int_init + result_46 = instance_56 + GOTO label_10 + LABEL label_9 + instance_59 = ALLOCATE Int + value_60 = LOAD 1 + result_init_61 = CALL Int_init + result_46 = instance_59 + LABEL label_10 + left_7 = GetAttr result_9 value + right_8 = GetAttr result_46 value + op_6 = left_7 + right_8 + result_5 = ALLOCATE Int + result_init_62 = CALL Int_init + instance_63 = ALLOCATE Int + value_64 = LOAD 1 + result_init_65 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_63 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_66 = CALL Bool_init + IF result_1 GOTO label_11 + internal_67 = LOAD s_4 + instance_68 = ALLOCATE String + result_init_69 = CALL String_init + result_0 = instance_68 + GOTO label_12 + LABEL label_11 + internal_70 = LOAD s_3 + instance_71 = ALLOCATE String + result_init_72 = CALL String_init + result_0 = instance_71 + LABEL label_12 + + RETURN result_0 +} +function CellularAutomaton.evolve { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL position_3 + LOCAL result_4 + LOCAL num_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL temp_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL result_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL instance_23 + LOCAL value_24 + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL result_27 + LOCAL result_28 + LOCAL let_result_29 + LOCAL let_result_30 + LOCAL let_result_31 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + position_3 = instance_0 + result_4 = VCALL CellularAutomaton num_cells + num_5 = result_4 + instance_6 = ALLOCATE String + value_7 = LOAD empty_str + result_init_8 = CALL String_init + temp_9 = instance_6 + LABEL label_13 + left_13 = GetAttr position_3 value + right_14 = GetAttr num_5 value + op_12 = left_13 < right_14 + result_11 = ALLOCATE Bool + result_init_15 = CALL Bool_init + IF result_11 GOTO label_14 + GOTO label_15 + LABEL label_14 + result_17 = VCALL CellularAutomaton cell_at_next_evolution + result_16 = VCALL String concat + temp_9 = result_16 + instance_23 = ALLOCATE Int + value_24 = LOAD 1 + result_init_25 = CALL Int_init + left_21 = GetAttr position_3 value + right_22 = GetAttr instance_23 value + op_20 = left_21 + right_22 + result_19 = ALLOCATE Int + result_init_26 = CALL Int_init + position_3 = result_19 + GOTO label_13 + LABEL label_15 + result_10 = LOAD VOID + SetAttr self population_map temp_9 + let_result_29 = self + let_result_30 = let_result_29 + let_result_31 = let_result_30 + + RETURN let_result_31 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL Object_init + + RETURN + SetAttr self cells None +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL internal_3 + LOCAL instance_4 + LOCAL result_init_5 + LOCAL result_6 + LOCAL result_7 + LOCAL Main.cells + LOCAL instance_9 + LOCAL value_10 + LOCAL result_init_11 + LOCAL countdown_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL instance_18 + LOCAL value_19 + LOCAL result_init_20 + LOCAL result_init_21 + LOCAL result_22 + LOCAL Main.cells + LOCAL result_24 + LOCAL Main.cells + LOCAL result_26 + LOCAL op_27 + LOCAL left_28 + LOCAL right_29 + LOCAL instance_30 + LOCAL value_31 + LOCAL result_init_32 + LOCAL result_init_33 + LOCAL result_34 + LOCAL let_result_35 + + result_1 = ALLOCATE CellularAutomaton + init_2 = CALL CellularAutomaton_init + internal_3 = LOAD s_5 + instance_4 = ALLOCATE String + result_init_5 = CALL String_init + result_0 = VCALL CellularAutomaton init + SetAttr self cells result_0 + Main.cells = GetAttr self cells + result_7 = VCALL CellularAutomaton print + instance_9 = ALLOCATE Int + value_10 = LOAD 20 + result_init_11 = CALL Int_init + countdown_12 = instance_9 + LABEL label_16 + instance_18 = ALLOCATE Int + value_19 = LOAD 0 + result_init_20 = CALL Int_init + left_16 = GetAttr instance_18 value + right_17 = GetAttr countdown_12 value + op_15 = left_16 < right_17 + result_14 = ALLOCATE Bool + result_init_21 = CALL Bool_init + IF result_14 GOTO label_17 + GOTO label_18 + LABEL label_17 + Main.cells = GetAttr self cells + result_22 = VCALL CellularAutomaton evolve + Main.cells = GetAttr self cells + result_24 = VCALL CellularAutomaton print + instance_30 = ALLOCATE Int + value_31 = LOAD 1 + result_init_32 = CALL Int_init + left_28 = GetAttr countdown_12 value + right_29 = GetAttr instance_30 value + op_27 = left_28 - right_29 + result_26 = ALLOCATE Int + result_init_33 = CALL Int_init + countdown_12 = result_26 + GOTO label_16 + LABEL label_18 + result_13 = LOAD VOID + let_result_35 = result_13 + + RETURN self +} \ No newline at end of file diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 75fb05fd..fb93cc11 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -825,6 +825,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -1235,6 +1237,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 104($sp) +li $t0, 0 +sw $t0, 108($sp) move $t0, $sp lw $t1, 108($t0) addi $sp, $sp, -4 @@ -1358,6 +1362,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 96($sp) +li $t0, 0 +sw $t0, 100($sp) move $t0, $sp lw $t1, 100($t0) addi $sp, $sp, -4 @@ -1488,6 +1494,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 160($sp) +li $t0, 0 +sw $t0, 164($sp) move $t0, $sp lw $t1, 164($t0) addi $sp, $sp, -4 @@ -1651,6 +1659,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 228($sp) +li $t0, 0 +sw $t0, 232($sp) move $t0, $sp lw $t1, 232($t0) addi $sp, $sp, -4 @@ -2151,6 +2161,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 76($sp) +li $t0, 0 +sw $t0, 80($sp) move $t0, $sp lw $t1, 80($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 44921557..a069949b 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -908,6 +908,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -934,6 +936,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) +li $t0, 0 +sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -1050,6 +1054,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index 0da6deab..25968ecc 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -785,6 +785,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) +li $t0, 0 +sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -810,6 +812,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 36($sp) +li $t0, 0 +sw $t0, 40($sp) move $t0, $sp lw $t1, 40($t0) addi $sp, $sp, -4 @@ -836,6 +840,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 84($sp) +li $t0, 0 +sw $t0, 88($sp) move $t0, $sp lw $t1, 88($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/graph.cil b/tests/codegen/graph.cil new file mode 100644 index 00000000..e3bb9f31 --- /dev/null +++ b/tests/codegen/graph.cil @@ -0,0 +1,1998 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Graph { + attribute vertices + attribute edges + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method add_vertice : Graph.add_vertice + method print_E : Graph.print_E + method print_V : Graph.print_V +} +type Vertice { + attribute num + attribute out + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method outgoing : Vertice.outgoing + method number : Vertice.number + method init : Vertice.init + method add_out : Vertice.add_out + method print : Vertice.print +} +type Edge { + attribute from + attribute to + attribute weight + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method init : Edge.init + method print : Edge.print +} +type EList { + attribute car + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : EList.isNil + method head : EList.head + method tail : EList.tail + method cons : EList.cons + method append : EList.append + method print : EList.print +} +type ECons { + attribute car + attribute cdr + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : ECons.isNil + method head : ECons.head + method tail : ECons.tail + method cons : EList.cons + method append : EList.append + method print : ECons.print + method init : ECons.init +} +type VList { + attribute car + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : VList.isNil + method head : VList.head + method tail : VList.tail + method cons : VList.cons + method print : VList.print +} +type VCons { + attribute car + attribute cdr + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method isNil : VCons.isNil + method head : VCons.head + method tail : VCons.tail + method cons : VList.cons + method print : VCons.print + method init : VCons.init +} +type Parse { + attribute boolop + attribute rest + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method read_input : Parse.read_input + method parse_line : Parse.parse_line + method c2i : Parse.c2i + method a2i : Parse.a2i + method a2i_aux : Parse.a2i_aux +} +type Main { + attribute boolop + attribute rest + attribute g + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method read_input : Parse.read_input + method parse_line : Parse.parse_line + method c2i : Parse.c2i + method a2i : Parse.a2i + method a2i_aux : Parse.a2i_aux + method main : Main.main +} +type BoolOp { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method and : BoolOp.and + method or : BoolOp.or +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: ( +s_4: , +s_5: ) +s_6: 0 +s_7: 1 +s_8: 2 +s_9: 3 +s_10: 4 +s_11: 5 +s_12: 6 +s_13: 7 +s_14: 8 +s_15: 9 +s_16: - +s_17: + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT msg_0 + type_name_1 = TYPEOF self + PRINT type_name_1 + eol_2 = LOAD s_1 + PRINT eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Graph_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL result_3 + LOCAL init_4 + + result_0 = CALL Object_init + + RETURN + result_1 = ALLOCATE VList + init_2 = CALL VList_init + SetAttr self vertices result_1 + result_3 = ALLOCATE EList + init_4 = CALL EList_init + SetAttr self edges result_3 +} +function Graph.add_vertice { + PARAM self + PARAM v + + LOCAL result_0 + LOCAL result_1 + LOCAL Graph.edges + LOCAL result_3 + LOCAL result_4 + LOCAL Graph.vertices + LOCAL result_6 + + result_1 = VCALL Vertice outgoing + Graph.edges = GetAttr self edges + result_0 = VCALL EList append + SetAttr self edges result_0 + Graph.vertices = GetAttr self vertices + result_4 = VCALL VList cons + SetAttr self vertices result_4 + + RETURN result_4 +} +function Graph.print_E { + PARAM self + + LOCAL result_0 + LOCAL Graph.edges + + Graph.edges = GetAttr self edges + result_0 = VCALL EList print + + RETURN result_0 +} +function Graph.print_V { + PARAM self + + LOCAL result_0 + LOCAL Graph.vertices + + Graph.vertices = GetAttr self vertices + result_0 = VCALL VList print + + RETURN result_0 +} +function Vertice_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + LOCAL result_4 + LOCAL init_5 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self num instance_1 + result_4 = ALLOCATE EList + init_5 = CALL EList_init + SetAttr self out result_4 +} +function Vertice.outgoing { + PARAM self + + LOCAL Vertice.out + + Vertice.out = GetAttr self out + + RETURN Vertice.out +} +function Vertice.number { + PARAM self + + LOCAL Vertice.num + + Vertice.num = GetAttr self num + + RETURN Vertice.num +} +function Vertice.init { + PARAM self + PARAM n + + LOCAL result_0 + + SetAttr self num n + + RETURN self +} +function Vertice.add_out { + PARAM self + PARAM s + + LOCAL result_0 + LOCAL Vertice.out + LOCAL result_2 + + Vertice.out = GetAttr self out + result_0 = VCALL EList cons + SetAttr self out result_0 + + RETURN self +} +function Vertice.print { + PARAM self + + LOCAL result_0 + LOCAL Vertice.num + LOCAL result_2 + LOCAL Vertice.out + + Vertice.num = GetAttr self num + result_0 = VCALL Vertice out_int + Vertice.out = GetAttr self out + result_2 = VCALL EList print + + RETURN result_2 +} +function Edge_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + LOCAL instance_4 + LOCAL value_5 + LOCAL result_init_6 + LOCAL instance_7 + LOCAL value_8 + LOCAL result_init_9 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self from instance_1 + instance_4 = ALLOCATE Int + value_5 = LOAD 0 + result_init_6 = CALL Int_init + SetAttr self to instance_4 + instance_7 = ALLOCATE Int + value_8 = LOAD 0 + result_init_9 = CALL Int_init + SetAttr self weight instance_7 +} +function Edge.init { + PARAM self + PARAM f + PARAM t + PARAM w + + LOCAL result_0 + LOCAL result_1 + LOCAL result_2 + + SetAttr self from f + SetAttr self to t + SetAttr self weight w + + RETURN self +} +function Edge.print { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + LOCAL result_4 + LOCAL Edge.from + LOCAL result_6 + LOCAL internal_7 + LOCAL instance_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL Edge.to + LOCAL result_12 + LOCAL internal_13 + LOCAL instance_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL Edge.weight + + internal_1 = LOAD s_3 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL Edge out_string + Edge.from = GetAttr self from + result_4 = VCALL Edge out_int + internal_7 = LOAD s_4 + instance_8 = ALLOCATE String + result_init_9 = CALL String_init + result_6 = VCALL Edge out_string + Edge.to = GetAttr self to + result_10 = VCALL Edge out_int + internal_13 = LOAD s_5 + instance_14 = ALLOCATE String + result_init_15 = CALL String_init + result_12 = VCALL Edge out_string + Edge.weight = GetAttr self weight + result_16 = VCALL Edge out_int + + RETURN result_16 +} +function EList_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN + SetAttr self car None +} +function EList.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 1 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function EList.head { + PARAM self + + LOCAL result_0 + LOCAL EList.car + + result_0 = VCALL EList abort + EList.car = GetAttr self car + + RETURN EList.car +} +function EList.tail { + PARAM self + + LOCAL result_0 + + result_0 = VCALL EList abort + + RETURN self +} +function EList.cons { + PARAM self + PARAM e + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_1 = ALLOCATE ECons + init_2 = CALL ECons_init + result_0 = VCALL ECons init + + RETURN result_0 +} +function EList.append { + PARAM self + PARAM l + + LOCAL result_0 + LOCAL result_1 + LOCAL result_2 + LOCAL result_3 + LOCAL result_4 + LOCAL result_5 + + result_1 = VCALL EList isNil + IF result_1 GOTO label_1 + result_4 = VCALL EList tail + result_3 = VCALL EList append + result_5 = VCALL EList head + result_2 = VCALL EList cons + result_0 = result_2 + GOTO label_2 + LABEL label_1 + result_0 = l + LABEL label_2 + + RETURN result_0 +} +function EList.print { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_1 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL EList out_string + + RETURN result_0 +} +function ECons_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL EList_init + + RETURN + SetAttr self cdr None +} +function ECons.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function ECons.head { + PARAM self + + LOCAL ECons.car + + ECons.car = GetAttr self car + + RETURN ECons.car +} +function ECons.tail { + PARAM self + + LOCAL ECons.cdr + + ECons.cdr = GetAttr self cdr + + RETURN ECons.cdr +} +function ECons.init { + PARAM self + PARAM e + PARAM rest + + LOCAL result_0 + LOCAL result_1 + + SetAttr self car e + SetAttr self cdr rest + + RETURN self +} +function ECons.print { + PARAM self + + LOCAL result_0 + LOCAL ECons.car + LOCAL result_2 + LOCAL ECons.cdr + + ECons.car = GetAttr self car + result_0 = VCALL Edge print + ECons.cdr = GetAttr self cdr + result_2 = VCALL EList print + + RETURN result_2 +} +function VList_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN + SetAttr self car None +} +function VList.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 1 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function VList.head { + PARAM self + + LOCAL result_0 + LOCAL VList.car + + result_0 = VCALL VList abort + VList.car = GetAttr self car + + RETURN VList.car +} +function VList.tail { + PARAM self + + LOCAL result_0 + + result_0 = VCALL VList abort + + RETURN self +} +function VList.cons { + PARAM self + PARAM v + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_1 = ALLOCATE VCons + init_2 = CALL VCons_init + result_0 = VCALL VCons init + + RETURN result_0 +} +function VList.print { + PARAM self + + LOCAL result_0 + LOCAL internal_1 + LOCAL instance_2 + LOCAL result_init_3 + + internal_1 = LOAD s_1 + instance_2 = ALLOCATE String + result_init_3 = CALL String_init + result_0 = VCALL VList out_string + + RETURN result_0 +} +function VCons_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL VList_init + + RETURN + SetAttr self cdr None +} +function VCons.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function VCons.head { + PARAM self + + LOCAL VCons.car + + VCons.car = GetAttr self car + + RETURN VCons.car +} +function VCons.tail { + PARAM self + + LOCAL VCons.cdr + + VCons.cdr = GetAttr self cdr + + RETURN VCons.cdr +} +function VCons.init { + PARAM self + PARAM v + PARAM rest + + LOCAL result_0 + LOCAL result_1 + + SetAttr self car v + SetAttr self cdr rest + + RETURN self +} +function VCons.print { + PARAM self + + LOCAL result_0 + LOCAL VCons.car + LOCAL result_2 + LOCAL VCons.cdr + + VCons.car = GetAttr self car + result_0 = VCALL Vertice print + VCons.cdr = GetAttr self cdr + result_2 = VCALL VList print + + RETURN result_2 +} +function Parse_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL instance_3 + LOCAL value_4 + LOCAL result_init_5 + + result_0 = CALL IO_init + + RETURN + result_1 = ALLOCATE BoolOp + init_2 = CALL BoolOp_init + SetAttr self boolop result_1 + instance_3 = ALLOCATE String + value_4 = LOAD empty_str + result_init_5 = CALL String_init + SetAttr self rest instance_3 +} +function Parse.read_input { + PARAM self + + LOCAL result_0 + LOCAL init_1 + LOCAL g_2 + LOCAL result_3 + LOCAL line_4 + LOCAL result_5 + LOCAL result_6 + LOCAL Parse.boolop + LOCAL result_8 + LOCAL op_9 + LOCAL internal_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL internal_15 + LOCAL instance_16 + LOCAL result_init_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL result_20 + LOCAL op_21 + LOCAL internal_22 + LOCAL result_23 + LOCAL op_24 + LOCAL left_25 + LOCAL right_26 + LOCAL internal_27 + LOCAL instance_28 + LOCAL result_init_29 + LOCAL result_init_30 + LOCAL result_init_31 + LOCAL result_32 + LOCAL result_33 + LOCAL result_34 + LOCAL result_35 + LOCAL let_result_36 + LOCAL let_result_37 + + result_0 = ALLOCATE Graph + init_1 = CALL Graph_init + g_2 = result_0 + result_3 = VCALL Parse in_string + line_4 = result_3 + LABEL label_3 + Parse.boolop = GetAttr self boolop + internal_15 = LOAD empty_str + instance_16 = ALLOCATE String + result_init_17 = CALL String_init + op_12 = CALL String_equals + result_11 = ALLOCATE Bool + result_init_18 = CALL Bool_init + internal_10 = GetAttr result_11 value + op_9 = not internal_10 + result_8 = ALLOCATE Bool + result_init_19 = CALL Bool_init + internal_27 = LOAD s_1 + instance_28 = ALLOCATE String + result_init_29 = CALL String_init + op_24 = CALL String_equals + result_23 = ALLOCATE Bool + result_init_30 = CALL Bool_init + internal_22 = GetAttr result_23 value + op_21 = not internal_22 + result_20 = ALLOCATE Bool + result_init_31 = CALL Bool_init + result_6 = VCALL BoolOp and + IF result_6 GOTO label_4 + GOTO label_5 + LABEL label_4 + result_33 = VCALL Parse parse_line + result_32 = VCALL Graph add_vertice + result_34 = VCALL Parse in_string + line_4 = result_34 + GOTO label_3 + LABEL label_5 + result_5 = LOAD VOID + let_result_36 = result_5 + let_result_37 = g_2 + + RETURN let_result_37 +} +function Parse.parse_line { + PARAM self + PARAM s + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + LOCAL result_3 + LOCAL v_4 + LOCAL result_5 + LOCAL result_6 + LOCAL op_7 + LOCAL internal_8 + LOCAL result_9 + LOCAL op_10 + LOCAL left_11 + LOCAL right_12 + LOCAL result_13 + LOCAL Parse.rest + LOCAL instance_15 + LOCAL value_16 + LOCAL result_init_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL result_20 + LOCAL Parse.rest + LOCAL succ_22 + LOCAL result_23 + LOCAL Parse.rest + LOCAL weight_25 + LOCAL result_26 + LOCAL result_27 + LOCAL result_28 + LOCAL init_29 + LOCAL result_30 + LOCAL let_result_31 + LOCAL let_result_32 + LOCAL let_result_33 + + result_1 = ALLOCATE Vertice + init_2 = CALL Vertice_init + result_3 = VCALL Parse a2i + result_0 = VCALL Vertice init + v_4 = result_0 + LABEL label_6 + Parse.rest = GetAttr self rest + result_13 = VCALL String length + instance_15 = ALLOCATE Int + value_16 = LOAD 0 + result_init_17 = CALL Int_init + left_11 = GetAttr result_13 value + right_12 = GetAttr instance_15 value + op_10 = left_11 = right_12 + result_9 = ALLOCATE Bool + result_init_18 = CALL Bool_init + internal_8 = GetAttr result_9 value + op_7 = not internal_8 + result_6 = ALLOCATE Bool + result_init_19 = CALL Bool_init + IF result_6 GOTO label_7 + GOTO label_8 + LABEL label_7 + Parse.rest = GetAttr self rest + result_20 = VCALL Parse a2i + succ_22 = result_20 + Parse.rest = GetAttr self rest + result_23 = VCALL Parse a2i + weight_25 = result_23 + result_28 = ALLOCATE Edge + init_29 = CALL Edge_init + result_30 = VCALL Vertice number + result_27 = VCALL Edge init + result_26 = VCALL Vertice add_out + let_result_31 = result_26 + let_result_32 = let_result_31 + GOTO label_6 + LABEL label_8 + result_5 = LOAD VOID + let_result_33 = v_4 + + RETURN let_result_33 +} +function Parse.c2i { + PARAM self + PARAM char + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL internal_5 + LOCAL instance_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL op_11 + LOCAL left_12 + LOCAL right_13 + LOCAL internal_14 + LOCAL instance_15 + LOCAL result_init_16 + LOCAL result_init_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL internal_23 + LOCAL instance_24 + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL result_27 + LOCAL result_28 + LOCAL op_29 + LOCAL left_30 + LOCAL right_31 + LOCAL internal_32 + LOCAL instance_33 + LOCAL result_init_34 + LOCAL result_init_35 + LOCAL result_36 + LOCAL result_37 + LOCAL op_38 + LOCAL left_39 + LOCAL right_40 + LOCAL internal_41 + LOCAL instance_42 + LOCAL result_init_43 + LOCAL result_init_44 + LOCAL result_45 + LOCAL result_46 + LOCAL op_47 + LOCAL left_48 + LOCAL right_49 + LOCAL internal_50 + LOCAL instance_51 + LOCAL result_init_52 + LOCAL result_init_53 + LOCAL result_54 + LOCAL result_55 + LOCAL op_56 + LOCAL left_57 + LOCAL right_58 + LOCAL internal_59 + LOCAL instance_60 + LOCAL result_init_61 + LOCAL result_init_62 + LOCAL result_63 + LOCAL result_64 + LOCAL op_65 + LOCAL left_66 + LOCAL right_67 + LOCAL internal_68 + LOCAL instance_69 + LOCAL result_init_70 + LOCAL result_init_71 + LOCAL result_72 + LOCAL result_73 + LOCAL op_74 + LOCAL left_75 + LOCAL right_76 + LOCAL internal_77 + LOCAL instance_78 + LOCAL result_init_79 + LOCAL result_init_80 + LOCAL result_81 + LOCAL result_82 + LOCAL op_83 + LOCAL left_84 + LOCAL right_85 + LOCAL internal_86 + LOCAL instance_87 + LOCAL result_init_88 + LOCAL result_init_89 + LOCAL result_90 + LOCAL instance_91 + LOCAL value_92 + LOCAL result_init_93 + LOCAL instance_94 + LOCAL value_95 + LOCAL result_init_96 + LOCAL instance_97 + LOCAL value_98 + LOCAL result_init_99 + LOCAL instance_100 + LOCAL value_101 + LOCAL result_init_102 + LOCAL instance_103 + LOCAL value_104 + LOCAL result_init_105 + LOCAL instance_106 + LOCAL value_107 + LOCAL result_init_108 + LOCAL instance_109 + LOCAL value_110 + LOCAL result_init_111 + LOCAL instance_112 + LOCAL value_113 + LOCAL result_init_114 + LOCAL instance_115 + LOCAL value_116 + LOCAL result_init_117 + LOCAL instance_118 + LOCAL value_119 + LOCAL result_init_120 + LOCAL instance_121 + LOCAL value_122 + LOCAL result_init_123 + + internal_5 = LOAD s_6 + instance_6 = ALLOCATE String + result_init_7 = CALL String_init + op_2 = CALL String_equals + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_9 + internal_14 = LOAD s_7 + instance_15 = ALLOCATE String + result_init_16 = CALL String_init + op_11 = CALL String_equals + result_10 = ALLOCATE Bool + result_init_17 = CALL Bool_init + IF result_10 GOTO label_10 + internal_23 = LOAD s_8 + instance_24 = ALLOCATE String + result_init_25 = CALL String_init + op_20 = CALL String_equals + result_19 = ALLOCATE Bool + result_init_26 = CALL Bool_init + IF result_19 GOTO label_11 + internal_32 = LOAD s_9 + instance_33 = ALLOCATE String + result_init_34 = CALL String_init + op_29 = CALL String_equals + result_28 = ALLOCATE Bool + result_init_35 = CALL Bool_init + IF result_28 GOTO label_12 + internal_41 = LOAD s_10 + instance_42 = ALLOCATE String + result_init_43 = CALL String_init + op_38 = CALL String_equals + result_37 = ALLOCATE Bool + result_init_44 = CALL Bool_init + IF result_37 GOTO label_13 + internal_50 = LOAD s_11 + instance_51 = ALLOCATE String + result_init_52 = CALL String_init + op_47 = CALL String_equals + result_46 = ALLOCATE Bool + result_init_53 = CALL Bool_init + IF result_46 GOTO label_14 + internal_59 = LOAD s_12 + instance_60 = ALLOCATE String + result_init_61 = CALL String_init + op_56 = CALL String_equals + result_55 = ALLOCATE Bool + result_init_62 = CALL Bool_init + IF result_55 GOTO label_15 + internal_68 = LOAD s_13 + instance_69 = ALLOCATE String + result_init_70 = CALL String_init + op_65 = CALL String_equals + result_64 = ALLOCATE Bool + result_init_71 = CALL Bool_init + IF result_64 GOTO label_16 + internal_77 = LOAD s_14 + instance_78 = ALLOCATE String + result_init_79 = CALL String_init + op_74 = CALL String_equals + result_73 = ALLOCATE Bool + result_init_80 = CALL Bool_init + IF result_73 GOTO label_17 + internal_86 = LOAD s_15 + instance_87 = ALLOCATE String + result_init_88 = CALL String_init + op_83 = CALL String_equals + result_82 = ALLOCATE Bool + result_init_89 = CALL Bool_init + IF result_82 GOTO label_18 + result_90 = VCALL Parse abort + instance_91 = ALLOCATE Int + value_92 = LOAD 0 + result_init_93 = CALL Int_init + result_81 = instance_91 + GOTO label_19 + LABEL label_18 + instance_94 = ALLOCATE Int + value_95 = LOAD 9 + result_init_96 = CALL Int_init + result_81 = instance_94 + LABEL label_19 + result_72 = result_81 + GOTO label_20 + LABEL label_17 + instance_97 = ALLOCATE Int + value_98 = LOAD 8 + result_init_99 = CALL Int_init + result_72 = instance_97 + LABEL label_20 + result_63 = result_72 + GOTO label_21 + LABEL label_16 + instance_100 = ALLOCATE Int + value_101 = LOAD 7 + result_init_102 = CALL Int_init + result_63 = instance_100 + LABEL label_21 + result_54 = result_63 + GOTO label_22 + LABEL label_15 + instance_103 = ALLOCATE Int + value_104 = LOAD 6 + result_init_105 = CALL Int_init + result_54 = instance_103 + LABEL label_22 + result_45 = result_54 + GOTO label_23 + LABEL label_14 + instance_106 = ALLOCATE Int + value_107 = LOAD 5 + result_init_108 = CALL Int_init + result_45 = instance_106 + LABEL label_23 + result_36 = result_45 + GOTO label_24 + LABEL label_13 + instance_109 = ALLOCATE Int + value_110 = LOAD 4 + result_init_111 = CALL Int_init + result_36 = instance_109 + LABEL label_24 + result_27 = result_36 + GOTO label_25 + LABEL label_12 + instance_112 = ALLOCATE Int + value_113 = LOAD 3 + result_init_114 = CALL Int_init + result_27 = instance_112 + LABEL label_25 + result_18 = result_27 + GOTO label_26 + LABEL label_11 + instance_115 = ALLOCATE Int + value_116 = LOAD 2 + result_init_117 = CALL Int_init + result_18 = instance_115 + LABEL label_26 + result_9 = result_18 + GOTO label_27 + LABEL label_10 + instance_118 = ALLOCATE Int + value_119 = LOAD 1 + result_init_120 = CALL Int_init + result_9 = instance_118 + LABEL label_27 + result_0 = result_9 + GOTO label_28 + LABEL label_9 + instance_121 = ALLOCATE Int + value_122 = LOAD 0 + result_init_123 = CALL Int_init + result_0 = instance_121 + LABEL label_28 + + RETURN result_0 +} +function Parse.a2i { + PARAM self + PARAM s + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL instance_19 + LOCAL value_20 + LOCAL result_init_21 + LOCAL internal_22 + LOCAL instance_23 + LOCAL result_init_24 + LOCAL result_init_25 + LOCAL result_26 + LOCAL result_27 + LOCAL op_28 + LOCAL left_29 + LOCAL right_30 + LOCAL result_31 + LOCAL instance_32 + LOCAL value_33 + LOCAL result_init_34 + LOCAL instance_35 + LOCAL value_36 + LOCAL result_init_37 + LOCAL internal_38 + LOCAL instance_39 + LOCAL result_init_40 + LOCAL result_init_41 + LOCAL result_42 + LOCAL result_43 + LOCAL result_44 + LOCAL result_45 + LOCAL op_46 + LOCAL left_47 + LOCAL right_48 + LOCAL result_49 + LOCAL instance_50 + LOCAL value_51 + LOCAL result_init_52 + LOCAL result_init_53 + LOCAL instance_54 + LOCAL value_55 + LOCAL result_init_56 + LOCAL result_57 + LOCAL op_58 + LOCAL internal_59 + LOCAL result_60 + LOCAL result_61 + LOCAL result_62 + LOCAL op_63 + LOCAL left_64 + LOCAL right_65 + LOCAL result_66 + LOCAL instance_67 + LOCAL value_68 + LOCAL result_init_69 + LOCAL result_init_70 + LOCAL instance_71 + LOCAL value_72 + LOCAL result_init_73 + LOCAL result_init_74 + LOCAL instance_75 + LOCAL value_76 + LOCAL result_init_77 + + result_5 = VCALL String length + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_1 GOTO label_29 + instance_16 = ALLOCATE Int + value_17 = LOAD 1 + result_init_18 = CALL Int_init + instance_19 = ALLOCATE Int + value_20 = LOAD 0 + result_init_21 = CALL Int_init + result_15 = VCALL String substr + internal_22 = LOAD s_16 + instance_23 = ALLOCATE String + result_init_24 = CALL String_init + op_12 = CALL String_equals + result_11 = ALLOCATE Bool + result_init_25 = CALL Bool_init + IF result_11 GOTO label_30 + instance_32 = ALLOCATE Int + value_33 = LOAD 1 + result_init_34 = CALL Int_init + instance_35 = ALLOCATE Int + value_36 = LOAD 0 + result_init_37 = CALL Int_init + result_31 = VCALL String substr + internal_38 = LOAD s_17 + instance_39 = ALLOCATE String + result_init_40 = CALL String_init + op_28 = CALL String_equals + result_27 = ALLOCATE Bool + result_init_41 = CALL Bool_init + IF result_27 GOTO label_31 + result_42 = VCALL Parse a2i_aux + result_26 = result_42 + GOTO label_32 + LABEL label_31 + result_49 = VCALL String length + instance_50 = ALLOCATE Int + value_51 = LOAD 1 + result_init_52 = CALL Int_init + left_47 = GetAttr result_49 value + right_48 = GetAttr instance_50 value + op_46 = left_47 - right_48 + result_45 = ALLOCATE Int + result_init_53 = CALL Int_init + instance_54 = ALLOCATE Int + value_55 = LOAD 1 + result_init_56 = CALL Int_init + result_44 = VCALL String substr + result_43 = VCALL Parse a2i + result_26 = result_43 + LABEL label_32 + result_10 = result_26 + GOTO label_33 + LABEL label_30 + result_66 = VCALL String length + instance_67 = ALLOCATE Int + value_68 = LOAD 1 + result_init_69 = CALL Int_init + left_64 = GetAttr result_66 value + right_65 = GetAttr instance_67 value + op_63 = left_64 - right_65 + result_62 = ALLOCATE Int + result_init_70 = CALL Int_init + instance_71 = ALLOCATE Int + value_72 = LOAD 1 + result_init_73 = CALL Int_init + result_61 = VCALL String substr + result_60 = VCALL Parse a2i_aux + internal_59 = GetAttr result_60 value + op_58 = ~ internal_59 + result_57 = ALLOCATE Int + result_init_74 = CALL Int_init + result_10 = result_57 + LABEL label_33 + result_0 = result_10 + GOTO label_34 + LABEL label_29 + instance_75 = ALLOCATE Int + value_76 = LOAD 0 + result_init_77 = CALL Int_init + result_0 = instance_75 + LABEL label_34 + + RETURN result_0 +} +function Parse.a2i_aux { + PARAM self + PARAM s + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL int_3 + LOCAL result_4 + LOCAL j_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL i_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL instance_17 + LOCAL value_18 + LOCAL result_init_19 + LOCAL c_20 + LOCAL result_21 + LOCAL result_22 + LOCAL op_23 + LOCAL left_24 + LOCAL right_25 + LOCAL internal_26 + LOCAL instance_27 + LOCAL result_init_28 + LOCAL result_init_29 + LOCAL result_30 + LOCAL result_31 + LOCAL op_32 + LOCAL left_33 + LOCAL right_34 + LOCAL internal_35 + LOCAL instance_36 + LOCAL result_init_37 + LOCAL result_init_38 + LOCAL result_39 + LOCAL op_40 + LOCAL left_41 + LOCAL right_42 + LOCAL result_43 + LOCAL op_44 + LOCAL left_45 + LOCAL right_46 + LOCAL instance_47 + LOCAL value_48 + LOCAL result_init_49 + LOCAL result_init_50 + LOCAL result_51 + LOCAL result_52 + LOCAL instance_53 + LOCAL value_54 + LOCAL result_init_55 + LOCAL result_init_56 + LOCAL result_57 + LOCAL result_58 + LOCAL op_59 + LOCAL left_60 + LOCAL right_61 + LOCAL instance_62 + LOCAL value_63 + LOCAL result_init_64 + LOCAL result_init_65 + LOCAL result_66 + LOCAL result_67 + LOCAL result_68 + LOCAL op_69 + LOCAL left_70 + LOCAL right_71 + LOCAL result_init_72 + LOCAL internal_73 + LOCAL instance_74 + LOCAL result_init_75 + LOCAL internal_76 + LOCAL instance_77 + LOCAL result_init_78 + LOCAL result_79 + LOCAL result_80 + LOCAL result_81 + LOCAL op_82 + LOCAL left_83 + LOCAL right_84 + LOCAL result_85 + LOCAL op_86 + LOCAL left_87 + LOCAL right_88 + LOCAL result_89 + LOCAL result_init_90 + LOCAL instance_91 + LOCAL value_92 + LOCAL result_init_93 + LOCAL result_init_94 + LOCAL result_95 + LOCAL op_96 + LOCAL left_97 + LOCAL right_98 + LOCAL instance_99 + LOCAL value_100 + LOCAL result_init_101 + LOCAL result_init_102 + LOCAL result_103 + LOCAL result_104 + LOCAL result_105 + LOCAL result_106 + LOCAL op_107 + LOCAL left_108 + LOCAL right_109 + LOCAL result_110 + LOCAL op_111 + LOCAL left_112 + LOCAL right_113 + LOCAL result_114 + LOCAL result_init_115 + LOCAL instance_116 + LOCAL value_117 + LOCAL result_init_118 + LOCAL result_init_119 + LOCAL result_120 + LOCAL op_121 + LOCAL left_122 + LOCAL right_123 + LOCAL instance_124 + LOCAL value_125 + LOCAL result_init_126 + LOCAL result_init_127 + LOCAL result_128 + LOCAL result_129 + LOCAL let_result_130 + LOCAL let_result_131 + LOCAL let_result_132 + LOCAL let_result_133 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + int_3 = instance_0 + result_4 = VCALL String length + j_5 = result_4 + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + i_9 = instance_6 + LABEL label_35 + left_13 = GetAttr i_9 value + right_14 = GetAttr j_5 value + op_12 = left_13 < right_14 + result_11 = ALLOCATE Bool + result_init_15 = CALL Bool_init + IF result_11 GOTO label_36 + GOTO label_37 + LABEL label_36 + instance_17 = ALLOCATE Int + value_18 = LOAD 1 + result_init_19 = CALL Int_init + result_16 = VCALL String substr + c_20 = result_16 + internal_26 = LOAD s_17 + instance_27 = ALLOCATE String + result_init_28 = CALL String_init + op_23 = CALL String_equals + result_22 = ALLOCATE Bool + result_init_29 = CALL Bool_init + IF result_22 GOTO label_38 + internal_35 = LOAD s_4 + instance_36 = ALLOCATE String + result_init_37 = CALL String_init + op_32 = CALL String_equals + result_31 = ALLOCATE Bool + result_init_38 = CALL Bool_init + IF result_31 GOTO label_39 + instance_47 = ALLOCATE Int + value_48 = LOAD 10 + result_init_49 = CALL Int_init + left_45 = GetAttr int_3 value + right_46 = GetAttr instance_47 value + op_44 = left_45 * right_46 + result_43 = ALLOCATE Int + result_init_50 = CALL Int_init + instance_53 = ALLOCATE Int + value_54 = LOAD 1 + result_init_55 = CALL Int_init + result_52 = VCALL String substr + result_51 = VCALL Parse c2i + left_41 = GetAttr result_43 value + right_42 = GetAttr result_51 value + op_40 = left_41 + right_42 + result_39 = ALLOCATE Int + result_init_56 = CALL Int_init + int_3 = result_39 + instance_62 = ALLOCATE Int + value_63 = LOAD 1 + result_init_64 = CALL Int_init + left_60 = GetAttr i_9 value + right_61 = GetAttr instance_62 value + op_59 = left_60 + right_61 + result_58 = ALLOCATE Int + result_init_65 = CALL Int_init + i_9 = result_58 + left_70 = GetAttr i_9 value + right_71 = GetAttr j_5 value + op_69 = left_70 = right_71 + result_68 = ALLOCATE Bool + result_init_72 = CALL Bool_init + IF result_68 GOTO label_40 + internal_73 = LOAD empty_str + instance_74 = ALLOCATE String + result_init_75 = CALL String_init + result_67 = instance_74 + GOTO label_41 + LABEL label_40 + internal_76 = LOAD empty_str + instance_77 = ALLOCATE String + result_init_78 = CALL String_init + SetAttr self rest instance_77 + result_67 = instance_77 + LABEL label_41 + result_30 = result_67 + GOTO label_42 + LABEL label_39 + result_89 = VCALL String length + left_87 = GetAttr result_89 value + right_88 = GetAttr i_9 value + op_86 = left_87 - right_88 + result_85 = ALLOCATE Int + result_init_90 = CALL Int_init + instance_91 = ALLOCATE Int + value_92 = LOAD 1 + result_init_93 = CALL Int_init + left_83 = GetAttr result_85 value + right_84 = GetAttr instance_91 value + op_82 = left_83 - right_84 + result_81 = ALLOCATE Int + result_init_94 = CALL Int_init + instance_99 = ALLOCATE Int + value_100 = LOAD 1 + result_init_101 = CALL Int_init + left_97 = GetAttr i_9 value + right_98 = GetAttr instance_99 value + op_96 = left_97 + right_98 + result_95 = ALLOCATE Int + result_init_102 = CALL Int_init + result_80 = VCALL String substr + SetAttr self rest result_80 + i_9 = j_5 + result_30 = j_5 + LABEL label_42 + result_21 = result_30 + GOTO label_43 + LABEL label_38 + result_114 = VCALL String length + left_112 = GetAttr result_114 value + right_113 = GetAttr i_9 value + op_111 = left_112 - right_113 + result_110 = ALLOCATE Int + result_init_115 = CALL Int_init + instance_116 = ALLOCATE Int + value_117 = LOAD 1 + result_init_118 = CALL Int_init + left_108 = GetAttr result_110 value + right_109 = GetAttr instance_116 value + op_107 = left_108 - right_109 + result_106 = ALLOCATE Int + result_init_119 = CALL Int_init + instance_124 = ALLOCATE Int + value_125 = LOAD 1 + result_init_126 = CALL Int_init + left_122 = GetAttr i_9 value + right_123 = GetAttr instance_124 value + op_121 = left_122 + right_123 + result_120 = ALLOCATE Int + result_init_127 = CALL Int_init + result_105 = VCALL String substr + SetAttr self rest result_105 + i_9 = j_5 + result_21 = j_5 + LABEL label_43 + let_result_130 = result_21 + GOTO label_35 + LABEL label_37 + result_10 = LOAD VOID + let_result_131 = result_10 + let_result_132 = let_result_131 + let_result_133 = int_3 + + RETURN let_result_133 +} +function Main_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + + result_0 = CALL Parse_init + + RETURN + result_1 = VCALL Main read_input + SetAttr self g result_1 +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL Main.g + LOCAL result_2 + LOCAL Main.g + + Main.g = GetAttr self g + result_0 = VCALL Graph print_V + Main.g = GetAttr self g + result_2 = VCALL Graph print_E + + RETURN result_2 +} +function BoolOp_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL Object_init + + RETURN +} +function BoolOp.and { + PARAM self + PARAM b1 + PARAM b2 + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + IF b1 GOTO label_44 + instance_1 = ALLOCATE Bool + value_2 = LOAD 0 + result_init_3 = CALL Bool_init + result_0 = instance_1 + GOTO label_45 + LABEL label_44 + result_0 = b2 + LABEL label_45 + + RETURN result_0 +} +function BoolOp.or { + PARAM self + PARAM b1 + PARAM b2 + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + IF b1 GOTO label_46 + result_0 = b2 + GOTO label_47 + LABEL label_46 + instance_1 = ALLOCATE Bool + value_2 = LOAD 1 + result_init_3 = CALL Bool_init + result_0 = instance_1 + LABEL label_47 + + RETURN result_0 +} \ No newline at end of file diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index c1d2531e..f8bafdda 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -921,6 +921,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1084,6 +1086,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1110,6 +1114,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) +li $t0, 0 +sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -1136,6 +1142,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 32($sp) +li $t0, 0 +sw $t0, 36($sp) move $t0, $sp lw $t1, 36($t0) addi $sp, $sp, -4 @@ -1379,6 +1387,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 1 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1639,6 +1649,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1759,6 +1771,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 1 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1940,6 +1954,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -2461,6 +2477,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 64($sp) +li $t0, 0 +sw $t0, 68($sp) move $t0, $sp lw $t1, 68($t0) addi $sp, $sp, -4 @@ -3281,6 +3299,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 368($sp) +li $t0, 0 +sw $t0, 372($sp) move $t0, $sp lw $t1, 372($t0) addi $sp, $sp, -4 @@ -3596,6 +3616,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 488($sp) +li $t0, 0 +sw $t0, 492($sp) move $t0, $sp lw $t1, 492($t0) addi $sp, $sp, -4 @@ -3641,6 +3663,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -3725,6 +3749,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 80($sp) +li $t0, 0 +sw $t0, 84($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 @@ -3851,6 +3877,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 144($sp) +li $t0, 0 +sw $t0, 148($sp) move $t0, $sp lw $t1, 148($t0) addi $sp, $sp, -4 @@ -4263,6 +4291,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 304($sp) +li $t0, 0 +sw $t0, 308($sp) move $t0, $sp lw $t1, 308($t0) addi $sp, $sp, -4 @@ -4297,6 +4327,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -4335,6 +4367,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -5345,6 +5379,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -5390,6 +5426,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 1 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 1f0fab29..0be21c95 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -1472,6 +1472,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 12($sp) +li $t0, 0 +sw $t0, 16($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/hairyscary_test.cil b/tests/codegen/hairyscary_test.cil new file mode 100644 index 00000000..e69de29b diff --git a/tests/codegen/life.cil b/tests/codegen/life.cil new file mode 100644 index 00000000..5780dbb4 --- /dev/null +++ b/tests/codegen/life.cil @@ -0,0 +1,3425 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Board { + attribute rows + attribute columns + attribute board_size + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method size_of_board : Board.size_of_board + method board_init : Board.board_init +} +type CellularAutomaton { + attribute rows + attribute columns + attribute board_size + attribute population_map + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method size_of_board : Board.size_of_board + method board_init : Board.board_init + method init : CellularAutomaton.init + method print : CellularAutomaton.print + method num_cells : CellularAutomaton.num_cells + method cell : CellularAutomaton.cell + method north : CellularAutomaton.north + method south : CellularAutomaton.south + method east : CellularAutomaton.east + method west : CellularAutomaton.west + method northwest : CellularAutomaton.northwest + method northeast : CellularAutomaton.northeast + method southeast : CellularAutomaton.southeast + method southwest : CellularAutomaton.southwest + method neighbors : CellularAutomaton.neighbors + method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution + method evolve : CellularAutomaton.evolve + method option : CellularAutomaton.option + method prompt : CellularAutomaton.prompt + method prompt2 : CellularAutomaton.prompt2 +} +type Main { + attribute rows + attribute columns + attribute board_size + attribute population_map + attribute cells + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method size_of_board : Board.size_of_board + method board_init : Board.board_init + method init : CellularAutomaton.init + method print : CellularAutomaton.print + method num_cells : CellularAutomaton.num_cells + method cell : CellularAutomaton.cell + method north : CellularAutomaton.north + method south : CellularAutomaton.south + method east : CellularAutomaton.east + method west : CellularAutomaton.west + method northwest : CellularAutomaton.northwest + method northeast : CellularAutomaton.northeast + method southeast : CellularAutomaton.southeast + method southwest : CellularAutomaton.southwest + method neighbors : CellularAutomaton.neighbors + method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution + method evolve : CellularAutomaton.evolve + method option : CellularAutomaton.option + method prompt : CellularAutomaton.prompt + method prompt2 : CellularAutomaton.prompt2 + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: +s_4: X +s_5: - +s_6: +Please chose a number: + +s_7: 1: A cross + +s_8: 2: A slash from the upper left to lower right + +s_9: 3: A slash from the upper right to lower left + +s_10: 4: An X + +s_11: 5: A greater than sign + +s_12: 6: A less than sign + +s_13: 7: Two greater than signs + +s_14: 8: Two less than signs + +s_15: 9: A 'V' + +s_16: 10: An inverse 'V' + +s_17: 11: Numbers 9 and 10 combined + +s_18: 12: A full grid + +s_19: 13: A 'T' + +s_20: 14: A plus '+' + +s_21: 15: A 'W' + +s_22: 16: An 'M' + +s_23: 17: An 'E' + +s_24: 18: A '3' + +s_25: 19: An 'O' + +s_26: 20: An '8' + +s_27: 21: An 'S' + +s_28: Your choice => +s_29: +s_30: XXXX X XX X XXXX +s_31: XX X XX X XX X XX X XX +s_32: XX X XX X XX +s_33: XXX X X X X XXXX +s_34: XXXXX X XXXXX X XXXX +s_35: X X X X X X X +s_36: X X X X X X X +s_37: X X XXXXX X X +s_38: XXXXX X X X X +s_39: XXXXXXXXXXXXXXXXXXXXXXXXX +s_40: X X X X X X X X +s_41: X X X X X +s_42: X X X X X +s_43: X XX X X X +s_44: X X X XX X +s_45: X X X X X +s_46: X X X X X +s_47: X X X X X X X X X +s_48: X X X X X +s_49: X X X X X +s_50: XX XXXX XXXX XX +s_51: Would you like to continue with the next generation? + +s_52: Please use lowercase y or n for your answer [y]: +s_53: n +s_54: + + +s_55: Would you like to choose a background pattern? + +s_56: Please use lowercase y or n for your answer [n]: +s_57: y +s_58: Welcome to the Game of Life. + +s_59: There are many initial states to choose from. + + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT msg_0 + type_name_1 = TYPEOF self + PRINT type_name_1 + eol_2 = LOAD s_1 + PRINT eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Board_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + LOCAL instance_4 + LOCAL value_5 + LOCAL result_init_6 + LOCAL instance_7 + LOCAL value_8 + LOCAL result_init_9 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self rows instance_1 + instance_4 = ALLOCATE Int + value_5 = LOAD 0 + result_init_6 = CALL Int_init + SetAttr self columns instance_4 + instance_7 = ALLOCATE Int + value_8 = LOAD 0 + result_init_9 = CALL Int_init + SetAttr self board_size instance_7 +} +function Board.size_of_board { + PARAM self + PARAM initial + + LOCAL result_0 + + result_0 = VCALL String length + + RETURN result_0 +} +function Board.board_init { + PARAM self + PARAM start + + LOCAL result_0 + LOCAL size_1 + LOCAL result_2 + LOCAL result_3 + LOCAL op_4 + LOCAL left_5 + LOCAL right_6 + LOCAL instance_7 + LOCAL value_8 + LOCAL result_init_9 + LOCAL result_init_10 + LOCAL result_11 + LOCAL result_12 + LOCAL op_13 + LOCAL left_14 + LOCAL right_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL result_20 + LOCAL result_21 + LOCAL op_22 + LOCAL left_23 + LOCAL right_24 + LOCAL instance_25 + LOCAL value_26 + LOCAL result_init_27 + LOCAL result_init_28 + LOCAL result_29 + LOCAL result_30 + LOCAL op_31 + LOCAL left_32 + LOCAL right_33 + LOCAL instance_34 + LOCAL value_35 + LOCAL result_init_36 + LOCAL result_init_37 + LOCAL result_38 + LOCAL result_39 + LOCAL op_40 + LOCAL left_41 + LOCAL right_42 + LOCAL instance_43 + LOCAL value_44 + LOCAL result_init_45 + LOCAL result_init_46 + LOCAL result_47 + LOCAL result_48 + LOCAL op_49 + LOCAL left_50 + LOCAL right_51 + LOCAL instance_52 + LOCAL value_53 + LOCAL result_init_54 + LOCAL result_init_55 + LOCAL instance_56 + LOCAL value_57 + LOCAL result_init_58 + LOCAL result_59 + LOCAL instance_60 + LOCAL value_61 + LOCAL result_init_62 + LOCAL result_63 + LOCAL result_64 + LOCAL instance_65 + LOCAL value_66 + LOCAL result_init_67 + LOCAL result_68 + LOCAL instance_69 + LOCAL value_70 + LOCAL result_init_71 + LOCAL result_72 + LOCAL result_73 + LOCAL instance_74 + LOCAL value_75 + LOCAL result_init_76 + LOCAL result_77 + LOCAL instance_78 + LOCAL value_79 + LOCAL result_init_80 + LOCAL result_81 + LOCAL result_82 + LOCAL instance_83 + LOCAL value_84 + LOCAL result_init_85 + LOCAL result_86 + LOCAL instance_87 + LOCAL value_88 + LOCAL result_init_89 + LOCAL result_90 + LOCAL result_91 + LOCAL instance_92 + LOCAL value_93 + LOCAL result_init_94 + LOCAL result_95 + LOCAL instance_96 + LOCAL value_97 + LOCAL result_init_98 + LOCAL result_99 + LOCAL result_100 + LOCAL instance_101 + LOCAL value_102 + LOCAL result_init_103 + LOCAL result_104 + LOCAL instance_105 + LOCAL value_106 + LOCAL result_init_107 + LOCAL result_108 + LOCAL result_109 + LOCAL instance_110 + LOCAL value_111 + LOCAL result_init_112 + LOCAL result_113 + LOCAL instance_114 + LOCAL value_115 + LOCAL result_init_116 + LOCAL result_117 + LOCAL result_118 + LOCAL let_result_119 + + result_0 = VCALL Board size_of_board + size_1 = result_0 + instance_7 = ALLOCATE Int + value_8 = LOAD 15 + result_init_9 = CALL Int_init + left_5 = GetAttr size_1 value + right_6 = GetAttr instance_7 value + op_4 = left_5 = right_6 + result_3 = ALLOCATE Bool + result_init_10 = CALL Bool_init + IF result_3 GOTO label_1 + instance_16 = ALLOCATE Int + value_17 = LOAD 16 + result_init_18 = CALL Int_init + left_14 = GetAttr size_1 value + right_15 = GetAttr instance_16 value + op_13 = left_14 = right_15 + result_12 = ALLOCATE Bool + result_init_19 = CALL Bool_init + IF result_12 GOTO label_2 + instance_25 = ALLOCATE Int + value_26 = LOAD 20 + result_init_27 = CALL Int_init + left_23 = GetAttr size_1 value + right_24 = GetAttr instance_25 value + op_22 = left_23 = right_24 + result_21 = ALLOCATE Bool + result_init_28 = CALL Bool_init + IF result_21 GOTO label_3 + instance_34 = ALLOCATE Int + value_35 = LOAD 21 + result_init_36 = CALL Int_init + left_32 = GetAttr size_1 value + right_33 = GetAttr instance_34 value + op_31 = left_32 = right_33 + result_30 = ALLOCATE Bool + result_init_37 = CALL Bool_init + IF result_30 GOTO label_4 + instance_43 = ALLOCATE Int + value_44 = LOAD 25 + result_init_45 = CALL Int_init + left_41 = GetAttr size_1 value + right_42 = GetAttr instance_43 value + op_40 = left_41 = right_42 + result_39 = ALLOCATE Bool + result_init_46 = CALL Bool_init + IF result_39 GOTO label_5 + instance_52 = ALLOCATE Int + value_53 = LOAD 28 + result_init_54 = CALL Int_init + left_50 = GetAttr size_1 value + right_51 = GetAttr instance_52 value + op_49 = left_50 = right_51 + result_48 = ALLOCATE Bool + result_init_55 = CALL Bool_init + IF result_48 GOTO label_6 + instance_56 = ALLOCATE Int + value_57 = LOAD 5 + result_init_58 = CALL Int_init + SetAttr self rows instance_56 + instance_60 = ALLOCATE Int + value_61 = LOAD 5 + result_init_62 = CALL Int_init + SetAttr self columns instance_60 + SetAttr self board_size size_1 + result_47 = size_1 + GOTO label_7 + LABEL label_6 + instance_65 = ALLOCATE Int + value_66 = LOAD 7 + result_init_67 = CALL Int_init + SetAttr self rows instance_65 + instance_69 = ALLOCATE Int + value_70 = LOAD 4 + result_init_71 = CALL Int_init + SetAttr self columns instance_69 + SetAttr self board_size size_1 + result_47 = size_1 + LABEL label_7 + result_38 = result_47 + GOTO label_8 + LABEL label_5 + instance_74 = ALLOCATE Int + value_75 = LOAD 5 + result_init_76 = CALL Int_init + SetAttr self rows instance_74 + instance_78 = ALLOCATE Int + value_79 = LOAD 5 + result_init_80 = CALL Int_init + SetAttr self columns instance_78 + SetAttr self board_size size_1 + result_38 = size_1 + LABEL label_8 + result_29 = result_38 + GOTO label_9 + LABEL label_4 + instance_83 = ALLOCATE Int + value_84 = LOAD 3 + result_init_85 = CALL Int_init + SetAttr self rows instance_83 + instance_87 = ALLOCATE Int + value_88 = LOAD 7 + result_init_89 = CALL Int_init + SetAttr self columns instance_87 + SetAttr self board_size size_1 + result_29 = size_1 + LABEL label_9 + result_20 = result_29 + GOTO label_10 + LABEL label_3 + instance_92 = ALLOCATE Int + value_93 = LOAD 4 + result_init_94 = CALL Int_init + SetAttr self rows instance_92 + instance_96 = ALLOCATE Int + value_97 = LOAD 5 + result_init_98 = CALL Int_init + SetAttr self columns instance_96 + SetAttr self board_size size_1 + result_20 = size_1 + LABEL label_10 + result_11 = result_20 + GOTO label_11 + LABEL label_2 + instance_101 = ALLOCATE Int + value_102 = LOAD 4 + result_init_103 = CALL Int_init + SetAttr self rows instance_101 + instance_105 = ALLOCATE Int + value_106 = LOAD 4 + result_init_107 = CALL Int_init + SetAttr self columns instance_105 + SetAttr self board_size size_1 + result_11 = size_1 + LABEL label_11 + result_2 = result_11 + GOTO label_12 + LABEL label_1 + instance_110 = ALLOCATE Int + value_111 = LOAD 3 + result_init_112 = CALL Int_init + SetAttr self rows instance_110 + instance_114 = ALLOCATE Int + value_115 = LOAD 5 + result_init_116 = CALL Int_init + SetAttr self columns instance_114 + SetAttr self board_size size_1 + result_2 = size_1 + LABEL label_12 + let_result_119 = self + + RETURN let_result_119 +} +function CellularAutomaton_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = CALL Board_init + + RETURN + instance_1 = ALLOCATE String + value_2 = LOAD empty_str + result_init_3 = CALL String_init + SetAttr self population_map instance_1 +} +function CellularAutomaton.init { + PARAM self + PARAM map + + LOCAL result_0 + LOCAL result_1 + + SetAttr self population_map map + result_1 = VCALL CellularAutomaton board_init + + RETURN self +} +function CellularAutomaton.print { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL i_3 + LOCAL CellularAutomaton.board_size + LOCAL num_5 + LOCAL result_6 + LOCAL internal_7 + LOCAL instance_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL result_17 + LOCAL CellularAutomaton.population_map + LOCAL CellularAutomaton.columns + LOCAL result_20 + LOCAL internal_21 + LOCAL instance_22 + LOCAL result_init_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL CellularAutomaton.columns + LOCAL result_init_29 + LOCAL result_30 + LOCAL result_31 + LOCAL internal_32 + LOCAL instance_33 + LOCAL result_init_34 + LOCAL let_result_35 + LOCAL let_result_36 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + i_3 = instance_0 + CellularAutomaton.board_size = GetAttr self board_size + num_5 = CellularAutomaton.board_size + internal_7 = LOAD s_1 + instance_8 = ALLOCATE String + result_init_9 = CALL String_init + result_6 = VCALL CellularAutomaton out_string + LABEL label_13 + left_13 = GetAttr i_3 value + right_14 = GetAttr num_5 value + op_12 = left_13 < right_14 + result_11 = ALLOCATE Bool + result_init_15 = CALL Bool_init + IF result_11 GOTO label_14 + GOTO label_15 + LABEL label_14 + CellularAutomaton.population_map = GetAttr self population_map + CellularAutomaton.columns = GetAttr self columns + result_17 = VCALL String substr + result_16 = VCALL CellularAutomaton out_string + internal_21 = LOAD s_1 + instance_22 = ALLOCATE String + result_init_23 = CALL String_init + result_20 = VCALL CellularAutomaton out_string + CellularAutomaton.columns = GetAttr self columns + left_26 = GetAttr i_3 value + right_27 = GetAttr CellularAutomaton.columns value + op_25 = left_26 + right_27 + result_24 = ALLOCATE Int + result_init_29 = CALL Int_init + i_3 = result_24 + GOTO label_13 + LABEL label_15 + result_10 = LOAD VOID + internal_32 = LOAD s_1 + instance_33 = ALLOCATE String + result_init_34 = CALL String_init + result_31 = VCALL CellularAutomaton out_string + let_result_35 = self + let_result_36 = let_result_35 + + RETURN let_result_36 +} +function CellularAutomaton.num_cells { + PARAM self + + LOCAL result_0 + LOCAL CellularAutomaton.population_map + + CellularAutomaton.population_map = GetAttr self population_map + result_0 = VCALL String length + + RETURN result_0 +} +function CellularAutomaton.cell { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL CellularAutomaton.board_size + LOCAL instance_10 + LOCAL value_11 + LOCAL result_init_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL CellularAutomaton.population_map + LOCAL instance_17 + LOCAL value_18 + LOCAL result_init_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + + CellularAutomaton.board_size = GetAttr self board_size + instance_10 = ALLOCATE Int + value_11 = LOAD 1 + result_init_12 = CALL Int_init + left_7 = GetAttr CellularAutomaton.board_size value + right_8 = GetAttr instance_10 value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_13 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr position value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_16 + CellularAutomaton.population_map = GetAttr self population_map + instance_17 = ALLOCATE Int + value_18 = LOAD 1 + result_init_19 = CALL Int_init + result_15 = VCALL String substr + result_0 = result_15 + GOTO label_17 + LABEL label_16 + internal_20 = LOAD s_3 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + result_0 = instance_21 + LABEL label_17 + + RETURN result_0 +} +function CellularAutomaton.north { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL CellularAutomaton.columns + LOCAL result_init_10 + LOCAL instance_11 + LOCAL value_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL CellularAutomaton.columns + LOCAL result_init_21 + LOCAL internal_22 + LOCAL instance_23 + LOCAL result_init_24 + + CellularAutomaton.columns = GetAttr self columns + left_7 = GetAttr position value + right_8 = GetAttr CellularAutomaton.columns value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_10 = CALL Int_init + instance_11 = ALLOCATE Int + value_12 = LOAD 0 + result_init_13 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_11 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_18 + CellularAutomaton.columns = GetAttr self columns + left_18 = GetAttr position value + right_19 = GetAttr CellularAutomaton.columns value + op_17 = left_18 - right_19 + result_16 = ALLOCATE Int + result_init_21 = CALL Int_init + result_15 = VCALL CellularAutomaton cell + result_0 = result_15 + GOTO label_19 + LABEL label_18 + internal_22 = LOAD s_3 + instance_23 = ALLOCATE String + result_init_24 = CALL String_init + result_0 = instance_23 + LABEL label_19 + + RETURN result_0 +} +function CellularAutomaton.south { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL CellularAutomaton.board_size + LOCAL result_6 + LOCAL op_7 + LOCAL left_8 + LOCAL right_9 + LOCAL CellularAutomaton.columns + LOCAL result_init_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL CellularAutomaton.columns + LOCAL result_init_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + + CellularAutomaton.board_size = GetAttr self board_size + CellularAutomaton.columns = GetAttr self columns + left_8 = GetAttr position value + right_9 = GetAttr CellularAutomaton.columns value + op_7 = left_8 + right_9 + result_6 = ALLOCATE Int + result_init_11 = CALL Int_init + left_3 = GetAttr CellularAutomaton.board_size value + right_4 = GetAttr result_6 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_12 = CALL Bool_init + IF result_1 GOTO label_20 + CellularAutomaton.columns = GetAttr self columns + left_16 = GetAttr position value + right_17 = GetAttr CellularAutomaton.columns value + op_15 = left_16 + right_17 + result_14 = ALLOCATE Int + result_init_19 = CALL Int_init + result_13 = VCALL CellularAutomaton cell + result_0 = result_13 + GOTO label_21 + LABEL label_20 + internal_20 = LOAD s_3 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + result_0 = instance_21 + LABEL label_21 + + RETURN result_0 +} +function CellularAutomaton.east { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL result_9 + LOCAL op_10 + LOCAL left_11 + LOCAL right_12 + LOCAL result_13 + LOCAL op_14 + LOCAL left_15 + LOCAL right_16 + LOCAL instance_17 + LOCAL value_18 + LOCAL result_init_19 + LOCAL result_init_20 + LOCAL CellularAutomaton.columns + LOCAL result_init_22 + LOCAL CellularAutomaton.columns + LOCAL result_init_24 + LOCAL result_25 + LOCAL op_26 + LOCAL left_27 + LOCAL right_28 + LOCAL instance_29 + LOCAL value_30 + LOCAL result_init_31 + LOCAL result_init_32 + LOCAL result_init_33 + LOCAL result_34 + LOCAL result_35 + LOCAL op_36 + LOCAL left_37 + LOCAL right_38 + LOCAL instance_39 + LOCAL value_40 + LOCAL result_init_41 + LOCAL result_init_42 + LOCAL internal_43 + LOCAL instance_44 + LOCAL result_init_45 + + instance_17 = ALLOCATE Int + value_18 = LOAD 1 + result_init_19 = CALL Int_init + left_15 = GetAttr position value + right_16 = GetAttr instance_17 value + op_14 = left_15 + right_16 + result_13 = ALLOCATE Int + result_init_20 = CALL Int_init + CellularAutomaton.columns = GetAttr self columns + left_11 = GetAttr result_13 value + right_12 = GetAttr CellularAutomaton.columns value + op_10 = left_11 / right_12 + result_9 = ALLOCATE Int + result_init_22 = CALL Int_init + CellularAutomaton.columns = GetAttr self columns + left_7 = GetAttr result_9 value + right_8 = GetAttr CellularAutomaton.columns value + op_6 = left_7 * right_8 + result_5 = ALLOCATE Int + result_init_24 = CALL Int_init + instance_29 = ALLOCATE Int + value_30 = LOAD 1 + result_init_31 = CALL Int_init + left_27 = GetAttr position value + right_28 = GetAttr instance_29 value + op_26 = left_27 + right_28 + result_25 = ALLOCATE Int + result_init_32 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr result_25 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_33 = CALL Bool_init + IF result_1 GOTO label_22 + instance_39 = ALLOCATE Int + value_40 = LOAD 1 + result_init_41 = CALL Int_init + left_37 = GetAttr position value + right_38 = GetAttr instance_39 value + op_36 = left_37 + right_38 + result_35 = ALLOCATE Int + result_init_42 = CALL Int_init + result_34 = VCALL CellularAutomaton cell + result_0 = result_34 + GOTO label_23 + LABEL label_22 + internal_43 = LOAD s_3 + instance_44 = ALLOCATE String + result_init_45 = CALL String_init + result_0 = instance_44 + LABEL label_23 + + RETURN result_0 +} +function CellularAutomaton.west { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL instance_5 + LOCAL value_6 + LOCAL result_init_7 + LOCAL result_init_8 + LOCAL result_9 + LOCAL result_10 + LOCAL op_11 + LOCAL left_12 + LOCAL right_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL result_18 + LOCAL op_19 + LOCAL left_20 + LOCAL right_21 + LOCAL CellularAutomaton.columns + LOCAL result_init_23 + LOCAL CellularAutomaton.columns + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL result_27 + LOCAL result_28 + LOCAL op_29 + LOCAL left_30 + LOCAL right_31 + LOCAL instance_32 + LOCAL value_33 + LOCAL result_init_34 + LOCAL result_init_35 + LOCAL internal_36 + LOCAL instance_37 + LOCAL result_init_38 + LOCAL internal_39 + LOCAL instance_40 + LOCAL result_init_41 + + instance_5 = ALLOCATE Int + value_6 = LOAD 0 + result_init_7 = CALL Int_init + left_3 = GetAttr position value + right_4 = GetAttr instance_5 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_8 = CALL Bool_init + IF result_1 GOTO label_24 + CellularAutomaton.columns = GetAttr self columns + left_20 = GetAttr position value + right_21 = GetAttr CellularAutomaton.columns value + op_19 = left_20 / right_21 + result_18 = ALLOCATE Int + result_init_23 = CALL Int_init + CellularAutomaton.columns = GetAttr self columns + left_16 = GetAttr result_18 value + right_17 = GetAttr CellularAutomaton.columns value + op_15 = left_16 * right_17 + result_14 = ALLOCATE Int + result_init_25 = CALL Int_init + left_12 = GetAttr result_14 value + right_13 = GetAttr position value + op_11 = left_12 = right_13 + result_10 = ALLOCATE Bool + result_init_26 = CALL Bool_init + IF result_10 GOTO label_25 + instance_32 = ALLOCATE Int + value_33 = LOAD 1 + result_init_34 = CALL Int_init + left_30 = GetAttr position value + right_31 = GetAttr instance_32 value + op_29 = left_30 - right_31 + result_28 = ALLOCATE Int + result_init_35 = CALL Int_init + result_27 = VCALL CellularAutomaton cell + result_9 = result_27 + GOTO label_26 + LABEL label_25 + internal_36 = LOAD s_3 + instance_37 = ALLOCATE String + result_init_38 = CALL String_init + result_9 = instance_37 + LABEL label_26 + result_0 = result_9 + GOTO label_27 + LABEL label_24 + internal_39 = LOAD s_3 + instance_40 = ALLOCATE String + result_init_41 = CALL String_init + result_0 = instance_40 + LABEL label_27 + + RETURN result_0 +} +function CellularAutomaton.northwest { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL CellularAutomaton.columns + LOCAL result_init_10 + LOCAL instance_11 + LOCAL value_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL result_20 + LOCAL op_21 + LOCAL left_22 + LOCAL right_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL CellularAutomaton.columns + LOCAL result_init_29 + LOCAL CellularAutomaton.columns + LOCAL result_init_31 + LOCAL result_init_32 + LOCAL result_33 + LOCAL result_34 + LOCAL op_35 + LOCAL left_36 + LOCAL right_37 + LOCAL instance_38 + LOCAL value_39 + LOCAL result_init_40 + LOCAL result_init_41 + LOCAL internal_42 + LOCAL instance_43 + LOCAL result_init_44 + LOCAL internal_45 + LOCAL instance_46 + LOCAL result_init_47 + + CellularAutomaton.columns = GetAttr self columns + left_7 = GetAttr position value + right_8 = GetAttr CellularAutomaton.columns value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_10 = CALL Int_init + instance_11 = ALLOCATE Int + value_12 = LOAD 0 + result_init_13 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_11 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_28 + CellularAutomaton.columns = GetAttr self columns + left_26 = GetAttr position value + right_27 = GetAttr CellularAutomaton.columns value + op_25 = left_26 / right_27 + result_24 = ALLOCATE Int + result_init_29 = CALL Int_init + CellularAutomaton.columns = GetAttr self columns + left_22 = GetAttr result_24 value + right_23 = GetAttr CellularAutomaton.columns value + op_21 = left_22 * right_23 + result_20 = ALLOCATE Int + result_init_31 = CALL Int_init + left_18 = GetAttr result_20 value + right_19 = GetAttr position value + op_17 = left_18 = right_19 + result_16 = ALLOCATE Bool + result_init_32 = CALL Bool_init + IF result_16 GOTO label_29 + instance_38 = ALLOCATE Int + value_39 = LOAD 1 + result_init_40 = CALL Int_init + left_36 = GetAttr position value + right_37 = GetAttr instance_38 value + op_35 = left_36 - right_37 + result_34 = ALLOCATE Int + result_init_41 = CALL Int_init + result_33 = VCALL CellularAutomaton north + result_15 = result_33 + GOTO label_30 + LABEL label_29 + internal_42 = LOAD s_3 + instance_43 = ALLOCATE String + result_init_44 = CALL String_init + result_15 = instance_43 + LABEL label_30 + result_0 = result_15 + GOTO label_31 + LABEL label_28 + internal_45 = LOAD s_3 + instance_46 = ALLOCATE String + result_init_47 = CALL String_init + result_0 = instance_46 + LABEL label_31 + + RETURN result_0 +} +function CellularAutomaton.northeast { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL op_6 + LOCAL left_7 + LOCAL right_8 + LOCAL CellularAutomaton.columns + LOCAL result_init_10 + LOCAL instance_11 + LOCAL value_12 + LOCAL result_init_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL result_20 + LOCAL op_21 + LOCAL left_22 + LOCAL right_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL result_28 + LOCAL op_29 + LOCAL left_30 + LOCAL right_31 + LOCAL instance_32 + LOCAL value_33 + LOCAL result_init_34 + LOCAL result_init_35 + LOCAL CellularAutomaton.columns + LOCAL result_init_37 + LOCAL CellularAutomaton.columns + LOCAL result_init_39 + LOCAL result_40 + LOCAL op_41 + LOCAL left_42 + LOCAL right_43 + LOCAL instance_44 + LOCAL value_45 + LOCAL result_init_46 + LOCAL result_init_47 + LOCAL result_init_48 + LOCAL result_49 + LOCAL result_50 + LOCAL op_51 + LOCAL left_52 + LOCAL right_53 + LOCAL instance_54 + LOCAL value_55 + LOCAL result_init_56 + LOCAL result_init_57 + LOCAL internal_58 + LOCAL instance_59 + LOCAL result_init_60 + LOCAL internal_61 + LOCAL instance_62 + LOCAL result_init_63 + + CellularAutomaton.columns = GetAttr self columns + left_7 = GetAttr position value + right_8 = GetAttr CellularAutomaton.columns value + op_6 = left_7 - right_8 + result_5 = ALLOCATE Int + result_init_10 = CALL Int_init + instance_11 = ALLOCATE Int + value_12 = LOAD 0 + result_init_13 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_11 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_14 = CALL Bool_init + IF result_1 GOTO label_32 + instance_32 = ALLOCATE Int + value_33 = LOAD 1 + result_init_34 = CALL Int_init + left_30 = GetAttr position value + right_31 = GetAttr instance_32 value + op_29 = left_30 + right_31 + result_28 = ALLOCATE Int + result_init_35 = CALL Int_init + CellularAutomaton.columns = GetAttr self columns + left_26 = GetAttr result_28 value + right_27 = GetAttr CellularAutomaton.columns value + op_25 = left_26 / right_27 + result_24 = ALLOCATE Int + result_init_37 = CALL Int_init + CellularAutomaton.columns = GetAttr self columns + left_22 = GetAttr result_24 value + right_23 = GetAttr CellularAutomaton.columns value + op_21 = left_22 * right_23 + result_20 = ALLOCATE Int + result_init_39 = CALL Int_init + instance_44 = ALLOCATE Int + value_45 = LOAD 1 + result_init_46 = CALL Int_init + left_42 = GetAttr position value + right_43 = GetAttr instance_44 value + op_41 = left_42 + right_43 + result_40 = ALLOCATE Int + result_init_47 = CALL Int_init + left_18 = GetAttr result_20 value + right_19 = GetAttr result_40 value + op_17 = left_18 = right_19 + result_16 = ALLOCATE Bool + result_init_48 = CALL Bool_init + IF result_16 GOTO label_33 + instance_54 = ALLOCATE Int + value_55 = LOAD 1 + result_init_56 = CALL Int_init + left_52 = GetAttr position value + right_53 = GetAttr instance_54 value + op_51 = left_52 + right_53 + result_50 = ALLOCATE Int + result_init_57 = CALL Int_init + result_49 = VCALL CellularAutomaton north + result_15 = result_49 + GOTO label_34 + LABEL label_33 + internal_58 = LOAD s_3 + instance_59 = ALLOCATE String + result_init_60 = CALL String_init + result_15 = instance_59 + LABEL label_34 + result_0 = result_15 + GOTO label_35 + LABEL label_32 + internal_61 = LOAD s_3 + instance_62 = ALLOCATE String + result_init_63 = CALL String_init + result_0 = instance_62 + LABEL label_35 + + RETURN result_0 +} +function CellularAutomaton.southeast { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL CellularAutomaton.board_size + LOCAL result_6 + LOCAL op_7 + LOCAL left_8 + LOCAL right_9 + LOCAL CellularAutomaton.columns + LOCAL result_init_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL result_18 + LOCAL op_19 + LOCAL left_20 + LOCAL right_21 + LOCAL result_22 + LOCAL op_23 + LOCAL left_24 + LOCAL right_25 + LOCAL result_26 + LOCAL op_27 + LOCAL left_28 + LOCAL right_29 + LOCAL instance_30 + LOCAL value_31 + LOCAL result_init_32 + LOCAL result_init_33 + LOCAL CellularAutomaton.columns + LOCAL result_init_35 + LOCAL CellularAutomaton.columns + LOCAL result_init_37 + LOCAL result_38 + LOCAL op_39 + LOCAL left_40 + LOCAL right_41 + LOCAL instance_42 + LOCAL value_43 + LOCAL result_init_44 + LOCAL result_init_45 + LOCAL result_init_46 + LOCAL result_47 + LOCAL result_48 + LOCAL op_49 + LOCAL left_50 + LOCAL right_51 + LOCAL instance_52 + LOCAL value_53 + LOCAL result_init_54 + LOCAL result_init_55 + LOCAL internal_56 + LOCAL instance_57 + LOCAL result_init_58 + LOCAL internal_59 + LOCAL instance_60 + LOCAL result_init_61 + + CellularAutomaton.board_size = GetAttr self board_size + CellularAutomaton.columns = GetAttr self columns + left_8 = GetAttr position value + right_9 = GetAttr CellularAutomaton.columns value + op_7 = left_8 + right_9 + result_6 = ALLOCATE Int + result_init_11 = CALL Int_init + left_3 = GetAttr CellularAutomaton.board_size value + right_4 = GetAttr result_6 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_12 = CALL Bool_init + IF result_1 GOTO label_36 + instance_30 = ALLOCATE Int + value_31 = LOAD 1 + result_init_32 = CALL Int_init + left_28 = GetAttr position value + right_29 = GetAttr instance_30 value + op_27 = left_28 + right_29 + result_26 = ALLOCATE Int + result_init_33 = CALL Int_init + CellularAutomaton.columns = GetAttr self columns + left_24 = GetAttr result_26 value + right_25 = GetAttr CellularAutomaton.columns value + op_23 = left_24 / right_25 + result_22 = ALLOCATE Int + result_init_35 = CALL Int_init + CellularAutomaton.columns = GetAttr self columns + left_20 = GetAttr result_22 value + right_21 = GetAttr CellularAutomaton.columns value + op_19 = left_20 * right_21 + result_18 = ALLOCATE Int + result_init_37 = CALL Int_init + instance_42 = ALLOCATE Int + value_43 = LOAD 1 + result_init_44 = CALL Int_init + left_40 = GetAttr position value + right_41 = GetAttr instance_42 value + op_39 = left_40 + right_41 + result_38 = ALLOCATE Int + result_init_45 = CALL Int_init + left_16 = GetAttr result_18 value + right_17 = GetAttr result_38 value + op_15 = left_16 = right_17 + result_14 = ALLOCATE Bool + result_init_46 = CALL Bool_init + IF result_14 GOTO label_37 + instance_52 = ALLOCATE Int + value_53 = LOAD 1 + result_init_54 = CALL Int_init + left_50 = GetAttr position value + right_51 = GetAttr instance_52 value + op_49 = left_50 + right_51 + result_48 = ALLOCATE Int + result_init_55 = CALL Int_init + result_47 = VCALL CellularAutomaton south + result_13 = result_47 + GOTO label_38 + LABEL label_37 + internal_56 = LOAD s_3 + instance_57 = ALLOCATE String + result_init_58 = CALL String_init + result_13 = instance_57 + LABEL label_38 + result_0 = result_13 + GOTO label_39 + LABEL label_36 + internal_59 = LOAD s_3 + instance_60 = ALLOCATE String + result_init_61 = CALL String_init + result_0 = instance_60 + LABEL label_39 + + RETURN result_0 +} +function CellularAutomaton.southwest { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL CellularAutomaton.board_size + LOCAL result_6 + LOCAL op_7 + LOCAL left_8 + LOCAL right_9 + LOCAL CellularAutomaton.columns + LOCAL result_init_11 + LOCAL result_init_12 + LOCAL result_13 + LOCAL result_14 + LOCAL op_15 + LOCAL left_16 + LOCAL right_17 + LOCAL result_18 + LOCAL op_19 + LOCAL left_20 + LOCAL right_21 + LOCAL result_22 + LOCAL op_23 + LOCAL left_24 + LOCAL right_25 + LOCAL CellularAutomaton.columns + LOCAL result_init_27 + LOCAL CellularAutomaton.columns + LOCAL result_init_29 + LOCAL result_init_30 + LOCAL result_31 + LOCAL result_32 + LOCAL op_33 + LOCAL left_34 + LOCAL right_35 + LOCAL instance_36 + LOCAL value_37 + LOCAL result_init_38 + LOCAL result_init_39 + LOCAL internal_40 + LOCAL instance_41 + LOCAL result_init_42 + LOCAL internal_43 + LOCAL instance_44 + LOCAL result_init_45 + + CellularAutomaton.board_size = GetAttr self board_size + CellularAutomaton.columns = GetAttr self columns + left_8 = GetAttr position value + right_9 = GetAttr CellularAutomaton.columns value + op_7 = left_8 + right_9 + result_6 = ALLOCATE Int + result_init_11 = CALL Int_init + left_3 = GetAttr CellularAutomaton.board_size value + right_4 = GetAttr result_6 value + op_2 = left_3 < right_4 + result_1 = ALLOCATE Bool + result_init_12 = CALL Bool_init + IF result_1 GOTO label_40 + CellularAutomaton.columns = GetAttr self columns + left_24 = GetAttr position value + right_25 = GetAttr CellularAutomaton.columns value + op_23 = left_24 / right_25 + result_22 = ALLOCATE Int + result_init_27 = CALL Int_init + CellularAutomaton.columns = GetAttr self columns + left_20 = GetAttr result_22 value + right_21 = GetAttr CellularAutomaton.columns value + op_19 = left_20 * right_21 + result_18 = ALLOCATE Int + result_init_29 = CALL Int_init + left_16 = GetAttr result_18 value + right_17 = GetAttr position value + op_15 = left_16 = right_17 + result_14 = ALLOCATE Bool + result_init_30 = CALL Bool_init + IF result_14 GOTO label_41 + instance_36 = ALLOCATE Int + value_37 = LOAD 1 + result_init_38 = CALL Int_init + left_34 = GetAttr position value + right_35 = GetAttr instance_36 value + op_33 = left_34 - right_35 + result_32 = ALLOCATE Int + result_init_39 = CALL Int_init + result_31 = VCALL CellularAutomaton south + result_13 = result_31 + GOTO label_42 + LABEL label_41 + internal_40 = LOAD s_3 + instance_41 = ALLOCATE String + result_init_42 = CALL String_init + result_13 = instance_41 + LABEL label_42 + result_0 = result_13 + GOTO label_43 + LABEL label_40 + internal_43 = LOAD s_3 + instance_44 = ALLOCATE String + result_init_45 = CALL String_init + result_0 = instance_44 + LABEL label_43 + + RETURN result_0 +} +function CellularAutomaton.neighbors { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL op_1 + LOCAL left_2 + LOCAL right_3 + LOCAL result_4 + LOCAL op_5 + LOCAL left_6 + LOCAL right_7 + LOCAL result_8 + LOCAL op_9 + LOCAL left_10 + LOCAL right_11 + LOCAL result_12 + LOCAL op_13 + LOCAL left_14 + LOCAL right_15 + LOCAL result_16 + LOCAL op_17 + LOCAL left_18 + LOCAL right_19 + LOCAL result_20 + LOCAL op_21 + LOCAL left_22 + LOCAL right_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL result_28 + LOCAL result_29 + LOCAL op_30 + LOCAL left_31 + LOCAL right_32 + LOCAL result_33 + LOCAL internal_34 + LOCAL instance_35 + LOCAL result_init_36 + LOCAL result_init_37 + LOCAL instance_38 + LOCAL value_39 + LOCAL result_init_40 + LOCAL instance_41 + LOCAL value_42 + LOCAL result_init_43 + LOCAL result_44 + LOCAL result_45 + LOCAL op_46 + LOCAL left_47 + LOCAL right_48 + LOCAL result_49 + LOCAL internal_50 + LOCAL instance_51 + LOCAL result_init_52 + LOCAL result_init_53 + LOCAL instance_54 + LOCAL value_55 + LOCAL result_init_56 + LOCAL instance_57 + LOCAL value_58 + LOCAL result_init_59 + LOCAL result_init_60 + LOCAL result_61 + LOCAL result_62 + LOCAL op_63 + LOCAL left_64 + LOCAL right_65 + LOCAL result_66 + LOCAL internal_67 + LOCAL instance_68 + LOCAL result_init_69 + LOCAL result_init_70 + LOCAL instance_71 + LOCAL value_72 + LOCAL result_init_73 + LOCAL instance_74 + LOCAL value_75 + LOCAL result_init_76 + LOCAL result_init_77 + LOCAL result_78 + LOCAL result_79 + LOCAL op_80 + LOCAL left_81 + LOCAL right_82 + LOCAL result_83 + LOCAL internal_84 + LOCAL instance_85 + LOCAL result_init_86 + LOCAL result_init_87 + LOCAL instance_88 + LOCAL value_89 + LOCAL result_init_90 + LOCAL instance_91 + LOCAL value_92 + LOCAL result_init_93 + LOCAL result_init_94 + LOCAL result_95 + LOCAL result_96 + LOCAL op_97 + LOCAL left_98 + LOCAL right_99 + LOCAL result_100 + LOCAL internal_101 + LOCAL instance_102 + LOCAL result_init_103 + LOCAL result_init_104 + LOCAL instance_105 + LOCAL value_106 + LOCAL result_init_107 + LOCAL instance_108 + LOCAL value_109 + LOCAL result_init_110 + LOCAL result_init_111 + LOCAL result_112 + LOCAL result_113 + LOCAL op_114 + LOCAL left_115 + LOCAL right_116 + LOCAL result_117 + LOCAL internal_118 + LOCAL instance_119 + LOCAL result_init_120 + LOCAL result_init_121 + LOCAL instance_122 + LOCAL value_123 + LOCAL result_init_124 + LOCAL instance_125 + LOCAL value_126 + LOCAL result_init_127 + LOCAL result_init_128 + LOCAL result_129 + LOCAL result_130 + LOCAL op_131 + LOCAL left_132 + LOCAL right_133 + LOCAL result_134 + LOCAL internal_135 + LOCAL instance_136 + LOCAL result_init_137 + LOCAL result_init_138 + LOCAL instance_139 + LOCAL value_140 + LOCAL result_init_141 + LOCAL instance_142 + LOCAL value_143 + LOCAL result_init_144 + LOCAL result_init_145 + LOCAL result_146 + LOCAL result_147 + LOCAL op_148 + LOCAL left_149 + LOCAL right_150 + LOCAL result_151 + LOCAL internal_152 + LOCAL instance_153 + LOCAL result_init_154 + LOCAL result_init_155 + LOCAL instance_156 + LOCAL value_157 + LOCAL result_init_158 + LOCAL instance_159 + LOCAL value_160 + LOCAL result_init_161 + LOCAL result_init_162 + + result_33 = VCALL CellularAutomaton north + internal_34 = LOAD s_4 + instance_35 = ALLOCATE String + result_init_36 = CALL String_init + op_30 = CALL String_equals + result_29 = ALLOCATE Bool + result_init_37 = CALL Bool_init + IF result_29 GOTO label_44 + instance_38 = ALLOCATE Int + value_39 = LOAD 0 + result_init_40 = CALL Int_init + result_28 = instance_38 + GOTO label_45 + LABEL label_44 + instance_41 = ALLOCATE Int + value_42 = LOAD 1 + result_init_43 = CALL Int_init + result_28 = instance_41 + LABEL label_45 + result_49 = VCALL CellularAutomaton south + internal_50 = LOAD s_4 + instance_51 = ALLOCATE String + result_init_52 = CALL String_init + op_46 = CALL String_equals + result_45 = ALLOCATE Bool + result_init_53 = CALL Bool_init + IF result_45 GOTO label_46 + instance_54 = ALLOCATE Int + value_55 = LOAD 0 + result_init_56 = CALL Int_init + result_44 = instance_54 + GOTO label_47 + LABEL label_46 + instance_57 = ALLOCATE Int + value_58 = LOAD 1 + result_init_59 = CALL Int_init + result_44 = instance_57 + LABEL label_47 + left_26 = GetAttr result_28 value + right_27 = GetAttr result_44 value + op_25 = left_26 + right_27 + result_24 = ALLOCATE Int + result_init_60 = CALL Int_init + result_66 = VCALL CellularAutomaton east + internal_67 = LOAD s_4 + instance_68 = ALLOCATE String + result_init_69 = CALL String_init + op_63 = CALL String_equals + result_62 = ALLOCATE Bool + result_init_70 = CALL Bool_init + IF result_62 GOTO label_48 + instance_71 = ALLOCATE Int + value_72 = LOAD 0 + result_init_73 = CALL Int_init + result_61 = instance_71 + GOTO label_49 + LABEL label_48 + instance_74 = ALLOCATE Int + value_75 = LOAD 1 + result_init_76 = CALL Int_init + result_61 = instance_74 + LABEL label_49 + left_22 = GetAttr result_24 value + right_23 = GetAttr result_61 value + op_21 = left_22 + right_23 + result_20 = ALLOCATE Int + result_init_77 = CALL Int_init + result_83 = VCALL CellularAutomaton west + internal_84 = LOAD s_4 + instance_85 = ALLOCATE String + result_init_86 = CALL String_init + op_80 = CALL String_equals + result_79 = ALLOCATE Bool + result_init_87 = CALL Bool_init + IF result_79 GOTO label_50 + instance_88 = ALLOCATE Int + value_89 = LOAD 0 + result_init_90 = CALL Int_init + result_78 = instance_88 + GOTO label_51 + LABEL label_50 + instance_91 = ALLOCATE Int + value_92 = LOAD 1 + result_init_93 = CALL Int_init + result_78 = instance_91 + LABEL label_51 + left_18 = GetAttr result_20 value + right_19 = GetAttr result_78 value + op_17 = left_18 + right_19 + result_16 = ALLOCATE Int + result_init_94 = CALL Int_init + result_100 = VCALL CellularAutomaton northeast + internal_101 = LOAD s_4 + instance_102 = ALLOCATE String + result_init_103 = CALL String_init + op_97 = CALL String_equals + result_96 = ALLOCATE Bool + result_init_104 = CALL Bool_init + IF result_96 GOTO label_52 + instance_105 = ALLOCATE Int + value_106 = LOAD 0 + result_init_107 = CALL Int_init + result_95 = instance_105 + GOTO label_53 + LABEL label_52 + instance_108 = ALLOCATE Int + value_109 = LOAD 1 + result_init_110 = CALL Int_init + result_95 = instance_108 + LABEL label_53 + left_14 = GetAttr result_16 value + right_15 = GetAttr result_95 value + op_13 = left_14 + right_15 + result_12 = ALLOCATE Int + result_init_111 = CALL Int_init + result_117 = VCALL CellularAutomaton northwest + internal_118 = LOAD s_4 + instance_119 = ALLOCATE String + result_init_120 = CALL String_init + op_114 = CALL String_equals + result_113 = ALLOCATE Bool + result_init_121 = CALL Bool_init + IF result_113 GOTO label_54 + instance_122 = ALLOCATE Int + value_123 = LOAD 0 + result_init_124 = CALL Int_init + result_112 = instance_122 + GOTO label_55 + LABEL label_54 + instance_125 = ALLOCATE Int + value_126 = LOAD 1 + result_init_127 = CALL Int_init + result_112 = instance_125 + LABEL label_55 + left_10 = GetAttr result_12 value + right_11 = GetAttr result_112 value + op_9 = left_10 + right_11 + result_8 = ALLOCATE Int + result_init_128 = CALL Int_init + result_134 = VCALL CellularAutomaton southeast + internal_135 = LOAD s_4 + instance_136 = ALLOCATE String + result_init_137 = CALL String_init + op_131 = CALL String_equals + result_130 = ALLOCATE Bool + result_init_138 = CALL Bool_init + IF result_130 GOTO label_56 + instance_139 = ALLOCATE Int + value_140 = LOAD 0 + result_init_141 = CALL Int_init + result_129 = instance_139 + GOTO label_57 + LABEL label_56 + instance_142 = ALLOCATE Int + value_143 = LOAD 1 + result_init_144 = CALL Int_init + result_129 = instance_142 + LABEL label_57 + left_6 = GetAttr result_8 value + right_7 = GetAttr result_129 value + op_5 = left_6 + right_7 + result_4 = ALLOCATE Int + result_init_145 = CALL Int_init + result_151 = VCALL CellularAutomaton southwest + internal_152 = LOAD s_4 + instance_153 = ALLOCATE String + result_init_154 = CALL String_init + op_148 = CALL String_equals + result_147 = ALLOCATE Bool + result_init_155 = CALL Bool_init + IF result_147 GOTO label_58 + instance_156 = ALLOCATE Int + value_157 = LOAD 0 + result_init_158 = CALL Int_init + result_146 = instance_156 + GOTO label_59 + LABEL label_58 + instance_159 = ALLOCATE Int + value_160 = LOAD 1 + result_init_161 = CALL Int_init + result_146 = instance_159 + LABEL label_59 + left_2 = GetAttr result_4 value + right_3 = GetAttr result_146 value + op_1 = left_2 + right_3 + result_0 = ALLOCATE Int + result_init_162 = CALL Int_init + + RETURN result_0 +} +function CellularAutomaton.cell_at_next_evolution { + PARAM self + PARAM position + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + LOCAL result_23 + LOCAL result_24 + LOCAL op_25 + LOCAL left_26 + LOCAL right_27 + LOCAL result_28 + LOCAL internal_29 + LOCAL instance_30 + LOCAL result_init_31 + LOCAL result_init_32 + LOCAL internal_33 + LOCAL instance_34 + LOCAL result_init_35 + LOCAL internal_36 + LOCAL instance_37 + LOCAL result_init_38 + LOCAL internal_39 + LOCAL instance_40 + LOCAL result_init_41 + + result_5 = VCALL CellularAutomaton neighbors + instance_6 = ALLOCATE Int + value_7 = LOAD 3 + result_init_8 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_1 GOTO label_60 + result_15 = VCALL CellularAutomaton neighbors + instance_16 = ALLOCATE Int + value_17 = LOAD 2 + result_init_18 = CALL Int_init + left_13 = GetAttr result_15 value + right_14 = GetAttr instance_16 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_19 = CALL Bool_init + IF result_11 GOTO label_61 + internal_20 = LOAD s_5 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + result_10 = instance_21 + GOTO label_62 + LABEL label_61 + result_28 = VCALL CellularAutomaton cell + internal_29 = LOAD s_4 + instance_30 = ALLOCATE String + result_init_31 = CALL String_init + op_25 = CALL String_equals + result_24 = ALLOCATE Bool + result_init_32 = CALL Bool_init + IF result_24 GOTO label_63 + internal_33 = LOAD s_5 + instance_34 = ALLOCATE String + result_init_35 = CALL String_init + result_23 = instance_34 + GOTO label_64 + LABEL label_63 + internal_36 = LOAD s_4 + instance_37 = ALLOCATE String + result_init_38 = CALL String_init + result_23 = instance_37 + LABEL label_64 + result_10 = result_23 + LABEL label_62 + result_0 = result_10 + GOTO label_65 + LABEL label_60 + internal_39 = LOAD s_4 + instance_40 = ALLOCATE String + result_init_41 = CALL String_init + result_0 = instance_40 + LABEL label_65 + + RETURN result_0 +} +function CellularAutomaton.evolve { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL position_3 + LOCAL result_4 + LOCAL num_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL temp_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL result_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL instance_23 + LOCAL value_24 + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL result_27 + LOCAL result_28 + LOCAL let_result_29 + LOCAL let_result_30 + LOCAL let_result_31 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + position_3 = instance_0 + result_4 = VCALL CellularAutomaton num_cells + num_5 = result_4 + instance_6 = ALLOCATE String + value_7 = LOAD empty_str + result_init_8 = CALL String_init + temp_9 = instance_6 + LABEL label_66 + left_13 = GetAttr position_3 value + right_14 = GetAttr num_5 value + op_12 = left_13 < right_14 + result_11 = ALLOCATE Bool + result_init_15 = CALL Bool_init + IF result_11 GOTO label_67 + GOTO label_68 + LABEL label_67 + result_17 = VCALL CellularAutomaton cell_at_next_evolution + result_16 = VCALL String concat + temp_9 = result_16 + instance_23 = ALLOCATE Int + value_24 = LOAD 1 + result_init_25 = CALL Int_init + left_21 = GetAttr position_3 value + right_22 = GetAttr instance_23 value + op_20 = left_21 + right_22 + result_19 = ALLOCATE Int + result_init_26 = CALL Int_init + position_3 = result_19 + GOTO label_66 + LABEL label_68 + result_10 = LOAD VOID + SetAttr self population_map temp_9 + let_result_29 = self + let_result_30 = let_result_29 + let_result_31 = let_result_30 + + RETURN let_result_31 +} +function CellularAutomaton.option { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL num_3 + LOCAL result_4 + LOCAL internal_5 + LOCAL instance_6 + LOCAL result_init_7 + LOCAL result_8 + LOCAL internal_9 + LOCAL instance_10 + LOCAL result_init_11 + LOCAL result_12 + LOCAL internal_13 + LOCAL instance_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL internal_17 + LOCAL instance_18 + LOCAL result_init_19 + LOCAL result_20 + LOCAL internal_21 + LOCAL instance_22 + LOCAL result_init_23 + LOCAL result_24 + LOCAL internal_25 + LOCAL instance_26 + LOCAL result_init_27 + LOCAL result_28 + LOCAL internal_29 + LOCAL instance_30 + LOCAL result_init_31 + LOCAL result_32 + LOCAL internal_33 + LOCAL instance_34 + LOCAL result_init_35 + LOCAL result_36 + LOCAL internal_37 + LOCAL instance_38 + LOCAL result_init_39 + LOCAL result_40 + LOCAL internal_41 + LOCAL instance_42 + LOCAL result_init_43 + LOCAL result_44 + LOCAL internal_45 + LOCAL instance_46 + LOCAL result_init_47 + LOCAL result_48 + LOCAL internal_49 + LOCAL instance_50 + LOCAL result_init_51 + LOCAL result_52 + LOCAL internal_53 + LOCAL instance_54 + LOCAL result_init_55 + LOCAL result_56 + LOCAL internal_57 + LOCAL instance_58 + LOCAL result_init_59 + LOCAL result_60 + LOCAL internal_61 + LOCAL instance_62 + LOCAL result_init_63 + LOCAL result_64 + LOCAL internal_65 + LOCAL instance_66 + LOCAL result_init_67 + LOCAL result_68 + LOCAL internal_69 + LOCAL instance_70 + LOCAL result_init_71 + LOCAL result_72 + LOCAL internal_73 + LOCAL instance_74 + LOCAL result_init_75 + LOCAL result_76 + LOCAL internal_77 + LOCAL instance_78 + LOCAL result_init_79 + LOCAL result_80 + LOCAL internal_81 + LOCAL instance_82 + LOCAL result_init_83 + LOCAL result_84 + LOCAL internal_85 + LOCAL instance_86 + LOCAL result_init_87 + LOCAL result_88 + LOCAL internal_89 + LOCAL instance_90 + LOCAL result_init_91 + LOCAL result_92 + LOCAL internal_93 + LOCAL instance_94 + LOCAL result_init_95 + LOCAL result_96 + LOCAL result_97 + LOCAL result_98 + LOCAL internal_99 + LOCAL instance_100 + LOCAL result_init_101 + LOCAL result_102 + LOCAL result_103 + LOCAL op_104 + LOCAL left_105 + LOCAL right_106 + LOCAL instance_107 + LOCAL value_108 + LOCAL result_init_109 + LOCAL result_init_110 + LOCAL result_111 + LOCAL result_112 + LOCAL op_113 + LOCAL left_114 + LOCAL right_115 + LOCAL instance_116 + LOCAL value_117 + LOCAL result_init_118 + LOCAL result_init_119 + LOCAL result_120 + LOCAL result_121 + LOCAL op_122 + LOCAL left_123 + LOCAL right_124 + LOCAL instance_125 + LOCAL value_126 + LOCAL result_init_127 + LOCAL result_init_128 + LOCAL result_129 + LOCAL result_130 + LOCAL op_131 + LOCAL left_132 + LOCAL right_133 + LOCAL instance_134 + LOCAL value_135 + LOCAL result_init_136 + LOCAL result_init_137 + LOCAL result_138 + LOCAL result_139 + LOCAL op_140 + LOCAL left_141 + LOCAL right_142 + LOCAL instance_143 + LOCAL value_144 + LOCAL result_init_145 + LOCAL result_init_146 + LOCAL result_147 + LOCAL result_148 + LOCAL op_149 + LOCAL left_150 + LOCAL right_151 + LOCAL instance_152 + LOCAL value_153 + LOCAL result_init_154 + LOCAL result_init_155 + LOCAL result_156 + LOCAL result_157 + LOCAL op_158 + LOCAL left_159 + LOCAL right_160 + LOCAL instance_161 + LOCAL value_162 + LOCAL result_init_163 + LOCAL result_init_164 + LOCAL result_165 + LOCAL result_166 + LOCAL op_167 + LOCAL left_168 + LOCAL right_169 + LOCAL instance_170 + LOCAL value_171 + LOCAL result_init_172 + LOCAL result_init_173 + LOCAL result_174 + LOCAL result_175 + LOCAL op_176 + LOCAL left_177 + LOCAL right_178 + LOCAL instance_179 + LOCAL value_180 + LOCAL result_init_181 + LOCAL result_init_182 + LOCAL result_183 + LOCAL result_184 + LOCAL op_185 + LOCAL left_186 + LOCAL right_187 + LOCAL instance_188 + LOCAL value_189 + LOCAL result_init_190 + LOCAL result_init_191 + LOCAL result_192 + LOCAL result_193 + LOCAL op_194 + LOCAL left_195 + LOCAL right_196 + LOCAL instance_197 + LOCAL value_198 + LOCAL result_init_199 + LOCAL result_init_200 + LOCAL result_201 + LOCAL result_202 + LOCAL op_203 + LOCAL left_204 + LOCAL right_205 + LOCAL instance_206 + LOCAL value_207 + LOCAL result_init_208 + LOCAL result_init_209 + LOCAL result_210 + LOCAL result_211 + LOCAL op_212 + LOCAL left_213 + LOCAL right_214 + LOCAL instance_215 + LOCAL value_216 + LOCAL result_init_217 + LOCAL result_init_218 + LOCAL result_219 + LOCAL result_220 + LOCAL op_221 + LOCAL left_222 + LOCAL right_223 + LOCAL instance_224 + LOCAL value_225 + LOCAL result_init_226 + LOCAL result_init_227 + LOCAL result_228 + LOCAL result_229 + LOCAL op_230 + LOCAL left_231 + LOCAL right_232 + LOCAL instance_233 + LOCAL value_234 + LOCAL result_init_235 + LOCAL result_init_236 + LOCAL result_237 + LOCAL result_238 + LOCAL op_239 + LOCAL left_240 + LOCAL right_241 + LOCAL instance_242 + LOCAL value_243 + LOCAL result_init_244 + LOCAL result_init_245 + LOCAL result_246 + LOCAL result_247 + LOCAL op_248 + LOCAL left_249 + LOCAL right_250 + LOCAL instance_251 + LOCAL value_252 + LOCAL result_init_253 + LOCAL result_init_254 + LOCAL result_255 + LOCAL result_256 + LOCAL op_257 + LOCAL left_258 + LOCAL right_259 + LOCAL instance_260 + LOCAL value_261 + LOCAL result_init_262 + LOCAL result_init_263 + LOCAL result_264 + LOCAL result_265 + LOCAL op_266 + LOCAL left_267 + LOCAL right_268 + LOCAL instance_269 + LOCAL value_270 + LOCAL result_init_271 + LOCAL result_init_272 + LOCAL result_273 + LOCAL result_274 + LOCAL op_275 + LOCAL left_276 + LOCAL right_277 + LOCAL instance_278 + LOCAL value_279 + LOCAL result_init_280 + LOCAL result_init_281 + LOCAL result_282 + LOCAL result_283 + LOCAL op_284 + LOCAL left_285 + LOCAL right_286 + LOCAL instance_287 + LOCAL value_288 + LOCAL result_init_289 + LOCAL result_init_290 + LOCAL internal_291 + LOCAL instance_292 + LOCAL result_init_293 + LOCAL internal_294 + LOCAL instance_295 + LOCAL result_init_296 + LOCAL internal_297 + LOCAL instance_298 + LOCAL result_init_299 + LOCAL internal_300 + LOCAL instance_301 + LOCAL result_init_302 + LOCAL internal_303 + LOCAL instance_304 + LOCAL result_init_305 + LOCAL internal_306 + LOCAL instance_307 + LOCAL result_init_308 + LOCAL internal_309 + LOCAL instance_310 + LOCAL result_init_311 + LOCAL internal_312 + LOCAL instance_313 + LOCAL result_init_314 + LOCAL internal_315 + LOCAL instance_316 + LOCAL result_init_317 + LOCAL internal_318 + LOCAL instance_319 + LOCAL result_init_320 + LOCAL internal_321 + LOCAL instance_322 + LOCAL result_init_323 + LOCAL internal_324 + LOCAL instance_325 + LOCAL result_init_326 + LOCAL internal_327 + LOCAL instance_328 + LOCAL result_init_329 + LOCAL internal_330 + LOCAL instance_331 + LOCAL result_init_332 + LOCAL internal_333 + LOCAL instance_334 + LOCAL result_init_335 + LOCAL internal_336 + LOCAL instance_337 + LOCAL result_init_338 + LOCAL internal_339 + LOCAL instance_340 + LOCAL result_init_341 + LOCAL internal_342 + LOCAL instance_343 + LOCAL result_init_344 + LOCAL internal_345 + LOCAL instance_346 + LOCAL result_init_347 + LOCAL internal_348 + LOCAL instance_349 + LOCAL result_init_350 + LOCAL internal_351 + LOCAL instance_352 + LOCAL result_init_353 + LOCAL internal_354 + LOCAL instance_355 + LOCAL result_init_356 + LOCAL let_result_357 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + num_3 = instance_0 + internal_5 = LOAD s_6 + instance_6 = ALLOCATE String + result_init_7 = CALL String_init + result_4 = VCALL CellularAutomaton out_string + internal_9 = LOAD s_7 + instance_10 = ALLOCATE String + result_init_11 = CALL String_init + result_8 = VCALL CellularAutomaton out_string + internal_13 = LOAD s_8 + instance_14 = ALLOCATE String + result_init_15 = CALL String_init + result_12 = VCALL CellularAutomaton out_string + internal_17 = LOAD s_9 + instance_18 = ALLOCATE String + result_init_19 = CALL String_init + result_16 = VCALL CellularAutomaton out_string + internal_21 = LOAD s_10 + instance_22 = ALLOCATE String + result_init_23 = CALL String_init + result_20 = VCALL CellularAutomaton out_string + internal_25 = LOAD s_11 + instance_26 = ALLOCATE String + result_init_27 = CALL String_init + result_24 = VCALL CellularAutomaton out_string + internal_29 = LOAD s_12 + instance_30 = ALLOCATE String + result_init_31 = CALL String_init + result_28 = VCALL CellularAutomaton out_string + internal_33 = LOAD s_13 + instance_34 = ALLOCATE String + result_init_35 = CALL String_init + result_32 = VCALL CellularAutomaton out_string + internal_37 = LOAD s_14 + instance_38 = ALLOCATE String + result_init_39 = CALL String_init + result_36 = VCALL CellularAutomaton out_string + internal_41 = LOAD s_15 + instance_42 = ALLOCATE String + result_init_43 = CALL String_init + result_40 = VCALL CellularAutomaton out_string + internal_45 = LOAD s_16 + instance_46 = ALLOCATE String + result_init_47 = CALL String_init + result_44 = VCALL CellularAutomaton out_string + internal_49 = LOAD s_17 + instance_50 = ALLOCATE String + result_init_51 = CALL String_init + result_48 = VCALL CellularAutomaton out_string + internal_53 = LOAD s_18 + instance_54 = ALLOCATE String + result_init_55 = CALL String_init + result_52 = VCALL CellularAutomaton out_string + internal_57 = LOAD s_19 + instance_58 = ALLOCATE String + result_init_59 = CALL String_init + result_56 = VCALL CellularAutomaton out_string + internal_61 = LOAD s_20 + instance_62 = ALLOCATE String + result_init_63 = CALL String_init + result_60 = VCALL CellularAutomaton out_string + internal_65 = LOAD s_21 + instance_66 = ALLOCATE String + result_init_67 = CALL String_init + result_64 = VCALL CellularAutomaton out_string + internal_69 = LOAD s_22 + instance_70 = ALLOCATE String + result_init_71 = CALL String_init + result_68 = VCALL CellularAutomaton out_string + internal_73 = LOAD s_23 + instance_74 = ALLOCATE String + result_init_75 = CALL String_init + result_72 = VCALL CellularAutomaton out_string + internal_77 = LOAD s_24 + instance_78 = ALLOCATE String + result_init_79 = CALL String_init + result_76 = VCALL CellularAutomaton out_string + internal_81 = LOAD s_25 + instance_82 = ALLOCATE String + result_init_83 = CALL String_init + result_80 = VCALL CellularAutomaton out_string + internal_85 = LOAD s_26 + instance_86 = ALLOCATE String + result_init_87 = CALL String_init + result_84 = VCALL CellularAutomaton out_string + internal_89 = LOAD s_27 + instance_90 = ALLOCATE String + result_init_91 = CALL String_init + result_88 = VCALL CellularAutomaton out_string + internal_93 = LOAD s_28 + instance_94 = ALLOCATE String + result_init_95 = CALL String_init + result_92 = VCALL CellularAutomaton out_string + result_96 = VCALL CellularAutomaton in_int + num_3 = result_96 + internal_99 = LOAD s_1 + instance_100 = ALLOCATE String + result_init_101 = CALL String_init + result_98 = VCALL CellularAutomaton out_string + instance_107 = ALLOCATE Int + value_108 = LOAD 1 + result_init_109 = CALL Int_init + left_105 = GetAttr num_3 value + right_106 = GetAttr instance_107 value + op_104 = left_105 = right_106 + result_103 = ALLOCATE Bool + result_init_110 = CALL Bool_init + IF result_103 GOTO label_69 + instance_116 = ALLOCATE Int + value_117 = LOAD 2 + result_init_118 = CALL Int_init + left_114 = GetAttr num_3 value + right_115 = GetAttr instance_116 value + op_113 = left_114 = right_115 + result_112 = ALLOCATE Bool + result_init_119 = CALL Bool_init + IF result_112 GOTO label_70 + instance_125 = ALLOCATE Int + value_126 = LOAD 3 + result_init_127 = CALL Int_init + left_123 = GetAttr num_3 value + right_124 = GetAttr instance_125 value + op_122 = left_123 = right_124 + result_121 = ALLOCATE Bool + result_init_128 = CALL Bool_init + IF result_121 GOTO label_71 + instance_134 = ALLOCATE Int + value_135 = LOAD 4 + result_init_136 = CALL Int_init + left_132 = GetAttr num_3 value + right_133 = GetAttr instance_134 value + op_131 = left_132 = right_133 + result_130 = ALLOCATE Bool + result_init_137 = CALL Bool_init + IF result_130 GOTO label_72 + instance_143 = ALLOCATE Int + value_144 = LOAD 5 + result_init_145 = CALL Int_init + left_141 = GetAttr num_3 value + right_142 = GetAttr instance_143 value + op_140 = left_141 = right_142 + result_139 = ALLOCATE Bool + result_init_146 = CALL Bool_init + IF result_139 GOTO label_73 + instance_152 = ALLOCATE Int + value_153 = LOAD 6 + result_init_154 = CALL Int_init + left_150 = GetAttr num_3 value + right_151 = GetAttr instance_152 value + op_149 = left_150 = right_151 + result_148 = ALLOCATE Bool + result_init_155 = CALL Bool_init + IF result_148 GOTO label_74 + instance_161 = ALLOCATE Int + value_162 = LOAD 7 + result_init_163 = CALL Int_init + left_159 = GetAttr num_3 value + right_160 = GetAttr instance_161 value + op_158 = left_159 = right_160 + result_157 = ALLOCATE Bool + result_init_164 = CALL Bool_init + IF result_157 GOTO label_75 + instance_170 = ALLOCATE Int + value_171 = LOAD 8 + result_init_172 = CALL Int_init + left_168 = GetAttr num_3 value + right_169 = GetAttr instance_170 value + op_167 = left_168 = right_169 + result_166 = ALLOCATE Bool + result_init_173 = CALL Bool_init + IF result_166 GOTO label_76 + instance_179 = ALLOCATE Int + value_180 = LOAD 9 + result_init_181 = CALL Int_init + left_177 = GetAttr num_3 value + right_178 = GetAttr instance_179 value + op_176 = left_177 = right_178 + result_175 = ALLOCATE Bool + result_init_182 = CALL Bool_init + IF result_175 GOTO label_77 + instance_188 = ALLOCATE Int + value_189 = LOAD 10 + result_init_190 = CALL Int_init + left_186 = GetAttr num_3 value + right_187 = GetAttr instance_188 value + op_185 = left_186 = right_187 + result_184 = ALLOCATE Bool + result_init_191 = CALL Bool_init + IF result_184 GOTO label_78 + instance_197 = ALLOCATE Int + value_198 = LOAD 11 + result_init_199 = CALL Int_init + left_195 = GetAttr num_3 value + right_196 = GetAttr instance_197 value + op_194 = left_195 = right_196 + result_193 = ALLOCATE Bool + result_init_200 = CALL Bool_init + IF result_193 GOTO label_79 + instance_206 = ALLOCATE Int + value_207 = LOAD 12 + result_init_208 = CALL Int_init + left_204 = GetAttr num_3 value + right_205 = GetAttr instance_206 value + op_203 = left_204 = right_205 + result_202 = ALLOCATE Bool + result_init_209 = CALL Bool_init + IF result_202 GOTO label_80 + instance_215 = ALLOCATE Int + value_216 = LOAD 13 + result_init_217 = CALL Int_init + left_213 = GetAttr num_3 value + right_214 = GetAttr instance_215 value + op_212 = left_213 = right_214 + result_211 = ALLOCATE Bool + result_init_218 = CALL Bool_init + IF result_211 GOTO label_81 + instance_224 = ALLOCATE Int + value_225 = LOAD 14 + result_init_226 = CALL Int_init + left_222 = GetAttr num_3 value + right_223 = GetAttr instance_224 value + op_221 = left_222 = right_223 + result_220 = ALLOCATE Bool + result_init_227 = CALL Bool_init + IF result_220 GOTO label_82 + instance_233 = ALLOCATE Int + value_234 = LOAD 15 + result_init_235 = CALL Int_init + left_231 = GetAttr num_3 value + right_232 = GetAttr instance_233 value + op_230 = left_231 = right_232 + result_229 = ALLOCATE Bool + result_init_236 = CALL Bool_init + IF result_229 GOTO label_83 + instance_242 = ALLOCATE Int + value_243 = LOAD 16 + result_init_244 = CALL Int_init + left_240 = GetAttr num_3 value + right_241 = GetAttr instance_242 value + op_239 = left_240 = right_241 + result_238 = ALLOCATE Bool + result_init_245 = CALL Bool_init + IF result_238 GOTO label_84 + instance_251 = ALLOCATE Int + value_252 = LOAD 17 + result_init_253 = CALL Int_init + left_249 = GetAttr num_3 value + right_250 = GetAttr instance_251 value + op_248 = left_249 = right_250 + result_247 = ALLOCATE Bool + result_init_254 = CALL Bool_init + IF result_247 GOTO label_85 + instance_260 = ALLOCATE Int + value_261 = LOAD 18 + result_init_262 = CALL Int_init + left_258 = GetAttr num_3 value + right_259 = GetAttr instance_260 value + op_257 = left_258 = right_259 + result_256 = ALLOCATE Bool + result_init_263 = CALL Bool_init + IF result_256 GOTO label_86 + instance_269 = ALLOCATE Int + value_270 = LOAD 19 + result_init_271 = CALL Int_init + left_267 = GetAttr num_3 value + right_268 = GetAttr instance_269 value + op_266 = left_267 = right_268 + result_265 = ALLOCATE Bool + result_init_272 = CALL Bool_init + IF result_265 GOTO label_87 + instance_278 = ALLOCATE Int + value_279 = LOAD 20 + result_init_280 = CALL Int_init + left_276 = GetAttr num_3 value + right_277 = GetAttr instance_278 value + op_275 = left_276 = right_277 + result_274 = ALLOCATE Bool + result_init_281 = CALL Bool_init + IF result_274 GOTO label_88 + instance_287 = ALLOCATE Int + value_288 = LOAD 21 + result_init_289 = CALL Int_init + left_285 = GetAttr num_3 value + right_286 = GetAttr instance_287 value + op_284 = left_285 = right_286 + result_283 = ALLOCATE Bool + result_init_290 = CALL Bool_init + IF result_283 GOTO label_89 + internal_291 = LOAD s_29 + instance_292 = ALLOCATE String + result_init_293 = CALL String_init + result_282 = instance_292 + GOTO label_90 + LABEL label_89 + internal_294 = LOAD s_30 + instance_295 = ALLOCATE String + result_init_296 = CALL String_init + result_282 = instance_295 + LABEL label_90 + result_273 = result_282 + GOTO label_91 + LABEL label_88 + internal_297 = LOAD s_31 + instance_298 = ALLOCATE String + result_init_299 = CALL String_init + result_273 = instance_298 + LABEL label_91 + result_264 = result_273 + GOTO label_92 + LABEL label_87 + internal_300 = LOAD s_32 + instance_301 = ALLOCATE String + result_init_302 = CALL String_init + result_264 = instance_301 + LABEL label_92 + result_255 = result_264 + GOTO label_93 + LABEL label_86 + internal_303 = LOAD s_33 + instance_304 = ALLOCATE String + result_init_305 = CALL String_init + result_255 = instance_304 + LABEL label_93 + result_246 = result_255 + GOTO label_94 + LABEL label_85 + internal_306 = LOAD s_34 + instance_307 = ALLOCATE String + result_init_308 = CALL String_init + result_246 = instance_307 + LABEL label_94 + result_237 = result_246 + GOTO label_95 + LABEL label_84 + internal_309 = LOAD s_35 + instance_310 = ALLOCATE String + result_init_311 = CALL String_init + result_237 = instance_310 + LABEL label_95 + result_228 = result_237 + GOTO label_96 + LABEL label_83 + internal_312 = LOAD s_36 + instance_313 = ALLOCATE String + result_init_314 = CALL String_init + result_228 = instance_313 + LABEL label_96 + result_219 = result_228 + GOTO label_97 + LABEL label_82 + internal_315 = LOAD s_37 + instance_316 = ALLOCATE String + result_init_317 = CALL String_init + result_219 = instance_316 + LABEL label_97 + result_210 = result_219 + GOTO label_98 + LABEL label_81 + internal_318 = LOAD s_38 + instance_319 = ALLOCATE String + result_init_320 = CALL String_init + result_210 = instance_319 + LABEL label_98 + result_201 = result_210 + GOTO label_99 + LABEL label_80 + internal_321 = LOAD s_39 + instance_322 = ALLOCATE String + result_init_323 = CALL String_init + result_201 = instance_322 + LABEL label_99 + result_192 = result_201 + GOTO label_100 + LABEL label_79 + internal_324 = LOAD s_40 + instance_325 = ALLOCATE String + result_init_326 = CALL String_init + result_192 = instance_325 + LABEL label_100 + result_183 = result_192 + GOTO label_101 + LABEL label_78 + internal_327 = LOAD s_41 + instance_328 = ALLOCATE String + result_init_329 = CALL String_init + result_183 = instance_328 + LABEL label_101 + result_174 = result_183 + GOTO label_102 + LABEL label_77 + internal_330 = LOAD s_42 + instance_331 = ALLOCATE String + result_init_332 = CALL String_init + result_174 = instance_331 + LABEL label_102 + result_165 = result_174 + GOTO label_103 + LABEL label_76 + internal_333 = LOAD s_43 + instance_334 = ALLOCATE String + result_init_335 = CALL String_init + result_165 = instance_334 + LABEL label_103 + result_156 = result_165 + GOTO label_104 + LABEL label_75 + internal_336 = LOAD s_44 + instance_337 = ALLOCATE String + result_init_338 = CALL String_init + result_156 = instance_337 + LABEL label_104 + result_147 = result_156 + GOTO label_105 + LABEL label_74 + internal_339 = LOAD s_45 + instance_340 = ALLOCATE String + result_init_341 = CALL String_init + result_147 = instance_340 + LABEL label_105 + result_138 = result_147 + GOTO label_106 + LABEL label_73 + internal_342 = LOAD s_46 + instance_343 = ALLOCATE String + result_init_344 = CALL String_init + result_138 = instance_343 + LABEL label_106 + result_129 = result_138 + GOTO label_107 + LABEL label_72 + internal_345 = LOAD s_47 + instance_346 = ALLOCATE String + result_init_347 = CALL String_init + result_129 = instance_346 + LABEL label_107 + result_120 = result_129 + GOTO label_108 + LABEL label_71 + internal_348 = LOAD s_48 + instance_349 = ALLOCATE String + result_init_350 = CALL String_init + result_120 = instance_349 + LABEL label_108 + result_111 = result_120 + GOTO label_109 + LABEL label_70 + internal_351 = LOAD s_49 + instance_352 = ALLOCATE String + result_init_353 = CALL String_init + result_111 = instance_352 + LABEL label_109 + result_102 = result_111 + GOTO label_110 + LABEL label_69 + internal_354 = LOAD s_50 + instance_355 = ALLOCATE String + result_init_356 = CALL String_init + result_102 = instance_355 + LABEL label_110 + let_result_357 = result_102 + + RETURN let_result_357 +} +function CellularAutomaton.prompt { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL ans_3 + LOCAL result_4 + LOCAL internal_5 + LOCAL instance_6 + LOCAL result_init_7 + LOCAL result_8 + LOCAL internal_9 + LOCAL instance_10 + LOCAL result_init_11 + LOCAL result_12 + LOCAL result_13 + LOCAL result_14 + LOCAL internal_15 + LOCAL instance_16 + LOCAL result_init_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL internal_23 + LOCAL instance_24 + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL instance_27 + LOCAL value_28 + LOCAL result_init_29 + LOCAL instance_30 + LOCAL value_31 + LOCAL result_init_32 + LOCAL let_result_33 + + instance_0 = ALLOCATE String + value_1 = LOAD empty_str + result_init_2 = CALL String_init + ans_3 = instance_0 + internal_5 = LOAD s_51 + instance_6 = ALLOCATE String + result_init_7 = CALL String_init + result_4 = VCALL CellularAutomaton out_string + internal_9 = LOAD s_52 + instance_10 = ALLOCATE String + result_init_11 = CALL String_init + result_8 = VCALL CellularAutomaton out_string + result_12 = VCALL CellularAutomaton in_string + ans_3 = result_12 + internal_15 = LOAD s_1 + instance_16 = ALLOCATE String + result_init_17 = CALL String_init + result_14 = VCALL CellularAutomaton out_string + internal_23 = LOAD s_53 + instance_24 = ALLOCATE String + result_init_25 = CALL String_init + op_20 = CALL String_equals + result_19 = ALLOCATE Bool + result_init_26 = CALL Bool_init + IF result_19 GOTO label_111 + instance_27 = ALLOCATE Bool + value_28 = LOAD 1 + result_init_29 = CALL Bool_init + result_18 = instance_27 + GOTO label_112 + LABEL label_111 + instance_30 = ALLOCATE Bool + value_31 = LOAD 0 + result_init_32 = CALL Bool_init + result_18 = instance_30 + LABEL label_112 + let_result_33 = result_18 + + RETURN let_result_33 +} +function CellularAutomaton.prompt2 { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL ans_3 + LOCAL result_4 + LOCAL internal_5 + LOCAL instance_6 + LOCAL result_init_7 + LOCAL result_8 + LOCAL internal_9 + LOCAL instance_10 + LOCAL result_init_11 + LOCAL result_12 + LOCAL internal_13 + LOCAL instance_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL result_17 + LOCAL result_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL internal_23 + LOCAL instance_24 + LOCAL result_init_25 + LOCAL result_init_26 + LOCAL instance_27 + LOCAL value_28 + LOCAL result_init_29 + LOCAL instance_30 + LOCAL value_31 + LOCAL result_init_32 + LOCAL let_result_33 + + instance_0 = ALLOCATE String + value_1 = LOAD empty_str + result_init_2 = CALL String_init + ans_3 = instance_0 + internal_5 = LOAD s_54 + instance_6 = ALLOCATE String + result_init_7 = CALL String_init + result_4 = VCALL CellularAutomaton out_string + internal_9 = LOAD s_55 + instance_10 = ALLOCATE String + result_init_11 = CALL String_init + result_8 = VCALL CellularAutomaton out_string + internal_13 = LOAD s_56 + instance_14 = ALLOCATE String + result_init_15 = CALL String_init + result_12 = VCALL CellularAutomaton out_string + result_16 = VCALL CellularAutomaton in_string + ans_3 = result_16 + internal_23 = LOAD s_57 + instance_24 = ALLOCATE String + result_init_25 = CALL String_init + op_20 = CALL String_equals + result_19 = ALLOCATE Bool + result_init_26 = CALL Bool_init + IF result_19 GOTO label_113 + instance_27 = ALLOCATE Bool + value_28 = LOAD 0 + result_init_29 = CALL Bool_init + result_18 = instance_27 + GOTO label_114 + LABEL label_113 + instance_30 = ALLOCATE Bool + value_31 = LOAD 1 + result_init_32 = CALL Bool_init + result_18 = instance_30 + LABEL label_114 + let_result_33 = result_18 + + RETURN let_result_33 +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL CellularAutomaton_init + + RETURN + SetAttr self cells None +} +function Main.main { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + LOCAL continue_3 + LOCAL instance_4 + LOCAL value_5 + LOCAL result_init_6 + LOCAL choice_7 + LOCAL result_8 + LOCAL internal_9 + LOCAL instance_10 + LOCAL result_init_11 + LOCAL result_12 + LOCAL internal_13 + LOCAL instance_14 + LOCAL result_init_15 + LOCAL result_16 + LOCAL result_17 + LOCAL instance_18 + LOCAL value_19 + LOCAL result_init_20 + LOCAL result_21 + LOCAL result_22 + LOCAL result_23 + LOCAL result_24 + LOCAL result_25 + LOCAL init_26 + LOCAL result_27 + LOCAL result_28 + LOCAL Main.cells + LOCAL result_30 + LOCAL result_31 + LOCAL result_32 + LOCAL instance_33 + LOCAL value_34 + LOCAL result_init_35 + LOCAL result_36 + LOCAL result_37 + LOCAL Main.cells + LOCAL result_39 + LOCAL Main.cells + LOCAL let_result_41 + LOCAL let_result_42 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + continue_3 = instance_0 + instance_4 = ALLOCATE String + value_5 = LOAD empty_str + result_init_6 = CALL String_init + choice_7 = instance_4 + internal_9 = LOAD s_58 + instance_10 = ALLOCATE String + result_init_11 = CALL String_init + result_8 = VCALL Main out_string + internal_13 = LOAD s_59 + instance_14 = ALLOCATE String + result_init_15 = CALL String_init + result_12 = VCALL Main out_string + LABEL label_115 + result_17 = VCALL Main prompt2 + IF result_17 GOTO label_116 + GOTO label_117 + LABEL label_116 + instance_18 = ALLOCATE Bool + value_19 = LOAD 1 + result_init_20 = CALL Bool_init + continue_3 = instance_18 + result_22 = VCALL Main option + choice_7 = result_22 + result_25 = ALLOCATE CellularAutomaton + init_26 = CALL CellularAutomaton_init + result_24 = VCALL CellularAutomaton init + SetAttr self cells result_24 + Main.cells = GetAttr self cells + result_28 = VCALL CellularAutomaton print + LABEL label_118 + IF continue_3 GOTO label_119 + GOTO label_120 + LABEL label_119 + result_32 = VCALL Main prompt + IF result_32 GOTO label_121 + instance_33 = ALLOCATE Bool + value_34 = LOAD 0 + result_init_35 = CALL Bool_init + continue_3 = instance_33 + result_31 = instance_33 + GOTO label_122 + LABEL label_121 + Main.cells = GetAttr self cells + result_37 = VCALL CellularAutomaton evolve + Main.cells = GetAttr self cells + result_39 = VCALL CellularAutomaton print + result_31 = result_39 + LABEL label_122 + GOTO label_118 + LABEL label_120 + result_30 = LOAD VOID + GOTO label_115 + LABEL label_117 + result_16 = LOAD VOID + let_result_41 = self + let_result_42 = let_result_41 + + RETURN let_result_42 +} \ No newline at end of file diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 64058c55..7e12364f 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -741,6 +741,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -767,6 +769,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) +li $t0, 0 +sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -793,6 +797,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 32($sp) +li $t0, 0 +sw $t0, 36($sp) move $t0, $sp lw $t1, 36($t0) addi $sp, $sp, -4 @@ -1759,6 +1765,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -2274,6 +2282,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 48($sp) +li $t0, 0 +sw $t0, 52($sp) move $t0, $sp lw $t1, 52($t0) addi $sp, $sp, -4 @@ -2925,6 +2935,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 @@ -3273,6 +3285,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 48($sp) +li $t0, 0 +sw $t0, 52($sp) move $t0, $sp lw $t1, 52($t0) addi $sp, $sp, -4 @@ -3621,6 +3635,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 48($sp) +li $t0, 0 +sw $t0, 52($sp) move $t0, $sp lw $t1, 52($t0) addi $sp, $sp, -4 @@ -4896,6 +4912,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 156($sp) +li $t0, 0 +sw $t0, 160($sp) move $t0, $sp lw $t1, 160($t0) addi $sp, $sp, -4 @@ -5026,6 +5044,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 220($sp) +li $t0, 0 +sw $t0, 224($sp) move $t0, $sp lw $t1, 224($t0) addi $sp, $sp, -4 @@ -5189,6 +5209,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 288($sp) +li $t0, 0 +sw $t0, 292($sp) move $t0, $sp lw $t1, 292($t0) addi $sp, $sp, -4 @@ -5352,6 +5374,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 356($sp) +li $t0, 0 +sw $t0, 360($sp) move $t0, $sp lw $t1, 360($t0) addi $sp, $sp, -4 @@ -5515,6 +5539,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 424($sp) +li $t0, 0 +sw $t0, 428($sp) move $t0, $sp lw $t1, 428($t0) addi $sp, $sp, -4 @@ -5678,6 +5704,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 492($sp) +li $t0, 0 +sw $t0, 496($sp) move $t0, $sp lw $t1, 496($t0) addi $sp, $sp, -4 @@ -5841,6 +5869,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 560($sp) +li $t0, 0 +sw $t0, 564($sp) move $t0, $sp lw $t1, 564($t0) addi $sp, $sp, -4 @@ -6004,6 +6034,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 628($sp) +li $t0, 0 +sw $t0, 632($sp) move $t0, $sp lw $t1, 632($t0) addi $sp, $sp, -4 @@ -6454,6 +6486,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -9773,6 +9807,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 100($sp) +li $t0, 1 +sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) addi $sp, $sp, -4 @@ -9800,6 +9836,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 112($sp) +li $t0, 0 +sw $t0, 116($sp) move $t0, $sp lw $t1, 116($t0) addi $sp, $sp, -4 @@ -10028,6 +10066,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 100($sp) +li $t0, 0 +sw $t0, 104($sp) move $t0, $sp lw $t1, 104($t0) addi $sp, $sp, -4 @@ -10055,6 +10095,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 112($sp) +li $t0, 1 +sw $t0, 116($sp) move $t0, $sp lw $t1, 116($t0) addi $sp, $sp, -4 @@ -10207,6 +10249,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 52($sp) +li $t0, 1 +sw $t0, 56($sp) move $t0, $sp lw $t1, 56($t0) addi $sp, $sp, -4 @@ -10316,6 +10360,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 112($sp) +li $t0, 0 +sw $t0, 116($sp) move $t0, $sp lw $t1, 116($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/list.cil b/tests/codegen/list.cil new file mode 100644 index 00000000..01cd43fe --- /dev/null +++ b/tests/codegen/list.cil @@ -0,0 +1,559 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type List { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method isNil : List.isNil + method head : List.head + method tail : List.tail + method cons : List.cons +} +type Cons { + attribute car + attribute cdr + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method isNil : Cons.isNil + method head : Cons.head + method tail : Cons.tail + method cons : List.cons + method init : Cons.init +} +type Main { + attribute mylist + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method print_list : Main.print_list + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT msg_0 + type_name_1 = TYPEOF self + PRINT type_name_1 + eol_2 = LOAD s_1 + PRINT eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function List_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL Object_init + + RETURN +} +function List.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 1 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function List.head { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = VCALL List abort + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + + RETURN instance_1 +} +function List.tail { + PARAM self + + LOCAL result_0 + + result_0 = VCALL List abort + + RETURN self +} +function List.cons { + PARAM self + PARAM i + + LOCAL result_0 + LOCAL result_1 + LOCAL init_2 + + result_1 = ALLOCATE Cons + init_2 = CALL Cons_init + result_0 = VCALL Cons init + + RETURN result_0 +} +function Cons_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = CALL List_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self car instance_1 + SetAttr self cdr None +} +function Cons.isNil { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Bool + value_1 = LOAD 0 + result_init_2 = CALL Bool_init + + RETURN instance_0 +} +function Cons.head { + PARAM self + + LOCAL Cons.car + + Cons.car = GetAttr self car + + RETURN Cons.car +} +function Cons.tail { + PARAM self + + LOCAL Cons.cdr + + Cons.cdr = GetAttr self cdr + + RETURN Cons.cdr +} +function Cons.init { + PARAM self + PARAM i + PARAM rest + + LOCAL result_0 + LOCAL result_1 + + SetAttr self car i + SetAttr self cdr rest + + RETURN self +} +function Main_init { + PARAM self + + LOCAL result_0 + + result_0 = CALL IO_init + + RETURN + SetAttr self mylist None +} +function Main.print_list { + PARAM self + PARAM l + + LOCAL result_0 + LOCAL result_1 + LOCAL result_2 + LOCAL result_3 + LOCAL result_4 + LOCAL internal_5 + LOCAL instance_6 + LOCAL result_init_7 + LOCAL result_8 + LOCAL result_9 + LOCAL result_10 + LOCAL internal_11 + LOCAL instance_12 + LOCAL result_init_13 + + result_1 = VCALL List isNil + IF result_1 GOTO label_1 + result_3 = VCALL List head + result_2 = VCALL Main out_int + internal_5 = LOAD s_3 + instance_6 = ALLOCATE String + result_init_7 = CALL String_init + result_4 = VCALL Main out_string + result_9 = VCALL List tail + result_8 = VCALL Main print_list + result_0 = result_8 + GOTO label_2 + LABEL label_1 + internal_11 = LOAD s_1 + instance_12 = ALLOCATE String + result_init_13 = CALL String_init + result_10 = VCALL Main out_string + result_0 = result_10 + LABEL label_2 + + RETURN result_0 +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL result_2 + LOCAL result_3 + LOCAL result_4 + LOCAL result_5 + LOCAL init_6 + LOCAL instance_7 + LOCAL value_8 + LOCAL result_init_9 + LOCAL instance_10 + LOCAL value_11 + LOCAL result_init_12 + LOCAL instance_13 + LOCAL value_14 + LOCAL result_init_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL instance_19 + LOCAL value_20 + LOCAL result_init_21 + LOCAL result_22 + LOCAL result_23 + LOCAL result_24 + LOCAL op_25 + LOCAL internal_26 + LOCAL result_27 + LOCAL Main.mylist + LOCAL result_init_29 + LOCAL result_30 + LOCAL Main.mylist + LOCAL result_32 + LOCAL Main.mylist + LOCAL result_34 + + result_5 = ALLOCATE List + init_6 = CALL List_init + instance_7 = ALLOCATE Int + value_8 = LOAD 1 + result_init_9 = CALL Int_init + result_4 = VCALL List cons + instance_10 = ALLOCATE Int + value_11 = LOAD 2 + result_init_12 = CALL Int_init + result_3 = VCALL List cons + instance_13 = ALLOCATE Int + value_14 = LOAD 3 + result_init_15 = CALL Int_init + result_2 = VCALL List cons + instance_16 = ALLOCATE Int + value_17 = LOAD 4 + result_init_18 = CALL Int_init + result_1 = VCALL List cons + instance_19 = ALLOCATE Int + value_20 = LOAD 5 + result_init_21 = CALL Int_init + result_0 = VCALL List cons + SetAttr self mylist result_0 + LABEL label_3 + Main.mylist = GetAttr self mylist + result_27 = VCALL List isNil + internal_26 = GetAttr result_27 value + op_25 = not internal_26 + result_24 = ALLOCATE Bool + result_init_29 = CALL Bool_init + IF result_24 GOTO label_4 + GOTO label_5 + LABEL label_4 + Main.mylist = GetAttr self mylist + result_30 = VCALL Main print_list + Main.mylist = GetAttr self mylist + result_32 = VCALL List tail + SetAttr self mylist result_32 + GOTO label_3 + LABEL label_5 + result_23 = LOAD VOID + + RETURN result_23 +} \ No newline at end of file diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 33163db5..14f25859 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -652,6 +652,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 1 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -694,6 +696,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -796,6 +800,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -832,6 +838,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 0eedc34c..b04c5427 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -1035,6 +1035,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -1061,6 +1063,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 20($sp) +li $t0, 0 +sw $t0, 24($sp) move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 @@ -1177,6 +1181,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -1726,6 +1732,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 36($sp) +li $t0, 0 +sw $t0, 40($sp) move $t0, $sp lw $t1, 40($t0) addi $sp, $sp, -4 @@ -1803,6 +1811,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 80($sp) +li $t0, 0 +sw $t0, 84($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 @@ -1830,6 +1840,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 92($sp) +li $t0, 1 +sw $t0, 96($sp) move $t0, $sp lw $t1, 96($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/palindrome.cil b/tests/codegen/palindrome.cil new file mode 100644 index 00000000..27ff3d21 --- /dev/null +++ b/tests/codegen/palindrome.cil @@ -0,0 +1,518 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + attribute i + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method pal : Main.pal + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: enter a string + +s_4: that was not a palindrome + +s_5: that was a palindrome + + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT msg_0 + type_name_1 = TYPEOF self + PRINT type_name_1 + eol_2 = LOAD s_1 + PRINT eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + LOCAL instance_1 + LOCAL value_2 + LOCAL result_init_3 + + result_0 = CALL IO_init + + RETURN + instance_1 = ALLOCATE Int + value_2 = LOAD 0 + result_init_3 = CALL Int_init + SetAttr self i instance_1 +} +function Main.pal { + PARAM self + PARAM s + + LOCAL result_0 + LOCAL result_1 + LOCAL op_2 + LOCAL left_3 + LOCAL right_4 + LOCAL result_5 + LOCAL instance_6 + LOCAL value_7 + LOCAL result_init_8 + LOCAL result_init_9 + LOCAL result_10 + LOCAL result_11 + LOCAL op_12 + LOCAL left_13 + LOCAL right_14 + LOCAL result_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL result_init_19 + LOCAL result_20 + LOCAL result_21 + LOCAL op_22 + LOCAL left_23 + LOCAL right_24 + LOCAL result_25 + LOCAL instance_26 + LOCAL value_27 + LOCAL result_init_28 + LOCAL instance_29 + LOCAL value_30 + LOCAL result_init_31 + LOCAL result_32 + LOCAL instance_33 + LOCAL value_34 + LOCAL result_init_35 + LOCAL result_36 + LOCAL op_37 + LOCAL left_38 + LOCAL right_39 + LOCAL result_40 + LOCAL instance_41 + LOCAL value_42 + LOCAL result_init_43 + LOCAL result_init_44 + LOCAL result_init_45 + LOCAL instance_46 + LOCAL value_47 + LOCAL result_init_48 + LOCAL result_49 + LOCAL result_50 + LOCAL result_51 + LOCAL op_52 + LOCAL left_53 + LOCAL right_54 + LOCAL result_55 + LOCAL instance_56 + LOCAL value_57 + LOCAL result_init_58 + LOCAL result_init_59 + LOCAL instance_60 + LOCAL value_61 + LOCAL result_init_62 + LOCAL instance_63 + LOCAL value_64 + LOCAL result_init_65 + LOCAL instance_66 + LOCAL value_67 + LOCAL result_init_68 + + result_5 = VCALL String length + instance_6 = ALLOCATE Int + value_7 = LOAD 0 + result_init_8 = CALL Int_init + left_3 = GetAttr result_5 value + right_4 = GetAttr instance_6 value + op_2 = left_3 = right_4 + result_1 = ALLOCATE Bool + result_init_9 = CALL Bool_init + IF result_1 GOTO label_1 + result_15 = VCALL String length + instance_16 = ALLOCATE Int + value_17 = LOAD 1 + result_init_18 = CALL Int_init + left_13 = GetAttr result_15 value + right_14 = GetAttr instance_16 value + op_12 = left_13 = right_14 + result_11 = ALLOCATE Bool + result_init_19 = CALL Bool_init + IF result_11 GOTO label_2 + instance_26 = ALLOCATE Int + value_27 = LOAD 1 + result_init_28 = CALL Int_init + instance_29 = ALLOCATE Int + value_30 = LOAD 0 + result_init_31 = CALL Int_init + result_25 = VCALL String substr + instance_33 = ALLOCATE Int + value_34 = LOAD 1 + result_init_35 = CALL Int_init + result_40 = VCALL String length + instance_41 = ALLOCATE Int + value_42 = LOAD 1 + result_init_43 = CALL Int_init + left_38 = GetAttr result_40 value + right_39 = GetAttr instance_41 value + op_37 = left_38 - right_39 + result_36 = ALLOCATE Int + result_init_44 = CALL Int_init + result_32 = VCALL String substr + op_22 = CALL String_equals + result_21 = ALLOCATE Bool + result_init_45 = CALL Bool_init + IF result_21 GOTO label_3 + instance_46 = ALLOCATE Bool + value_47 = LOAD 0 + result_init_48 = CALL Bool_init + result_20 = instance_46 + GOTO label_4 + LABEL label_3 + result_55 = VCALL String length + instance_56 = ALLOCATE Int + value_57 = LOAD 2 + result_init_58 = CALL Int_init + left_53 = GetAttr result_55 value + right_54 = GetAttr instance_56 value + op_52 = left_53 - right_54 + result_51 = ALLOCATE Int + result_init_59 = CALL Int_init + instance_60 = ALLOCATE Int + value_61 = LOAD 1 + result_init_62 = CALL Int_init + result_50 = VCALL String substr + result_49 = VCALL Main pal + result_20 = result_49 + LABEL label_4 + result_10 = result_20 + GOTO label_5 + LABEL label_2 + instance_63 = ALLOCATE Bool + value_64 = LOAD 1 + result_init_65 = CALL Bool_init + result_10 = instance_63 + LABEL label_5 + result_0 = result_10 + GOTO label_6 + LABEL label_1 + instance_66 = ALLOCATE Bool + value_67 = LOAD 1 + result_init_68 = CALL Bool_init + result_0 = instance_66 + LABEL label_6 + + RETURN result_0 +} +function Main.main { + PARAM self + + LOCAL result_0 + LOCAL op_1 + LOCAL internal_2 + LOCAL instance_3 + LOCAL value_4 + LOCAL result_init_5 + LOCAL result_init_6 + LOCAL result_7 + LOCAL result_8 + LOCAL internal_9 + LOCAL instance_10 + LOCAL result_init_11 + LOCAL result_12 + LOCAL result_13 + LOCAL result_14 + LOCAL result_15 + LOCAL internal_16 + LOCAL instance_17 + LOCAL result_init_18 + LOCAL result_19 + LOCAL internal_20 + LOCAL instance_21 + LOCAL result_init_22 + + instance_3 = ALLOCATE Int + value_4 = LOAD 1 + result_init_5 = CALL Int_init + internal_2 = GetAttr instance_3 value + op_1 = ~ internal_2 + result_0 = ALLOCATE Int + result_init_6 = CALL Int_init + SetAttr self i result_0 + internal_9 = LOAD s_3 + instance_10 = ALLOCATE String + result_init_11 = CALL String_init + result_8 = VCALL Main out_string + result_14 = VCALL Main in_string + result_13 = VCALL Main pal + IF result_13 GOTO label_7 + internal_16 = LOAD s_4 + instance_17 = ALLOCATE String + result_init_18 = CALL String_init + result_15 = VCALL Main out_string + result_12 = result_15 + GOTO label_8 + LABEL label_7 + internal_20 = LOAD s_5 + instance_21 = ALLOCATE String + result_init_22 = CALL String_init + result_19 = VCALL Main out_string + result_12 = result_19 + LABEL label_8 + + RETURN result_12 +} \ No newline at end of file diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index d75290a8..7b05ac70 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -627,6 +627,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -671,6 +673,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 @@ -827,6 +831,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 120($sp) +li $t0, 0 +sw $t0, 124($sp) move $t0, $sp lw $t1, 124($t0) addi $sp, $sp, -4 @@ -1014,6 +1020,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 188($sp) +li $t0, 0 +sw $t0, 192($sp) move $t0, $sp lw $t1, 192($t0) addi $sp, $sp, -4 @@ -1173,6 +1181,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 256($sp) +li $t0, 1 +sw $t0, 260($sp) move $t0, $sp lw $t1, 260($t0) addi $sp, $sp, -4 @@ -1203,6 +1213,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 268($sp) +li $t0, 1 +sw $t0, 272($sp) move $t0, $sp lw $t1, 272($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/primes.cil b/tests/codegen/primes.cil new file mode 100644 index 00000000..d4a672fc --- /dev/null +++ b/tests/codegen/primes.cil @@ -0,0 +1,615 @@ +.TYPES +type Object { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type Int { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type String { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method length : String.length + method concat : String.concat + method substr : String.substr +} +type Bool { + attribute value + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy +} +type IO { + + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int +} +type Main { + attribute out + attribute testee + attribute divisor + attribute stop + attribute m + + method abort : Object.abort + method type_name : Object.type_name + method copy : Object.copy + method out_string : IO.out_string + method out_int : IO.out_int + method in_string : IO.in_string + method in_int : IO.in_int + method main : Main.main +} + +.DATA +s_0: Abort called from class +s_1: + +empty_str: +s_3: 2 is trivially prime. + +s_4: is prime. + +s_5: continue +s_6: halt + +.CODE +function main { + + + LOCAL instance_0 + LOCAL result_1 + + instance_0 = ALLOCATE Main + result_1 = CALL Main_init + result_1 = CALL Main.main + + RETURN +} +function Object_init { + PARAM self + + + + + RETURN +} +function Object.abort { + PARAM self + + LOCAL msg_0 + LOCAL type_name_1 + LOCAL eol_2 + + msg_0 = LOAD s_0 + PRINT msg_0 + type_name_1 = TYPEOF self + PRINT type_name_1 + eol_2 = LOAD s_1 + PRINT eol_2 + HALT +} +function Object.type_name { + PARAM self + + LOCAL type_name_0 + LOCAL instance_1 + LOCAL result_init_2 + + type_name_0 = TYPEOF self + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function Object.copy { + PARAM self + + LOCAL copy_0 + + copy_0 = COPY self + + RETURN copy_0 +} +function IO_init { + PARAM self + + + + + RETURN +} +function IO.out_string { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.out_int { + PARAM self + PARAM x + + LOCAL v_0 + + v_0 = GetAttr x value + PRINT v_0 + + RETURN self +} +function IO.in_string { + PARAM self + + LOCAL read_str_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_str_0 = READ + instance_1 = ALLOCATE String + result_init_2 = CALL String_init + + RETURN instance_1 +} +function IO.in_int { + PARAM self + + LOCAL read_int_0 + LOCAL instance_1 + LOCAL result_init_2 + + read_int_0 = READ + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String.length { + PARAM self + + LOCAL length_0 + LOCAL instance_1 + LOCAL result_init_2 + + length_0 = LENGTH self + instance_1 = ALLOCATE Int + result_init_2 = CALL Int_init + + RETURN instance_1 +} +function String.concat { + PARAM self + PARAM s + + LOCAL str1_0 + LOCAL len1_1 + LOCAL str2_2 + LOCAL len2_3 + LOCAL local_len1_4 + LOCAL local_len2_5 + LOCAL concat_6 + LOCAL instance_7 + LOCAL result_init_8 + + str1_0 = GetAttr self value + len1_1 = CALL String.length + str2_2 = GetAttr s value + len2_3 = CALL String.length + local_len1_4 = GetAttr len1_1 value + local_len2_5 = GetAttr len2_3 value + concat_6 = CONCAT str1_0 str2_2 + instance_7 = ALLOCATE String + result_init_8 = CALL String_init + + RETURN instance_7 +} +function String.substr { + PARAM self + PARAM i + PARAM l + + LOCAL i_value_0 + LOCAL l_value_1 + LOCAL subs_result_2 + LOCAL instance_3 + LOCAL result_init_4 + + i_value_0 = GetAttr i value + l_value_1 = GetAttr l value + subs_result_2 = SUBSTR i_value_0 l_value_1 self + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + + RETURN instance_3 +} +function Bool_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function Int_init { + PARAM self + PARAM v + + + + SetAttr self value v + + RETURN +} +function String_equals { + PARAM str1 + PARAM str2 + + LOCAL str1_0 + LOCAL str2_1 + LOCAL comparison_result_2 + + str1_0 = GetAttr str1 value + str2_1 = GetAttr str2 value + comparison_result_2 = str1_0 = str2_1 + + RETURN comparison_result_2 +} +function Main_init { + PARAM self + + LOCAL result_0 + LOCAL result_1 + LOCAL internal_2 + LOCAL instance_3 + LOCAL result_init_4 + LOCAL instance_5 + LOCAL value_6 + LOCAL result_init_7 + LOCAL Main.out + LOCAL instance_9 + LOCAL value_10 + LOCAL result_init_11 + LOCAL instance_12 + LOCAL value_13 + LOCAL result_init_14 + LOCAL result_15 + LOCAL instance_16 + LOCAL value_17 + LOCAL result_init_18 + LOCAL result_19 + LOCAL op_20 + LOCAL left_21 + LOCAL right_22 + LOCAL Main.testee + LOCAL instance_24 + LOCAL value_25 + LOCAL result_init_26 + LOCAL result_init_27 + LOCAL result_28 + LOCAL instance_29 + LOCAL value_30 + LOCAL result_init_31 + LOCAL result_32 + LOCAL result_33 + LOCAL result_34 + LOCAL result_35 + LOCAL op_36 + LOCAL left_37 + LOCAL right_38 + LOCAL Main.testee + LOCAL result_40 + LOCAL op_41 + LOCAL left_42 + LOCAL right_43 + LOCAL Main.divisor + LOCAL Main.divisor + LOCAL result_init_46 + LOCAL result_init_47 + LOCAL result_48 + LOCAL result_49 + LOCAL op_50 + LOCAL left_51 + LOCAL right_52 + LOCAL result_53 + LOCAL op_54 + LOCAL left_55 + LOCAL right_56 + LOCAL Main.testee + LOCAL result_58 + LOCAL op_59 + LOCAL left_60 + LOCAL right_61 + LOCAL Main.divisor + LOCAL result_63 + LOCAL op_64 + LOCAL left_65 + LOCAL right_66 + LOCAL Main.testee + LOCAL Main.divisor + LOCAL result_init_69 + LOCAL result_init_70 + LOCAL result_init_71 + LOCAL instance_72 + LOCAL value_73 + LOCAL result_init_74 + LOCAL result_init_75 + LOCAL instance_76 + LOCAL value_77 + LOCAL result_init_78 + LOCAL instance_79 + LOCAL value_80 + LOCAL result_init_81 + LOCAL instance_82 + LOCAL value_83 + LOCAL result_init_84 + LOCAL result_85 + LOCAL op_86 + LOCAL left_87 + LOCAL right_88 + LOCAL Main.divisor + LOCAL instance_90 + LOCAL value_91 + LOCAL result_init_92 + LOCAL result_init_93 + LOCAL result_94 + LOCAL result_95 + LOCAL result_96 + LOCAL op_97 + LOCAL left_98 + LOCAL right_99 + LOCAL Main.testee + LOCAL result_101 + LOCAL op_102 + LOCAL left_103 + LOCAL right_104 + LOCAL Main.divisor + LOCAL Main.divisor + LOCAL result_init_107 + LOCAL result_init_108 + LOCAL instance_109 + LOCAL value_110 + LOCAL result_init_111 + LOCAL Main.testee + LOCAL result_113 + LOCAL result_114 + LOCAL Main.out + LOCAL result_116 + LOCAL internal_117 + LOCAL instance_118 + LOCAL result_init_119 + LOCAL result_120 + LOCAL result_121 + LOCAL op_122 + LOCAL left_123 + LOCAL right_124 + LOCAL Main.stop + LOCAL Main.testee + LOCAL result_init_127 + LOCAL internal_128 + LOCAL instance_129 + LOCAL result_init_130 + LOCAL result_131 + LOCAL internal_132 + LOCAL instance_133 + LOCAL result_init_134 + + result_0 = CALL IO_init + + RETURN + internal_2 = LOAD s_3 + instance_3 = ALLOCATE String + result_init_4 = CALL String_init + result_1 = VCALL Main out_string + instance_5 = ALLOCATE Int + value_6 = LOAD 2 + result_init_7 = CALL Int_init + SetAttr self out instance_5 + Main.out = GetAttr self out + SetAttr self testee Main.out + instance_9 = ALLOCATE Int + value_10 = LOAD 0 + result_init_11 = CALL Int_init + SetAttr self divisor instance_9 + instance_12 = ALLOCATE Int + value_13 = LOAD 500 + result_init_14 = CALL Int_init + SetAttr self stop instance_12 + LABEL label_1 + instance_16 = ALLOCATE Bool + value_17 = LOAD 1 + result_init_18 = CALL Bool_init + IF instance_16 GOTO label_2 + GOTO label_3 + LABEL label_2 + Main.testee = GetAttr self testee + instance_24 = ALLOCATE Int + value_25 = LOAD 1 + result_init_26 = CALL Int_init + left_21 = GetAttr Main.testee value + right_22 = GetAttr instance_24 value + op_20 = left_21 + right_22 + result_19 = ALLOCATE Int + result_init_27 = CALL Int_init + SetAttr self testee result_19 + instance_29 = ALLOCATE Int + value_30 = LOAD 2 + result_init_31 = CALL Int_init + SetAttr self divisor instance_29 + LABEL label_4 + Main.testee = GetAttr self testee + Main.divisor = GetAttr self divisor + Main.divisor = GetAttr self divisor + left_42 = GetAttr Main.divisor value + right_43 = GetAttr Main.divisor value + op_41 = left_42 * right_43 + result_40 = ALLOCATE Int + result_init_46 = CALL Int_init + left_37 = GetAttr Main.testee value + right_38 = GetAttr result_40 value + op_36 = left_37 < right_38 + result_35 = ALLOCATE Bool + result_init_47 = CALL Bool_init + IF result_35 GOTO label_7 + Main.testee = GetAttr self testee + Main.divisor = GetAttr self divisor + Main.testee = GetAttr self testee + Main.divisor = GetAttr self divisor + left_65 = GetAttr Main.testee value + right_66 = GetAttr Main.divisor value + op_64 = left_65 / right_66 + result_63 = ALLOCATE Int + result_init_69 = CALL Int_init + left_60 = GetAttr Main.divisor value + right_61 = GetAttr result_63 value + op_59 = left_60 * right_61 + result_58 = ALLOCATE Int + result_init_70 = CALL Int_init + left_55 = GetAttr Main.testee value + right_56 = GetAttr result_58 value + op_54 = left_55 - right_56 + result_53 = ALLOCATE Int + result_init_71 = CALL Int_init + instance_72 = ALLOCATE Int + value_73 = LOAD 0 + result_init_74 = CALL Int_init + left_51 = GetAttr result_53 value + right_52 = GetAttr instance_72 value + op_50 = left_51 = right_52 + result_49 = ALLOCATE Bool + result_init_75 = CALL Bool_init + IF result_49 GOTO label_8 + instance_76 = ALLOCATE Bool + value_77 = LOAD 1 + result_init_78 = CALL Bool_init + result_48 = instance_76 + GOTO label_9 + LABEL label_8 + instance_79 = ALLOCATE Bool + value_80 = LOAD 0 + result_init_81 = CALL Bool_init + result_48 = instance_79 + LABEL label_9 + result_34 = result_48 + GOTO label_10 + LABEL label_7 + instance_82 = ALLOCATE Bool + value_83 = LOAD 0 + result_init_84 = CALL Bool_init + result_34 = instance_82 + LABEL label_10 + IF result_34 GOTO label_5 + GOTO label_6 + LABEL label_5 + Main.divisor = GetAttr self divisor + instance_90 = ALLOCATE Int + value_91 = LOAD 1 + result_init_92 = CALL Int_init + left_87 = GetAttr Main.divisor value + right_88 = GetAttr instance_90 value + op_86 = left_87 + right_88 + result_85 = ALLOCATE Int + result_init_93 = CALL Int_init + SetAttr self divisor result_85 + GOTO label_4 + LABEL label_6 + result_33 = LOAD VOID + Main.testee = GetAttr self testee + Main.divisor = GetAttr self divisor + Main.divisor = GetAttr self divisor + left_103 = GetAttr Main.divisor value + right_104 = GetAttr Main.divisor value + op_102 = left_103 * right_104 + result_101 = ALLOCATE Int + result_init_107 = CALL Int_init + left_98 = GetAttr Main.testee value + right_99 = GetAttr result_101 value + op_97 = left_98 < right_99 + result_96 = ALLOCATE Bool + result_init_108 = CALL Bool_init + IF result_96 GOTO label_11 + instance_109 = ALLOCATE Int + value_110 = LOAD 0 + result_init_111 = CALL Int_init + result_95 = instance_109 + GOTO label_12 + LABEL label_11 + Main.testee = GetAttr self testee + SetAttr self out Main.testee + Main.out = GetAttr self out + result_114 = VCALL Main out_int + internal_117 = LOAD s_4 + instance_118 = ALLOCATE String + result_init_119 = CALL String_init + result_116 = VCALL Main out_string + result_95 = result_116 + LABEL label_12 + Main.stop = GetAttr self stop + Main.testee = GetAttr self testee + left_123 = GetAttr Main.stop value + right_124 = GetAttr Main.testee value + op_122 = left_123 <= right_124 + result_121 = ALLOCATE Bool + result_init_127 = CALL Bool_init + IF result_121 GOTO label_13 + internal_128 = LOAD s_5 + instance_129 = ALLOCATE String + result_init_130 = CALL String_init + result_120 = instance_129 + GOTO label_14 + LABEL label_13 + internal_132 = LOAD s_6 + instance_133 = ALLOCATE String + result_init_134 = CALL String_init + result_131 = VCALL String abort + result_120 = result_131 + LABEL label_14 + GOTO label_1 + LABEL label_3 + result_15 = LOAD VOID + SetAttr self m result_15 +} +function Main.main { + PARAM self + + LOCAL instance_0 + LOCAL value_1 + LOCAL result_init_2 + + instance_0 = ALLOCATE Int + value_1 = LOAD 0 + result_init_2 = CALL Int_init + + RETURN instance_0 +} \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 45895387..211f913b 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -700,6 +700,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 40($sp) +li $t0, 0 +sw $t0, 44($sp) move $t0, $sp lw $t1, 44($t0) addi $sp, $sp, -4 @@ -755,6 +757,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 68($sp) +li $t0, 1 +sw $t0, 72($sp) move $t0, $sp lw $t1, 72($t0) addi $sp, $sp, -4 @@ -1066,6 +1070,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 292($sp) +li $t0, 0 +sw $t0, 296($sp) move $t0, $sp lw $t1, 296($t0) addi $sp, $sp, -4 @@ -1125,6 +1131,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 308($sp) +li $t0, 1 +sw $t0, 312($sp) move $t0, $sp lw $t1, 312($t0) addi $sp, $sp, -4 @@ -1152,6 +1160,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 320($sp) +li $t0, 0 +sw $t0, 324($sp) move $t0, $sp lw $t1, 324($t0) addi $sp, $sp, -4 @@ -1182,6 +1192,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 332($sp) +li $t0, 0 +sw $t0, 336($sp) move $t0, $sp lw $t1, 336($t0) addi $sp, $sp, -4 @@ -1357,6 +1369,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 440($sp) +li $t0, 0 +sw $t0, 444($sp) move $t0, $sp lw $t1, 444($t0) addi $sp, $sp, -4 @@ -1571,6 +1585,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index f913c9d7..c7d94a49 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -699,6 +699,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 1 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -959,6 +961,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 @@ -995,6 +999,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1445,6 +1451,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 1 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1559,6 +1567,8 @@ sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) sw $t0, 4($sp) +li $t0, 1 +sw $t0, 8($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 @@ -1630,6 +1640,8 @@ sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) sw $t0, 16($sp) +li $t0, 0 +sw $t0, 20($sp) move $t0, $sp lw $t1, 20($t0) addi $sp, $sp, -4 diff --git a/tests/codegen/test.py b/tests/codegen/test.py index 7176cd9a..ac3228d7 100644 --- a/tests/codegen/test.py +++ b/tests/codegen/test.py @@ -1,12 +1,16 @@ -f1 = open('io_test.mips', 'r') +f1 = open('list_test.mips', 'r') lines_1 = f1.readlines() -f2 = open('io.mips', 'r') +f2 = open('list.mips', 'r') lines_2 = f2.readlines() print(len(lines_1)) print(len(lines_2)) +c = 0 for i in range(0, len(lines_1)): if lines_1[i] != lines_2[i]: print('line: ',i) print('f1: ', lines_1[i]) print('f2: ', lines_2[i]) + c += 1 + # if c == 15: + # break From af491666212925e99925ab0a313805e685c9888f Mon Sep 17 00:00:00 2001 From: hros18 Date: Sun, 13 Dec 2020 22:56:27 -0500 Subject: [PATCH 131/140] some fixxes in type inference for EqualNode, palindrome PASSED, arith PASSED --- src/visitors/transpilator.py | 39 ++++--- tests/codegen/arith.mips | 38 ++++--- tests/codegen/atoi.mips | 38 ++++--- tests/codegen/cells.mips | 57 +++++----- tests/codegen/complex.mips | 6 +- tests/codegen/graph.mips | 38 ++++--- tests/codegen/life.mips | 171 ++++++++++++++---------------- tests/codegen/new_complex.mips | 6 +- tests/codegen/palindrome.cil | 6 +- tests/codegen/palindrome.mips | 19 ++-- tests/codegen/palindrome_test.cil | 3 + tests/codegen/test.py | 4 +- 12 files changed, 205 insertions(+), 220 deletions(-) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 8465cbf4..014ae7de 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -1186,23 +1186,24 @@ def visit(self, node, scope, sscope): # print('left_value: ',left_value) # print('right: ', node.right) # print('right_value: ',right_value) - left_type = 'Int' - right_type = 'Int' - if hasattr(node.left, 'expr'): - left_type = self.context.exprs_dict[node.left.expr].name - else: - left_type = 'Int' - if isinstance(node.left, IntegerNode): - left_type = 'Int' - elif isinstance(node.left, BoolNode): - left_type = 'Bool' - elif isinstance(node.left, StringNode): - left_type = 'String' - else: - try: - left_type = (sscope.find_variable(node.left.id)).type.name - except: - left_type = 'Int' + # print('Got here') + left_type = self.context.exprs_dict[node.left].name + right_type = self.context.exprs_dict[node.right].name + # if hasattr(node.left, 'expr'): + # left_type = self.context.exprs_dict[node.left.expr].name + # else: + # left_type = 'Int' + # if isinstance(node.left, IntegerNode): + # left_type = 'Int' + # elif isinstance(node.left, BoolNode): + # left_type = 'Bool' + # elif isinstance(node.left, StringNode): + # left_type = 'String' + # else: + # try: + # left_type = (sscope.find_variable(node.left.id)).type.name + # except: + # left_type = 'Int' # left_type = (sscope.find_variable(node.left.id)).type.name.name # if hasattr(node.right, 'expr'): # right_type = self.context.exprs_dict[node.right.expr].name @@ -1210,6 +1211,10 @@ def visit(self, node, scope, sscope): # right_type = (sscope.find_variable(node.right.id)).type.name.name # if isinstance(node.left, StringNode) and isinstance(node.right, StringNode): + # print('----left_type ', left_type) + # print('----right_type,', right_type) + # print(node.left) + # print(node.right) if left_type == 'String': self.register_instruction(StaticCallNodeIL(op_local, 'String_equals', [ArgNodeIL(right_value), ArgNodeIL(left_value)], 'String')) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 17d507c6..cba58baa 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -4427,16 +4427,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 100($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 96($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) -seq $a0, $a0, $t1 -sw $a0, 52($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -4555,16 +4554,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 164($sp) -lw $t0, 128($sp) -lw $t1, 16($t0) -sw $t1, 120($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 124($sp) -lw $a0, 120($sp) -lw $t1, 124($sp) -seq $a0, $a0, $t1 -sw $a0, 116($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 116($sp) li $a0, 20 li $v0, 9 syscall diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index f718e230..5f8dd9ad 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -2744,16 +2744,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 100($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 96($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) -seq $a0, $a0, $t1 -sw $a0, 52($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -2872,16 +2871,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 164($sp) -lw $t0, 128($sp) -lw $t1, 16($t0) -sw $t1, 120($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 124($sp) -lw $a0, 120($sp) -lw $t1, 124($sp) -seq $a0, $a0, $t1 -sw $a0, 116($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 116($sp) li $a0, 20 li $v0, 9 syscall diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index fb93cc11..696991bf 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -1312,16 +1312,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 88($sp) -lw $t0, 76($sp) -lw $t1, 16($t0) -sw $t1, 68($sp) -lw $t0, 84($sp) -lw $t1, 16($t0) -sw $t1, 72($sp) -lw $a0, 68($sp) -lw $t1, 72($sp) -seq $a0, $a0, $t1 -sw $a0, 64($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 64($sp) li $a0, 20 li $v0, 9 syscall @@ -1444,16 +1443,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 152($sp) -lw $t0, 140($sp) -lw $t1, 16($t0) -sw $t1, 132($sp) -lw $t0, 148($sp) -lw $t1, 16($t0) -sw $t1, 136($sp) -lw $a0, 132($sp) -lw $t1, 136($sp) -seq $a0, $a0, $t1 -sw $a0, 128($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 128($sp) li $a0, 20 li $v0, 9 syscall @@ -1609,16 +1607,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 220($sp) -lw $t0, 208($sp) -lw $t1, 16($t0) -sw $t1, 200($sp) -lw $t0, 216($sp) -lw $t1, 16($t0) -sw $t1, 204($sp) -lw $a0, 200($sp) -lw $t1, 204($sp) -seq $a0, $a0, $t1 -sw $a0, 196($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 196($sp) li $a0, 20 li $v0, 9 syscall diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index a069949b..0e5264ea 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -756,11 +756,9 @@ lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 sw $a1, 72($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) +lw $t1, 64($sp) sw $t1, 56($sp) -lw $t0, 72($sp) -lw $t1, 16($t0) +lw $t1, 72($sp) sw $t1, 60($sp) lw $a0, 56($sp) lw $t1, 60($sp) diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index f8bafdda..a67e19e9 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -3802,16 +3802,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 100($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 96($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) -seq $a0, $a0, $t1 -sw $a0, 52($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -3930,16 +3929,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 164($sp) -lw $t0, 128($sp) -lw $t1, 16($t0) -sw $t1, 120($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 124($sp) -lw $a0, 120($sp) -lw $t1, 124($sp) -seq $a0, $a0, $t1 -sw $a0, 116($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 116($sp) li $a0, 20 li $v0, 9 syscall diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 7e12364f..e3cf4b6b 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -4862,16 +4862,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 148($sp) -lw $t0, 136($sp) -lw $t1, 16($t0) -sw $t1, 128($sp) -lw $t0, 144($sp) -lw $t1, 16($t0) -sw $t1, 132($sp) -lw $a0, 128($sp) -lw $t1, 132($sp) -seq $a0, $a0, $t1 -sw $a0, 124($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 124($sp) li $a0, 20 li $v0, 9 syscall @@ -4994,16 +4993,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 212($sp) -lw $t0, 200($sp) -lw $t1, 16($t0) -sw $t1, 192($sp) -lw $t0, 208($sp) -lw $t1, 16($t0) -sw $t1, 196($sp) -lw $a0, 192($sp) -lw $t1, 196($sp) -seq $a0, $a0, $t1 -sw $a0, 188($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 188($sp) li $a0, 20 li $v0, 9 syscall @@ -5159,16 +5157,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 280($sp) -lw $t0, 268($sp) -lw $t1, 16($t0) -sw $t1, 260($sp) -lw $t0, 276($sp) -lw $t1, 16($t0) -sw $t1, 264($sp) -lw $a0, 260($sp) -lw $t1, 264($sp) -seq $a0, $a0, $t1 -sw $a0, 256($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 268($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 256($sp) li $a0, 20 li $v0, 9 syscall @@ -5324,16 +5321,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 348($sp) -lw $t0, 336($sp) -lw $t1, 16($t0) -sw $t1, 328($sp) -lw $t0, 344($sp) -lw $t1, 16($t0) -sw $t1, 332($sp) -lw $a0, 328($sp) -lw $t1, 332($sp) -seq $a0, $a0, $t1 -sw $a0, 324($sp) +move $t0, $sp +lw $t1, 344($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 324($sp) li $a0, 20 li $v0, 9 syscall @@ -5489,16 +5485,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 416($sp) -lw $t0, 404($sp) -lw $t1, 16($t0) -sw $t1, 396($sp) -lw $t0, 412($sp) -lw $t1, 16($t0) -sw $t1, 400($sp) -lw $a0, 396($sp) -lw $t1, 400($sp) -seq $a0, $a0, $t1 -sw $a0, 392($sp) +move $t0, $sp +lw $t1, 412($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 392($sp) li $a0, 20 li $v0, 9 syscall @@ -5654,16 +5649,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 484($sp) -lw $t0, 472($sp) -lw $t1, 16($t0) -sw $t1, 464($sp) -lw $t0, 480($sp) -lw $t1, 16($t0) -sw $t1, 468($sp) -lw $a0, 464($sp) -lw $t1, 468($sp) -seq $a0, $a0, $t1 -sw $a0, 460($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 472($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 460($sp) li $a0, 20 li $v0, 9 syscall @@ -5819,16 +5813,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 552($sp) -lw $t0, 540($sp) -lw $t1, 16($t0) -sw $t1, 532($sp) -lw $t0, 548($sp) -lw $t1, 16($t0) -sw $t1, 536($sp) -lw $a0, 532($sp) -lw $t1, 536($sp) -seq $a0, $a0, $t1 -sw $a0, 528($sp) +move $t0, $sp +lw $t1, 548($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 540($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 528($sp) li $a0, 20 li $v0, 9 syscall @@ -5984,16 +5977,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 620($sp) -lw $t0, 608($sp) -lw $t1, 16($t0) -sw $t1, 600($sp) -lw $t0, 616($sp) -lw $t1, 16($t0) -sw $t1, 604($sp) -lw $a0, 600($sp) -lw $t1, 604($sp) -seq $a0, $a0, $t1 -sw $a0, 596($sp) +move $t0, $sp +lw $t1, 616($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 608($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 596($sp) li $a0, 20 li $v0, 9 syscall @@ -6336,16 +6328,15 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 128($sp) -lw $t0, 116($sp) -lw $t1, 16($t0) -sw $t1, 108($sp) -lw $t0, 124($sp) -lw $t1, 16($t0) -sw $t1, 112($sp) -lw $a0, 108($sp) -lw $t1, 112($sp) -seq $a0, $a0, $t1 -sw $a0, 104($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 104($sp) li $a0, 20 li $v0, 9 syscall diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index b04c5427..fda93f9f 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -748,11 +748,9 @@ lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 sw $a1, 68($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) +lw $t1, 64($sp) sw $t1, 56($sp) -lw $t0, 68($sp) -lw $t1, 16($t0) +lw $t1, 68($sp) sw $t1, 60($sp) lw $a0, 56($sp) lw $t1, 60($sp) diff --git a/tests/codegen/palindrome.cil b/tests/codegen/palindrome.cil index 27ff3d21..18268e24 100644 --- a/tests/codegen/palindrome.cil +++ b/tests/codegen/palindrome.cil @@ -60,11 +60,11 @@ s_0: Abort called from class s_1: empty_str: -s_3: enter a string +s_3: enter a string\n -s_4: that was not a palindrome +s_4: that was not a palindrome\n -s_5: that was a palindrome +s_5: that was a palindrome\n .CODE diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 7b05ac70..3a567b7b 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -970,16 +970,15 @@ lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 132($sp) -lw $t0, 104($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $t0, 132($sp) -lw $t1, 16($t0) -sw $t1, 100($sp) -lw $a0, 96($sp) -lw $t1, 100($sp) -seq $a0, $a0, $t1 -sw $a0, 92($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 92($sp) li $a0, 20 li $v0, 9 syscall diff --git a/tests/codegen/palindrome_test.cil b/tests/codegen/palindrome_test.cil index 3bb7d0a1..63d0f3db 100644 --- a/tests/codegen/palindrome_test.cil +++ b/tests/codegen/palindrome_test.cil @@ -61,9 +61,12 @@ s_1: empty_str: s_3: enter a string\n + s_4: that was not a palindrome\n + s_5: that was a palindrome\n + .CODE function main { diff --git a/tests/codegen/test.py b/tests/codegen/test.py index ac3228d7..eb6aa029 100644 --- a/tests/codegen/test.py +++ b/tests/codegen/test.py @@ -1,7 +1,7 @@ -f1 = open('list_test.mips', 'r') +f1 = open('palindrome_test.cil', 'r') lines_1 = f1.readlines() -f2 = open('list.mips', 'r') +f2 = open('palindrome.cil', 'r') lines_2 = f2.readlines() print(len(lines_1)) print(len(lines_2)) From a762e32861286fadae0167fbf475a0ee55016aee Mon Sep 17 00:00:00 2001 From: hros18 Date: Mon, 14 Dec 2020 01:42:25 -0500 Subject: [PATCH 132/140] let declarations fixxed, assign node il, cells PASSED life PASSED --- src/main.py | 1 + src/visitors/to_mips.py | 8 +- src/visitors/transpilator.py | 62 +- tests/codegen/arith.mips | 650 ++++++---- tests/codegen/cells.cil | 79 -- tests/codegen/cells.mips | 170 ++- tests/codegen/cells_test.cil | 80 -- tests/codegen/life.mips | 2190 ++++++++++++++++++---------------- tests/codegen/life_test.cil | 192 --- tests/codegen/test.py | 8 +- 10 files changed, 1768 insertions(+), 1672 deletions(-) diff --git a/src/main.py b/src/main.py index bfd7617b..6230e242 100644 --- a/src/main.py +++ b/src/main.py @@ -64,6 +64,7 @@ def main(): print('arg: ',x.dest) mips = MIPS() code = mips.visit(cil_ast) + print('Equals: ', mips.countStatic) # for c in cv.data: # print(str(c)) diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index f6880bf5..d9cbeba2 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -12,6 +12,7 @@ def __init__(self): self.text = '' self.data = '' self.count = 0 + self.countStatic = 0 self.mips_comm_for_operators = { '+' : 'add', '-' : 'sub', @@ -154,14 +155,16 @@ def visit(self, node): self.count += 1 print('AssignNodeIL') offset = self.var_offset[self.current_function.name][node.dest] - print('-----------TYPE---- ',type(node.source)) + print('-----------TYPE---- ',node.source) if node.source: + print('SOURCE') if isinstance(node.source, int): self.text += f'li $t1, {node.source}\n' else: right_offset = self.var_offset[self.current_function.name][node.source] self.text += f'lw $t1, {right_offset}($sp)\n' else: + print('LIST') self.text += f'la $t1, void\n' self.text += f'sw $t1, {offset}($sp)\n' @@ -292,7 +295,8 @@ def visit(self, node): @visitor.when(StaticCallNodeIL) def visit(self, node): print(self.count) - self.count += 1 + if node.function == 'String_equals': + self.countStatic += 1 print('StaticCallNodeIL') self.text += 'move $t0, $sp\n' # print('--------CALL------') diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 014ae7de..39cfb335 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -508,11 +508,15 @@ def visit(self, node, scope, sscope): cil_node_name = scope.find_cil_local(node.id) if self.is_defined_param(node.id): + print('-----------Assign----------------') + print('-----------expr_local ',expr_local ) self.register_instruction(AssignNodeIL(node.id, expr_local)) elif self.current_type.has_attr(node.id): cil_type_name = 'self' self.register_instruction(SetAttribNodeIL(cil_type_name, node.id, expr_local, self.current_type.name )) else: + print('-----------Assign----------------') + print('-----------expr_local ', expr_local) self.register_instruction(AssignNodeIL(cil_node_name, expr_local)) return expr_local @@ -543,6 +547,8 @@ def visit(self, node, scope, sscope): self.register_instruction(GotoIfNodeIL(cond_value, if_then_label)) else_value = self.visit(node.else_stm, scope, sscope) + print('-----------Cond----------------') + print('-----------else_value ', else_value) self.register_instruction(AssignNodeIL(result_local, else_value)) end_if_label = self.get_label() @@ -550,6 +556,8 @@ def visit(self, node, scope, sscope): self.register_instruction(LabelNodeIL(if_then_label)) then_value = self.visit(node.stm, scope, sscope) + print('-----------Cond----------------') + print('-----------then_value ', then_value) self.register_instruction(AssignNodeIL(result_local, then_value)) self.register_instruction(LabelNodeIL(end_if_label)) @@ -629,16 +637,44 @@ def visit(self, node, scope, sscope): body_value = self.visit(node.expr, let_scope, iscope) result_local = self.define_internal_local(scope = scope, name = "let_result") + print('-----------LET----------------') + print('-----------body_value ', body_value) + self.register_instruction(AssignNodeIL(result_local, body_value)) return result_local @visitor.when(LetDeclarationNode) def visit(self, node, scope, sscope): - expr_value = self.visit(node.expr, scope, sscope) - var_init = self.define_internal_local(scope = scope, name = node.id, cool_var_name= node.id) - self.register_instruction(AssignNodeIL(var_init, expr_value)) - return var_init + # print(type(node.expr)) + if node.expr != None: + expr_value = self.visit(node.expr, scope, sscope) + var_init = self.define_internal_local(scope = scope, name = node.id, cool_var_name= node.id) + print('-----------LET_Decl----------------') + print('-----------expr_value ', expr_value) + self.register_instruction(AssignNodeIL(var_init, expr_value)) + return var_init + else: + instance = None + if node.type in ['Int', 'Bool']: + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag, instance)) + value = self.define_internal_local(scope=scope, name="value") + self.register_instruction(LoadNodeIL(0,value)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ ArgNodeIL(value), ArgNodeIL(instance)], node.type)) + elif node.type == 'String': + instance = self.define_internal_local(scope=scope, name="instance") + self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag ,instance)) + value = self.define_internal_local(scope=scope, name="value") + self.register_instruction(LoadNodeIL('empty_str',value)) + result_init = self.define_internal_local(scope=scope, name="result_init") + self.register_instruction(StaticCallNodeIL(result_init, f'{node.type}_init', [ArgNodeIL(value), ArgNodeIL(instance)], node.type)) + + var_def = self.define_internal_local(scope = scope, name = node.id, cool_var_name=node.id) + self.register_instruction(AssignNodeIL(var_def, instance)) + return var_def + # @visitor.when(COOL_AST.LetVarDef) # def visit(self, node, scope): # instance = None @@ -694,9 +730,12 @@ def visit(self, node, scope, sscope): option_scope = scope.create_child() option_id = self.define_internal_local(scope=option_scope, name=option.id, cool_var_name=option.id) + print('-----------Case----------------') + print('-----------case_expr ', case_expr) self.register_instruction(AssignNodeIL(option_id, case_expr)) expr_result = self.visit(option.expr, option_scope, c_scp) - + print('-----------Case----------------') + print('-----------expr_result ', expr_result) self.register_instruction(AssignNodeIL(result_local, expr_result)) self.register_instruction(GotoNodeIL(exit_label)) @@ -1211,12 +1250,13 @@ def visit(self, node, scope, sscope): # right_type = (sscope.find_variable(node.right.id)).type.name.name # if isinstance(node.left, StringNode) and isinstance(node.right, StringNode): - # print('----left_type ', left_type) - # print('----right_type,', right_type) - # print(node.left) - # print(node.right) + print('----left_type ', left_type) + print('----right_type,', right_type) + print(node.left) + print(node.right) if left_type == 'String': self.register_instruction(StaticCallNodeIL(op_local, 'String_equals', [ArgNodeIL(right_value), ArgNodeIL(left_value)], 'String')) + print('Got string equals') # Allocate Bool result self.register_instruction(AllocateNodeIL('Bool',self.context.get_type('Bool').tag, result_local)) @@ -1265,7 +1305,9 @@ def visit(self, node, scope, sscope): right_type = 'Int' self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) else: - # print('got here where somewhere else') + print('---------Equal------') + print('-----------left_value ', left_value) + print('-----------right_value ', right_value) self.register_instruction(AssignNodeIL(left_local, left_value)) self.register_instruction(AssignNodeIL(right_local, right_value)) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index cba58baa..8e6684f5 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -808,21 +808,46 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra A.method2: -addi $sp, $sp, -44 +addi $sp, $sp, -56 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) -lw $t0, 52($sp) -lw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) sw $t1, 16($sp) -lw $t0, 56($sp) +lw $t0, 64($sp) lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) +sw $t1, 28($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) add $a0, $a0, $t1 -sw $a0, 12($sp) +sw $a0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -836,18 +861,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 24($sp) -lw $t1, 8($sp) -sw $t1, 4($sp) +sw $a1, 36($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) li $a0, 20 li $v0, 9 syscall @@ -861,45 +886,70 @@ li $t1, 5 sw $t1, 8($t0) la $t1, B_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal B_init -sw $a1, 40($sp) +sw $a1, 52($sp) move $t0, $sp -lw $t1, 4($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 32($sp) -lw $t1, 32($sp) -sw $t1, 44($sp) -lw $a1, 44($sp) +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) lw $ra, 0($sp) -addi $sp, $sp, 60 +addi $sp, $sp, 72 jr $ra A.method3: -addi $sp, $sp, -40 +addi $sp, $sp, -52 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) -lw $t0, 48($sp) -lw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) sw $t1, 16($sp) -lw $t1, 16($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t1, 28($sp) neg $a0, $t1 -sw $a0, 12($sp) +sw $a0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -913,18 +963,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 20($sp) -lw $t1, 8($sp) -sw $t1, 4($sp) +sw $a1, 32($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) li $a0, 20 li $v0, 9 syscall @@ -938,41 +988,41 @@ li $t1, 5 sw $t1, 8($t0) la $t1, C_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal C_init -sw $a1, 36($sp) +sw $a1, 48($sp) move $t0, $sp -lw $t1, 4($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 44($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 28($sp) -lw $t1, 28($sp) -sw $t1, 40($sp) -lw $a1, 40($sp) +sw $a1, 40($sp) +lw $t1, 40($sp) +sw $t1, 52($sp) +lw $a1, 52($sp) lw $ra, 0($sp) -addi $sp, $sp, 52 +addi $sp, $sp, 64 jr $ra A.method4: -addi $sp, $sp, -112 +addi $sp, $sp, -136 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 124($sp) +lw $t0, 148($sp) lw $t1, 16($t0) sw $t1, 16($sp) -lw $t0, 120($sp) +lw $t0, 144($sp) lw $t1, 16($t0) sw $t1, 20($sp) lw $a0, 16($sp) @@ -1005,18 +1055,43 @@ sw $a1, 24($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_1 -la $t1, void -sw $t1, 28($sp) -lw $t0, 124($sp) -lw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 28($sp) sw $t1, 40($sp) -lw $t0, 120($sp) +lw $t0, 148($sp) lw $t1, 16($t0) -sw $t1, 44($sp) -lw $a0, 40($sp) -lw $t1, 44($sp) +sw $t1, 52($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) sub $a0, $a0, $t1 -sw $a0, 36($sp) +sw $a0, 48($sp) li $a0, 20 li $v0, 9 syscall @@ -1030,18 +1105,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 48($sp) -lw $t1, 32($sp) -sw $t1, 28($sp) +sw $a1, 60($sp) +lw $t1, 44($sp) +sw $t1, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -1055,45 +1130,70 @@ li $t1, 5 sw $t1, 8($t0) la $t1, D_methods sw $t1, 12($t0) -sw $t0, 60($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal D_init -sw $a1, 64($sp) +sw $a1, 76($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 72($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 56($sp) -lw $t1, 56($sp) -sw $t1, 68($sp) +sw $a1, 68($sp) lw $t1, 68($sp) +sw $t1, 80($sp) +lw $t1, 80($sp) sw $t1, 4($sp) b label_2 label_1: -la $t1, void -sw $t1, 72($sp) -lw $t0, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +li $t0, 0 +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 92($sp) +lw $t1, 84($sp) +sw $t1, 96($sp) +lw $t0, 144($sp) lw $t1, 16($t0) -sw $t1, 84($sp) -lw $t0, 124($sp) +sw $t1, 108($sp) +lw $t0, 148($sp) lw $t1, 16($t0) -sw $t1, 88($sp) -lw $a0, 84($sp) -lw $t1, 88($sp) +sw $t1, 112($sp) +lw $a0, 108($sp) +lw $t1, 112($sp) sub $a0, $a0, $t1 -sw $a0, 80($sp) +sw $a0, 104($sp) li $a0, 20 li $v0, 9 syscall @@ -1107,18 +1207,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 76($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 92($sp) -lw $t1, 76($sp) -sw $t1, 72($sp) +sw $a1, 116($sp) +lw $t1, 100($sp) +sw $t1, 96($sp) li $a0, 20 li $v0, 9 syscall @@ -1132,35 +1232,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, D_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal D_init -sw $a1, 108($sp) +sw $a1, 132($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 100($sp) -lw $t1, 100($sp) -sw $t1, 112($sp) -lw $t1, 112($sp) +sw $a1, 124($sp) +lw $t1, 124($sp) +sw $t1, 136($sp) +lw $t1, 136($sp) sw $t1, 4($sp) label_2: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 128 +addi $sp, $sp, 152 jr $ra A.method5: addi $sp, $sp, -136 @@ -1413,21 +1513,46 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra B.method5: -addi $sp, $sp, -44 +addi $sp, $sp, -56 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) -lw $t0, 52($sp) -lw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) sw $t1, 16($sp) -lw $t0, 52($sp) +lw $t0, 64($sp) lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) +sw $t1, 28($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) mul $a0, $a0, $t1 -sw $a0, 12($sp) +sw $a0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -1441,18 +1566,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 24($sp) -lw $t1, 8($sp) -sw $t1, 4($sp) +sw $a1, 36($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) li $a0, 20 li $v0, 9 syscall @@ -1466,32 +1591,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, E_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal E_init -sw $a1, 40($sp) +sw $a1, 52($sp) move $t0, $sp -lw $t1, 4($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 32($sp) -lw $t1, 32($sp) -sw $t1, 44($sp) -lw $a1, 44($sp) +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) lw $ra, 0($sp) -addi $sp, $sp, 56 +addi $sp, $sp, 68 jr $ra C_init: addi $sp, $sp, -4 @@ -1508,17 +1633,42 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra C.method6: -addi $sp, $sp, -40 +addi $sp, $sp, -52 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) -lw $t0, 48($sp) -lw $t1, 16($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) sw $t1, 16($sp) -lw $t1, 16($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t1, 28($sp) neg $a0, $t1 -sw $a0, 12($sp) +sw $a0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -1532,18 +1682,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 20($sp) -lw $t1, 8($sp) -sw $t1, 4($sp) +sw $a1, 32($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) li $a0, 20 li $v0, 9 syscall @@ -1557,49 +1707,74 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 36($sp) +sw $a1, 48($sp) move $t0, $sp -lw $t1, 4($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 44($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 28($sp) -lw $t1, 28($sp) -sw $t1, 40($sp) -lw $a1, 40($sp) +sw $a1, 40($sp) +lw $t1, 40($sp) +sw $t1, 52($sp) +lw $a1, 52($sp) lw $ra, 0($sp) -addi $sp, $sp, 52 +addi $sp, $sp, 64 jr $ra C.method5: -addi $sp, $sp, -64 +addi $sp, $sp, -76 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) -lw $t0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 84($sp) lw $t1, 16($t0) -sw $t1, 32($sp) -lw $t0, 72($sp) +sw $t1, 44($sp) +lw $t0, 84($sp) lw $t1, 16($t0) -sw $t1, 36($sp) -lw $a0, 32($sp) -lw $t1, 36($sp) +sw $t1, 48($sp) +lw $a0, 44($sp) +lw $t1, 48($sp) mul $a0, $a0, $t1 -sw $a0, 28($sp) +sw $a0, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -1613,26 +1788,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 24($sp) +sw $t0, 36($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 40($sp) -lw $t0, 24($sp) +sw $a1, 52($sp) +lw $t0, 36($sp) lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 72($sp) +sw $t1, 28($sp) +lw $t0, 84($sp) lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) mul $a0, $a0, $t1 -sw $a0, 12($sp) +sw $a0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -1646,18 +1821,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 44($sp) -lw $t1, 8($sp) -sw $t1, 4($sp) +sw $a1, 56($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) li $a0, 20 li $v0, 9 syscall @@ -1671,32 +1846,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, E_methods sw $t1, 12($t0) -sw $t0, 56($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal E_init -sw $a1, 60($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 4($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 68($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 52($sp) -lw $t1, 52($sp) -sw $t1, 64($sp) -lw $a1, 64($sp) +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 76($sp) +lw $a1, 76($sp) lw $ra, 0($sp) -addi $sp, $sp, 76 +addi $sp, $sp, 88 jr $ra D_init: addi $sp, $sp, -4 @@ -2201,11 +2376,9 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra E.method6: -addi $sp, $sp, -56 +addi $sp, $sp, -68 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) li $a0, 20 li $v0, 9 syscall @@ -2219,29 +2392,56 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 24($sp) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 36($sp) li $t0, 8 -sw $t0, 28($sp) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 32($sp) -lw $t0, 64($sp) +sw $a1, 44($sp) +lw $t0, 76($sp) lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 24($sp) +sw $t1, 28($sp) +lw $t0, 36($sp) lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) beq $t1, 0, div_zero_error div $a0, $a0, $t1 -sw $a0, 12($sp) +sw $a0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -2255,18 +2455,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 36($sp) -lw $t1, 8($sp) -sw $t1, 4($sp) +sw $a1, 48($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) li $a0, 20 li $v0, 9 syscall @@ -2280,32 +2480,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 52($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 4($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 60($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 44($sp) -lw $t1, 44($sp) -sw $t1, 56($sp) -lw $a1, 56($sp) +sw $a1, 56($sp) +lw $t1, 56($sp) +sw $t1, 68($sp) +lw $a1, 68($sp) lw $ra, 0($sp) -addi $sp, $sp, 68 +addi $sp, $sp, 80 jr $ra A2I_init: addi $sp, $sp, -4 diff --git a/tests/codegen/cells.cil b/tests/codegen/cells.cil index 8ffe663e..cacb595a 100644 --- a/tests/codegen/cells.cil +++ b/tests/codegen/cells.cil @@ -1,82 +1,3 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type CellularAutomaton { - attribute population_map - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method init : CellularAutomaton.init - method print : CellularAutomaton.print - method num_cells : CellularAutomaton.num_cells - method cell : CellularAutomaton.cell - method cell_left_neighbor : CellularAutomaton.cell_left_neighbor - method cell_right_neighbor : CellularAutomaton.cell_right_neighbor - method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution - method evolve : CellularAutomaton.evolve -} -type Main { - attribute cells - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: X -s_4: . -s_5: X .CODE function main { diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 696991bf..dcd3ed03 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -1855,37 +1855,87 @@ lw $ra, 0($sp) addi $sp, $sp, 304 jr $ra CellularAutomaton.evolve: -addi $sp, $sp, -104 +addi $sp, $sp, -128 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 8($sp) -lw $t1, 8($sp) -sw $t1, 12($sp) -la $t1, void -sw $t1, 16($sp) +sw $a1, 20($sp) +lw $t1, 20($sp) +sw $t1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, empty_str +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) label_13: -lw $t0, 4($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 32($sp) -lw $t0, 12($sp) +sw $t1, 56($sp) +lw $t0, 24($sp) lw $t1, 16($t0) -sw $t1, 36($sp) -lw $a0, 32($sp) -lw $t1, 36($sp) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) slt $a0, $a0, $t1 -sw $a0, 28($sp) +sw $a0, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -1899,51 +1949,51 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 24($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 40($sp) -lw $t0, 24($sp) +sw $a1, 64($sp) +lw $t0, 48($sp) lw $a0, 16($t0) bnez $a0, label_14 b label_15 label_14: move $t0, $sp -lw $t1, 4($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 52($t2) jal $t3 -sw $a1, 48($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 44($sp) -lw $t1, 44($sp) -sw $t1, 16($sp) +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -1957,28 +2007,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 96($sp) li $t0, 1 -sw $t0, 76($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 80($sp) -lw $t0, 4($sp) +sw $a1, 104($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 64($sp) -lw $t0, 72($sp) +sw $t1, 88($sp) +lw $t0, 96($sp) lw $t1, 16($t0) -sw $t1, 68($sp) -lw $a0, 64($sp) -lw $t1, 68($sp) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) add $a0, $a0, $t1 -sw $a0, 60($sp) +sw $a0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -1992,32 +2042,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 56($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 84($sp) -lw $t1, 56($sp) -sw $t1, 4($sp) +sw $a1, 108($sp) +lw $t1, 80($sp) +sw $t1, 16($sp) b label_13 label_15: -lw $t0, 108($sp) -lw $t1, 16($sp) +lw $t0, 132($sp) +lw $t1, 40($sp) sw $t1, 16($t0) -lw $t1, 108($sp) -sw $t1, 96($sp) -lw $t1, 96($sp) -sw $t1, 100($sp) -lw $t1, 100($sp) -sw $t1, 104($sp) -lw $a1, 104($sp) +lw $t1, 132($sp) +sw $t1, 120($sp) +lw $t1, 120($sp) +sw $t1, 124($sp) +lw $t1, 124($sp) +sw $t1, 128($sp) +lw $a1, 128($sp) lw $ra, 0($sp) -addi $sp, $sp, 112 +addi $sp, $sp, 136 jr $ra Main_init: addi $sp, $sp, -4 diff --git a/tests/codegen/cells_test.cil b/tests/codegen/cells_test.cil index 45ffe65b..072c8338 100644 --- a/tests/codegen/cells_test.cil +++ b/tests/codegen/cells_test.cil @@ -1,83 +1,3 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type CellularAutomaton { - attribute population_map - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method init : CellularAutomaton.init - method print : CellularAutomaton.print - method num_cells : CellularAutomaton.num_cells - method cell : CellularAutomaton.cell - method cell_left_neighbor : CellularAutomaton.cell_left_neighbor - method cell_right_neighbor : CellularAutomaton.cell_right_neighbor - method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution - method evolve : CellularAutomaton.evolve -} -type Main { - attribute cells - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: \n -s_4: X -s_5: . -s_6: X .CODE function main { diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index e3cf4b6b..e99147ff 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -6460,7 +6460,7 @@ lw $ra, 0($sp) addi $sp, $sp, 180 jr $ra CellularAutomaton.evolve: -addi $sp, $sp, -116 +addi $sp, $sp, -128 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -6491,10 +6491,10 @@ sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) move $t0, $sp -lw $t1, 120($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -6503,19 +6503,44 @@ jal $t3 sw $a1, 20($sp) lw $t1, 20($sp) sw $t1, 24($sp) -la $t1, void -sw $t1, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +la $t0, empty_str +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) label_66: lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 44($sp) +sw $t1, 56($sp) lw $t0, 24($sp) lw $t1, 16($t0) -sw $t1, 48($sp) -lw $a0, 44($sp) -lw $t1, 48($sp) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) slt $a0, $a0, $t1 -sw $a0, 40($sp) +sw $a0, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -6529,17 +6554,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 52($sp) -lw $t0, 36($sp) +sw $a1, 64($sp) +lw $t0, 48($sp) lw $a0, 16($t0) bnez $a0, label_67 b label_68 @@ -6548,32 +6573,32 @@ move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 88($t2) jal $t3 -sw $a1, 60($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 56($sp) -lw $t1, 56($sp) -sw $t1, 28($sp) +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -6587,28 +6612,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 96($sp) li $t0, 1 -sw $t0, 88($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 92($sp) +sw $a1, 104($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 76($sp) -lw $t0, 84($sp) +sw $t1, 88($sp) +lw $t0, 96($sp) lw $t1, 16($t0) -sw $t1, 80($sp) -lw $a0, 76($sp) -lw $t1, 80($sp) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) add $a0, $a0, $t1 -sw $a0, 72($sp) +sw $a0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -6622,41 +6647,66 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 96($sp) -lw $t1, 68($sp) +sw $a1, 108($sp) +lw $t1, 80($sp) sw $t1, 16($sp) b label_66 label_68: -lw $t0, 120($sp) -lw $t1, 28($sp) +lw $t0, 132($sp) +lw $t1, 40($sp) sw $t1, 28($t0) +lw $t1, 132($sp) +sw $t1, 120($sp) lw $t1, 120($sp) -sw $t1, 108($sp) -lw $t1, 108($sp) -sw $t1, 112($sp) -lw $t1, 112($sp) -sw $t1, 116($sp) -lw $a1, 116($sp) +sw $t1, 124($sp) +lw $t1, 124($sp) +sw $t1, 128($sp) +lw $a1, 128($sp) lw $ra, 0($sp) -addi $sp, $sp, 124 +addi $sp, $sp, 136 jr $ra CellularAutomaton.option: -addi $sp, $sp, -1420 +addi $sp, $sp, -1432 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) la $t0, s_7 -sw $t0, 12($sp) +sw $t0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -6670,32 +6720,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 16($sp) +sw $t0, 28($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 20($sp) +sw $a1, 32($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 8($sp) +sw $a1, 20($sp) la $t0, s_8 -sw $t0, 28($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -6709,32 +6759,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 36($sp) +sw $a1, 48($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 36($sp) la $t0, s_9 -sw $t0, 44($sp) +sw $t0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -6748,32 +6798,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 52($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 40($sp) +sw $a1, 52($sp) la $t0, s_10 -sw $t0, 60($sp) +sw $t0, 72($sp) li $a0, 20 li $v0, 9 syscall @@ -6787,32 +6837,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 64($sp) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 68($sp) +sw $a1, 80($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 56($sp) +sw $a1, 68($sp) la $t0, s_11 -sw $t0, 76($sp) +sw $t0, 88($sp) li $a0, 20 li $v0, 9 syscall @@ -6826,32 +6876,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 84($sp) +sw $a1, 96($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 72($sp) +sw $a1, 84($sp) la $t0, s_12 -sw $t0, 92($sp) +sw $t0, 104($sp) li $a0, 20 li $v0, 9 syscall @@ -6865,32 +6915,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 100($sp) +sw $a1, 112($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 88($sp) +sw $a1, 100($sp) la $t0, s_13 -sw $t0, 108($sp) +sw $t0, 120($sp) li $a0, 20 li $v0, 9 syscall @@ -6904,32 +6954,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 112($sp) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 116($sp) +sw $a1, 128($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 104($sp) +sw $a1, 116($sp) la $t0, s_14 -sw $t0, 124($sp) +sw $t0, 136($sp) li $a0, 20 li $v0, 9 syscall @@ -6943,32 +6993,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 128($sp) +sw $t0, 140($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 132($sp) +sw $a1, 144($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 120($sp) +sw $a1, 132($sp) la $t0, s_15 -sw $t0, 140($sp) +sw $t0, 152($sp) li $a0, 20 li $v0, 9 syscall @@ -6982,32 +7032,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 144($sp) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 148($sp) +sw $a1, 160($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 136($sp) +sw $a1, 148($sp) la $t0, s_16 -sw $t0, 156($sp) +sw $t0, 168($sp) li $a0, 20 li $v0, 9 syscall @@ -7021,32 +7071,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 160($sp) +sw $t0, 172($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 164($sp) +sw $a1, 176($sp) move $t0, $sp -lw $t1, 160($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 152($sp) +sw $a1, 164($sp) la $t0, s_17 -sw $t0, 172($sp) +sw $t0, 184($sp) li $a0, 20 li $v0, 9 syscall @@ -7060,32 +7110,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 176($sp) +sw $t0, 188($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 180($sp) +sw $a1, 192($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 168($sp) +sw $a1, 180($sp) la $t0, s_18 -sw $t0, 188($sp) +sw $t0, 200($sp) li $a0, 20 li $v0, 9 syscall @@ -7099,32 +7149,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 192($sp) +sw $t0, 204($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 196($sp) +sw $a1, 208($sp) move $t0, $sp -lw $t1, 192($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 184($sp) +sw $a1, 196($sp) la $t0, s_19 -sw $t0, 204($sp) +sw $t0, 216($sp) li $a0, 20 li $v0, 9 syscall @@ -7138,32 +7188,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 208($sp) +sw $t0, 220($sp) move $t0, $sp -lw $t1, 204($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 212($sp) +sw $a1, 224($sp) move $t0, $sp -lw $t1, 208($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 200($sp) +sw $a1, 212($sp) la $t0, s_20 -sw $t0, 220($sp) +sw $t0, 232($sp) li $a0, 20 li $v0, 9 syscall @@ -7177,32 +7227,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 224($sp) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 220($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 224($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 228($sp) +sw $a1, 240($sp) move $t0, $sp -lw $t1, 224($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 216($sp) +sw $a1, 228($sp) la $t0, s_21 -sw $t0, 236($sp) +sw $t0, 248($sp) li $a0, 20 li $v0, 9 syscall @@ -7216,32 +7266,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 252($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 244($sp) +sw $a1, 256($sp) move $t0, $sp -lw $t1, 240($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 232($sp) +sw $a1, 244($sp) la $t0, s_22 -sw $t0, 252($sp) +sw $t0, 264($sp) li $a0, 20 li $v0, 9 syscall @@ -7255,32 +7305,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 256($sp) +sw $t0, 268($sp) move $t0, $sp -lw $t1, 252($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 260($sp) +sw $a1, 272($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 248($sp) +sw $a1, 260($sp) la $t0, s_23 -sw $t0, 268($sp) +sw $t0, 280($sp) li $a0, 20 li $v0, 9 syscall @@ -7294,32 +7344,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 272($sp) +sw $t0, 284($sp) move $t0, $sp -lw $t1, 268($t0) +lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 272($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 276($sp) +sw $a1, 288($sp) move $t0, $sp -lw $t1, 272($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 264($sp) +sw $a1, 276($sp) la $t0, s_24 -sw $t0, 284($sp) +sw $t0, 296($sp) li $a0, 20 li $v0, 9 syscall @@ -7333,32 +7383,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 300($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 292($sp) +sw $a1, 304($sp) move $t0, $sp -lw $t1, 288($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 280($sp) +sw $a1, 292($sp) la $t0, s_25 -sw $t0, 300($sp) +sw $t0, 312($sp) li $a0, 20 li $v0, 9 syscall @@ -7372,32 +7422,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 304($sp) +sw $t0, 316($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 304($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 308($sp) +sw $a1, 320($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 296($sp) +sw $a1, 308($sp) la $t0, s_26 -sw $t0, 316($sp) +sw $t0, 328($sp) li $a0, 20 li $v0, 9 syscall @@ -7411,32 +7461,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 320($sp) +sw $t0, 332($sp) move $t0, $sp -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 324($sp) +sw $a1, 336($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 312($sp) +sw $a1, 324($sp) la $t0, s_27 -sw $t0, 332($sp) +sw $t0, 344($sp) li $a0, 20 li $v0, 9 syscall @@ -7450,32 +7500,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 336($sp) +sw $t0, 348($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 336($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 340($sp) +sw $a1, 352($sp) move $t0, $sp -lw $t1, 336($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 328($sp) +sw $a1, 340($sp) la $t0, s_28 -sw $t0, 348($sp) +sw $t0, 360($sp) li $a0, 20 li $v0, 9 syscall @@ -7489,32 +7539,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 352($sp) +sw $t0, 364($sp) move $t0, $sp -lw $t1, 348($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 352($t0) +lw $t1, 364($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 356($sp) +sw $a1, 368($sp) move $t0, $sp -lw $t1, 352($t0) +lw $t1, 364($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 344($sp) +sw $a1, 356($sp) la $t0, s_29 -sw $t0, 364($sp) +sw $t0, 376($sp) li $a0, 20 li $v0, 9 syscall @@ -7528,45 +7578,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 368($sp) +sw $t0, 380($sp) move $t0, $sp -lw $t1, 364($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 372($sp) +sw $a1, 384($sp) move $t0, $sp -lw $t1, 368($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 360($sp) +sw $a1, 372($sp) move $t0, $sp -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 376($sp) -lw $t1, 376($sp) -sw $t1, 4($sp) +sw $a1, 388($sp) +lw $t1, 388($sp) +sw $t1, 16($sp) la $t0, s_3 -sw $t0, 388($sp) +sw $t0, 400($sp) li $a0, 20 li $v0, 9 syscall @@ -7580,30 +7630,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 392($sp) +sw $t0, 404($sp) move $t0, $sp -lw $t1, 388($t0) +lw $t1, 400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 392($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 396($sp) +sw $a1, 408($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 384($sp) +sw $a1, 396($sp) li $a0, 20 li $v0, 9 syscall @@ -7617,28 +7667,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 420($sp) +sw $t0, 432($sp) li $t0, 1 -sw $t0, 424($sp) +sw $t0, 436($sp) move $t0, $sp -lw $t1, 424($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 420($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 428($sp) -lw $t0, 4($sp) +sw $a1, 440($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 412($sp) -lw $t0, 420($sp) +sw $t1, 424($sp) +lw $t0, 432($sp) lw $t1, 16($t0) -sw $t1, 416($sp) -lw $a0, 412($sp) -lw $t1, 416($sp) +sw $t1, 428($sp) +lw $a0, 424($sp) +lw $t1, 428($sp) seq $a0, $a0, $t1 -sw $a0, 408($sp) +sw $a0, 420($sp) li $a0, 20 li $v0, 9 syscall @@ -7652,17 +7702,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 404($sp) +sw $t0, 416($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 404($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 432($sp) -lw $t0, 404($sp) +sw $a1, 444($sp) +lw $t0, 416($sp) lw $a0, 16($t0) bnez $a0, label_69 li $a0, 20 @@ -7678,28 +7728,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 456($sp) +sw $t0, 468($sp) li $t0, 2 -sw $t0, 460($sp) +sw $t0, 472($sp) move $t0, $sp -lw $t1, 460($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 464($sp) -lw $t0, 4($sp) +sw $a1, 476($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 448($sp) -lw $t0, 456($sp) +sw $t1, 460($sp) +lw $t0, 468($sp) lw $t1, 16($t0) -sw $t1, 452($sp) -lw $a0, 448($sp) -lw $t1, 452($sp) +sw $t1, 464($sp) +lw $a0, 460($sp) +lw $t1, 464($sp) seq $a0, $a0, $t1 -sw $a0, 444($sp) +sw $a0, 456($sp) li $a0, 20 li $v0, 9 syscall @@ -7713,17 +7763,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 440($sp) +sw $t0, 452($sp) move $t0, $sp -lw $t1, 444($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 440($t0) +lw $t1, 452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 468($sp) -lw $t0, 440($sp) +sw $a1, 480($sp) +lw $t0, 452($sp) lw $a0, 16($t0) bnez $a0, label_70 li $a0, 20 @@ -7739,28 +7789,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 492($sp) +sw $t0, 504($sp) li $t0, 3 -sw $t0, 496($sp) +sw $t0, 508($sp) move $t0, $sp -lw $t1, 496($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 500($sp) -lw $t0, 4($sp) +sw $a1, 512($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 484($sp) -lw $t0, 492($sp) +sw $t1, 496($sp) +lw $t0, 504($sp) lw $t1, 16($t0) -sw $t1, 488($sp) -lw $a0, 484($sp) -lw $t1, 488($sp) +sw $t1, 500($sp) +lw $a0, 496($sp) +lw $t1, 500($sp) seq $a0, $a0, $t1 -sw $a0, 480($sp) +sw $a0, 492($sp) li $a0, 20 li $v0, 9 syscall @@ -7774,17 +7824,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 476($sp) +sw $t0, 488($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 476($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 504($sp) -lw $t0, 476($sp) +sw $a1, 516($sp) +lw $t0, 488($sp) lw $a0, 16($t0) bnez $a0, label_71 li $a0, 20 @@ -7800,28 +7850,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 528($sp) +sw $t0, 540($sp) li $t0, 4 -sw $t0, 532($sp) +sw $t0, 544($sp) move $t0, $sp -lw $t1, 532($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 528($t0) +lw $t1, 540($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 536($sp) -lw $t0, 4($sp) +sw $a1, 548($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 520($sp) -lw $t0, 528($sp) +sw $t1, 532($sp) +lw $t0, 540($sp) lw $t1, 16($t0) -sw $t1, 524($sp) -lw $a0, 520($sp) -lw $t1, 524($sp) +sw $t1, 536($sp) +lw $a0, 532($sp) +lw $t1, 536($sp) seq $a0, $a0, $t1 -sw $a0, 516($sp) +sw $a0, 528($sp) li $a0, 20 li $v0, 9 syscall @@ -7835,17 +7885,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 512($sp) +sw $t0, 524($sp) move $t0, $sp -lw $t1, 516($t0) +lw $t1, 528($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 512($t0) +lw $t1, 524($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 540($sp) -lw $t0, 512($sp) +sw $a1, 552($sp) +lw $t0, 524($sp) lw $a0, 16($t0) bnez $a0, label_72 li $a0, 20 @@ -7861,28 +7911,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 564($sp) +sw $t0, 576($sp) li $t0, 5 -sw $t0, 568($sp) +sw $t0, 580($sp) move $t0, $sp -lw $t1, 568($t0) +lw $t1, 580($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 564($t0) +lw $t1, 576($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 572($sp) -lw $t0, 4($sp) +sw $a1, 584($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 556($sp) -lw $t0, 564($sp) +sw $t1, 568($sp) +lw $t0, 576($sp) lw $t1, 16($t0) -sw $t1, 560($sp) -lw $a0, 556($sp) -lw $t1, 560($sp) +sw $t1, 572($sp) +lw $a0, 568($sp) +lw $t1, 572($sp) seq $a0, $a0, $t1 -sw $a0, 552($sp) +sw $a0, 564($sp) li $a0, 20 li $v0, 9 syscall @@ -7896,17 +7946,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 548($sp) +sw $t0, 560($sp) move $t0, $sp -lw $t1, 552($t0) +lw $t1, 564($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 560($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 576($sp) -lw $t0, 548($sp) +sw $a1, 588($sp) +lw $t0, 560($sp) lw $a0, 16($t0) bnez $a0, label_73 li $a0, 20 @@ -7922,28 +7972,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 600($sp) +sw $t0, 612($sp) li $t0, 6 -sw $t0, 604($sp) +sw $t0, 616($sp) move $t0, $sp -lw $t1, 604($t0) +lw $t1, 616($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 600($t0) +lw $t1, 612($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 608($sp) -lw $t0, 4($sp) +sw $a1, 620($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 592($sp) -lw $t0, 600($sp) +sw $t1, 604($sp) +lw $t0, 612($sp) lw $t1, 16($t0) -sw $t1, 596($sp) -lw $a0, 592($sp) -lw $t1, 596($sp) +sw $t1, 608($sp) +lw $a0, 604($sp) +lw $t1, 608($sp) seq $a0, $a0, $t1 -sw $a0, 588($sp) +sw $a0, 600($sp) li $a0, 20 li $v0, 9 syscall @@ -7957,17 +8007,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 584($sp) +sw $t0, 596($sp) move $t0, $sp -lw $t1, 588($t0) +lw $t1, 600($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 584($t0) +lw $t1, 596($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 612($sp) -lw $t0, 584($sp) +sw $a1, 624($sp) +lw $t0, 596($sp) lw $a0, 16($t0) bnez $a0, label_74 li $a0, 20 @@ -7983,28 +8033,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 636($sp) +sw $t0, 648($sp) li $t0, 7 -sw $t0, 640($sp) +sw $t0, 652($sp) move $t0, $sp -lw $t1, 640($t0) +lw $t1, 652($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 636($t0) +lw $t1, 648($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 644($sp) -lw $t0, 4($sp) +sw $a1, 656($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 628($sp) -lw $t0, 636($sp) +sw $t1, 640($sp) +lw $t0, 648($sp) lw $t1, 16($t0) -sw $t1, 632($sp) -lw $a0, 628($sp) -lw $t1, 632($sp) +sw $t1, 644($sp) +lw $a0, 640($sp) +lw $t1, 644($sp) seq $a0, $a0, $t1 -sw $a0, 624($sp) +sw $a0, 636($sp) li $a0, 20 li $v0, 9 syscall @@ -8018,17 +8068,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 620($sp) +sw $t0, 632($sp) move $t0, $sp -lw $t1, 624($t0) +lw $t1, 636($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 620($t0) +lw $t1, 632($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 648($sp) -lw $t0, 620($sp) +sw $a1, 660($sp) +lw $t0, 632($sp) lw $a0, 16($t0) bnez $a0, label_75 li $a0, 20 @@ -8044,28 +8094,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 672($sp) +sw $t0, 684($sp) li $t0, 8 -sw $t0, 676($sp) +sw $t0, 688($sp) move $t0, $sp -lw $t1, 676($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 672($t0) +lw $t1, 684($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 680($sp) -lw $t0, 4($sp) +sw $a1, 692($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 664($sp) -lw $t0, 672($sp) +sw $t1, 676($sp) +lw $t0, 684($sp) lw $t1, 16($t0) -sw $t1, 668($sp) -lw $a0, 664($sp) -lw $t1, 668($sp) +sw $t1, 680($sp) +lw $a0, 676($sp) +lw $t1, 680($sp) seq $a0, $a0, $t1 -sw $a0, 660($sp) +sw $a0, 672($sp) li $a0, 20 li $v0, 9 syscall @@ -8079,17 +8129,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 656($sp) +sw $t0, 668($sp) move $t0, $sp -lw $t1, 660($t0) +lw $t1, 672($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 668($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 684($sp) -lw $t0, 656($sp) +sw $a1, 696($sp) +lw $t0, 668($sp) lw $a0, 16($t0) bnez $a0, label_76 li $a0, 20 @@ -8105,28 +8155,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 708($sp) +sw $t0, 720($sp) li $t0, 9 -sw $t0, 712($sp) +sw $t0, 724($sp) move $t0, $sp -lw $t1, 712($t0) +lw $t1, 724($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 708($t0) +lw $t1, 720($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 716($sp) -lw $t0, 4($sp) +sw $a1, 728($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 700($sp) -lw $t0, 708($sp) +sw $t1, 712($sp) +lw $t0, 720($sp) lw $t1, 16($t0) -sw $t1, 704($sp) -lw $a0, 700($sp) -lw $t1, 704($sp) +sw $t1, 716($sp) +lw $a0, 712($sp) +lw $t1, 716($sp) seq $a0, $a0, $t1 -sw $a0, 696($sp) +sw $a0, 708($sp) li $a0, 20 li $v0, 9 syscall @@ -8140,17 +8190,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 692($sp) +sw $t0, 704($sp) move $t0, $sp -lw $t1, 696($t0) +lw $t1, 708($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 692($t0) +lw $t1, 704($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 720($sp) -lw $t0, 692($sp) +sw $a1, 732($sp) +lw $t0, 704($sp) lw $a0, 16($t0) bnez $a0, label_77 li $a0, 20 @@ -8166,28 +8216,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 744($sp) +sw $t0, 756($sp) li $t0, 10 -sw $t0, 748($sp) +sw $t0, 760($sp) move $t0, $sp -lw $t1, 748($t0) +lw $t1, 760($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 744($t0) +lw $t1, 756($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 752($sp) -lw $t0, 4($sp) +sw $a1, 764($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 736($sp) -lw $t0, 744($sp) +sw $t1, 748($sp) +lw $t0, 756($sp) lw $t1, 16($t0) -sw $t1, 740($sp) -lw $a0, 736($sp) -lw $t1, 740($sp) +sw $t1, 752($sp) +lw $a0, 748($sp) +lw $t1, 752($sp) seq $a0, $a0, $t1 -sw $a0, 732($sp) +sw $a0, 744($sp) li $a0, 20 li $v0, 9 syscall @@ -8201,17 +8251,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 728($sp) +sw $t0, 740($sp) move $t0, $sp -lw $t1, 732($t0) +lw $t1, 744($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 728($t0) +lw $t1, 740($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 756($sp) -lw $t0, 728($sp) +sw $a1, 768($sp) +lw $t0, 740($sp) lw $a0, 16($t0) bnez $a0, label_78 li $a0, 20 @@ -8227,28 +8277,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 780($sp) +sw $t0, 792($sp) li $t0, 11 -sw $t0, 784($sp) +sw $t0, 796($sp) move $t0, $sp -lw $t1, 784($t0) +lw $t1, 796($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 780($t0) +lw $t1, 792($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 788($sp) -lw $t0, 4($sp) +sw $a1, 800($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 772($sp) -lw $t0, 780($sp) +sw $t1, 784($sp) +lw $t0, 792($sp) lw $t1, 16($t0) -sw $t1, 776($sp) -lw $a0, 772($sp) -lw $t1, 776($sp) +sw $t1, 788($sp) +lw $a0, 784($sp) +lw $t1, 788($sp) seq $a0, $a0, $t1 -sw $a0, 768($sp) +sw $a0, 780($sp) li $a0, 20 li $v0, 9 syscall @@ -8262,17 +8312,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 764($sp) +sw $t0, 776($sp) move $t0, $sp -lw $t1, 768($t0) +lw $t1, 780($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 764($t0) +lw $t1, 776($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 792($sp) -lw $t0, 764($sp) +sw $a1, 804($sp) +lw $t0, 776($sp) lw $a0, 16($t0) bnez $a0, label_79 li $a0, 20 @@ -8288,28 +8338,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 816($sp) +sw $t0, 828($sp) li $t0, 12 -sw $t0, 820($sp) +sw $t0, 832($sp) move $t0, $sp -lw $t1, 820($t0) +lw $t1, 832($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 816($t0) +lw $t1, 828($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 824($sp) -lw $t0, 4($sp) +sw $a1, 836($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 808($sp) -lw $t0, 816($sp) +sw $t1, 820($sp) +lw $t0, 828($sp) lw $t1, 16($t0) -sw $t1, 812($sp) -lw $a0, 808($sp) -lw $t1, 812($sp) +sw $t1, 824($sp) +lw $a0, 820($sp) +lw $t1, 824($sp) seq $a0, $a0, $t1 -sw $a0, 804($sp) +sw $a0, 816($sp) li $a0, 20 li $v0, 9 syscall @@ -8323,17 +8373,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 800($sp) +sw $t0, 812($sp) move $t0, $sp -lw $t1, 804($t0) +lw $t1, 816($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 800($t0) +lw $t1, 812($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 828($sp) -lw $t0, 800($sp) +sw $a1, 840($sp) +lw $t0, 812($sp) lw $a0, 16($t0) bnez $a0, label_80 li $a0, 20 @@ -8349,28 +8399,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 852($sp) +sw $t0, 864($sp) li $t0, 13 -sw $t0, 856($sp) +sw $t0, 868($sp) move $t0, $sp -lw $t1, 856($t0) +lw $t1, 868($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 852($t0) +lw $t1, 864($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 860($sp) -lw $t0, 4($sp) +sw $a1, 872($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 844($sp) -lw $t0, 852($sp) +sw $t1, 856($sp) +lw $t0, 864($sp) lw $t1, 16($t0) -sw $t1, 848($sp) -lw $a0, 844($sp) -lw $t1, 848($sp) +sw $t1, 860($sp) +lw $a0, 856($sp) +lw $t1, 860($sp) seq $a0, $a0, $t1 -sw $a0, 840($sp) +sw $a0, 852($sp) li $a0, 20 li $v0, 9 syscall @@ -8384,17 +8434,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 836($sp) +sw $t0, 848($sp) move $t0, $sp -lw $t1, 840($t0) +lw $t1, 852($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 836($t0) +lw $t1, 848($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 864($sp) -lw $t0, 836($sp) +sw $a1, 876($sp) +lw $t0, 848($sp) lw $a0, 16($t0) bnez $a0, label_81 li $a0, 20 @@ -8410,28 +8460,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 888($sp) +sw $t0, 900($sp) li $t0, 14 -sw $t0, 892($sp) +sw $t0, 904($sp) move $t0, $sp -lw $t1, 892($t0) +lw $t1, 904($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 888($t0) +lw $t1, 900($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 896($sp) -lw $t0, 4($sp) +sw $a1, 908($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 880($sp) -lw $t0, 888($sp) +sw $t1, 892($sp) +lw $t0, 900($sp) lw $t1, 16($t0) -sw $t1, 884($sp) -lw $a0, 880($sp) -lw $t1, 884($sp) +sw $t1, 896($sp) +lw $a0, 892($sp) +lw $t1, 896($sp) seq $a0, $a0, $t1 -sw $a0, 876($sp) +sw $a0, 888($sp) li $a0, 20 li $v0, 9 syscall @@ -8445,17 +8495,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 872($sp) +sw $t0, 884($sp) move $t0, $sp -lw $t1, 876($t0) +lw $t1, 888($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 872($t0) +lw $t1, 884($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 900($sp) -lw $t0, 872($sp) +sw $a1, 912($sp) +lw $t0, 884($sp) lw $a0, 16($t0) bnez $a0, label_82 li $a0, 20 @@ -8471,28 +8521,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 924($sp) +sw $t0, 936($sp) li $t0, 15 -sw $t0, 928($sp) +sw $t0, 940($sp) move $t0, $sp -lw $t1, 928($t0) +lw $t1, 940($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 924($t0) +lw $t1, 936($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 932($sp) -lw $t0, 4($sp) +sw $a1, 944($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 916($sp) -lw $t0, 924($sp) +sw $t1, 928($sp) +lw $t0, 936($sp) lw $t1, 16($t0) -sw $t1, 920($sp) -lw $a0, 916($sp) -lw $t1, 920($sp) +sw $t1, 932($sp) +lw $a0, 928($sp) +lw $t1, 932($sp) seq $a0, $a0, $t1 -sw $a0, 912($sp) +sw $a0, 924($sp) li $a0, 20 li $v0, 9 syscall @@ -8506,17 +8556,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 908($sp) +sw $t0, 920($sp) move $t0, $sp -lw $t1, 912($t0) +lw $t1, 924($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 908($t0) +lw $t1, 920($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 936($sp) -lw $t0, 908($sp) +sw $a1, 948($sp) +lw $t0, 920($sp) lw $a0, 16($t0) bnez $a0, label_83 li $a0, 20 @@ -8532,28 +8582,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 960($sp) +sw $t0, 972($sp) li $t0, 16 -sw $t0, 964($sp) +sw $t0, 976($sp) move $t0, $sp -lw $t1, 964($t0) +lw $t1, 976($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 960($t0) +lw $t1, 972($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 968($sp) -lw $t0, 4($sp) +sw $a1, 980($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 952($sp) -lw $t0, 960($sp) +sw $t1, 964($sp) +lw $t0, 972($sp) lw $t1, 16($t0) -sw $t1, 956($sp) -lw $a0, 952($sp) -lw $t1, 956($sp) +sw $t1, 968($sp) +lw $a0, 964($sp) +lw $t1, 968($sp) seq $a0, $a0, $t1 -sw $a0, 948($sp) +sw $a0, 960($sp) li $a0, 20 li $v0, 9 syscall @@ -8567,17 +8617,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 944($sp) +sw $t0, 956($sp) move $t0, $sp -lw $t1, 948($t0) +lw $t1, 960($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 944($t0) +lw $t1, 956($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 972($sp) -lw $t0, 944($sp) +sw $a1, 984($sp) +lw $t0, 956($sp) lw $a0, 16($t0) bnez $a0, label_84 li $a0, 20 @@ -8593,28 +8643,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 996($sp) +sw $t0, 1008($sp) li $t0, 17 -sw $t0, 1000($sp) +sw $t0, 1012($sp) move $t0, $sp -lw $t1, 1000($t0) +lw $t1, 1012($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 996($t0) +lw $t1, 1008($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1004($sp) -lw $t0, 4($sp) +sw $a1, 1016($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 988($sp) -lw $t0, 996($sp) +sw $t1, 1000($sp) +lw $t0, 1008($sp) lw $t1, 16($t0) -sw $t1, 992($sp) -lw $a0, 988($sp) -lw $t1, 992($sp) +sw $t1, 1004($sp) +lw $a0, 1000($sp) +lw $t1, 1004($sp) seq $a0, $a0, $t1 -sw $a0, 984($sp) +sw $a0, 996($sp) li $a0, 20 li $v0, 9 syscall @@ -8628,17 +8678,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 980($sp) +sw $t0, 992($sp) move $t0, $sp -lw $t1, 984($t0) +lw $t1, 996($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 980($t0) +lw $t1, 992($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1008($sp) -lw $t0, 980($sp) +sw $a1, 1020($sp) +lw $t0, 992($sp) lw $a0, 16($t0) bnez $a0, label_85 li $a0, 20 @@ -8654,28 +8704,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1032($sp) +sw $t0, 1044($sp) li $t0, 18 -sw $t0, 1036($sp) +sw $t0, 1048($sp) move $t0, $sp -lw $t1, 1036($t0) +lw $t1, 1048($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1032($t0) +lw $t1, 1044($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1040($sp) -lw $t0, 4($sp) +sw $a1, 1052($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1024($sp) -lw $t0, 1032($sp) +sw $t1, 1036($sp) +lw $t0, 1044($sp) lw $t1, 16($t0) -sw $t1, 1028($sp) -lw $a0, 1024($sp) -lw $t1, 1028($sp) +sw $t1, 1040($sp) +lw $a0, 1036($sp) +lw $t1, 1040($sp) seq $a0, $a0, $t1 -sw $a0, 1020($sp) +sw $a0, 1032($sp) li $a0, 20 li $v0, 9 syscall @@ -8689,17 +8739,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1016($sp) +sw $t0, 1028($sp) move $t0, $sp -lw $t1, 1020($t0) +lw $t1, 1032($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1016($t0) +lw $t1, 1028($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1044($sp) -lw $t0, 1016($sp) +sw $a1, 1056($sp) +lw $t0, 1028($sp) lw $a0, 16($t0) bnez $a0, label_86 li $a0, 20 @@ -8715,28 +8765,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1068($sp) +sw $t0, 1080($sp) li $t0, 19 -sw $t0, 1072($sp) +sw $t0, 1084($sp) move $t0, $sp -lw $t1, 1072($t0) +lw $t1, 1084($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1068($t0) +lw $t1, 1080($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1076($sp) -lw $t0, 4($sp) +sw $a1, 1088($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1060($sp) -lw $t0, 1068($sp) +sw $t1, 1072($sp) +lw $t0, 1080($sp) lw $t1, 16($t0) -sw $t1, 1064($sp) -lw $a0, 1060($sp) -lw $t1, 1064($sp) +sw $t1, 1076($sp) +lw $a0, 1072($sp) +lw $t1, 1076($sp) seq $a0, $a0, $t1 -sw $a0, 1056($sp) +sw $a0, 1068($sp) li $a0, 20 li $v0, 9 syscall @@ -8750,17 +8800,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1052($sp) +sw $t0, 1064($sp) move $t0, $sp -lw $t1, 1056($t0) +lw $t1, 1068($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1052($t0) +lw $t1, 1064($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1080($sp) -lw $t0, 1052($sp) +sw $a1, 1092($sp) +lw $t0, 1064($sp) lw $a0, 16($t0) bnez $a0, label_87 li $a0, 20 @@ -8776,28 +8826,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1104($sp) +sw $t0, 1116($sp) li $t0, 20 -sw $t0, 1108($sp) +sw $t0, 1120($sp) move $t0, $sp -lw $t1, 1108($t0) +lw $t1, 1120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1104($t0) +lw $t1, 1116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1112($sp) -lw $t0, 4($sp) +sw $a1, 1124($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1096($sp) -lw $t0, 1104($sp) +sw $t1, 1108($sp) +lw $t0, 1116($sp) lw $t1, 16($t0) -sw $t1, 1100($sp) -lw $a0, 1096($sp) -lw $t1, 1100($sp) +sw $t1, 1112($sp) +lw $a0, 1108($sp) +lw $t1, 1112($sp) seq $a0, $a0, $t1 -sw $a0, 1092($sp) +sw $a0, 1104($sp) li $a0, 20 li $v0, 9 syscall @@ -8811,17 +8861,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1088($sp) +sw $t0, 1100($sp) move $t0, $sp -lw $t1, 1092($t0) +lw $t1, 1104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1088($t0) +lw $t1, 1100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1116($sp) -lw $t0, 1088($sp) +sw $a1, 1128($sp) +lw $t0, 1100($sp) lw $a0, 16($t0) bnez $a0, label_88 li $a0, 20 @@ -8837,28 +8887,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1140($sp) +sw $t0, 1152($sp) li $t0, 21 -sw $t0, 1144($sp) +sw $t0, 1156($sp) move $t0, $sp -lw $t1, 1144($t0) +lw $t1, 1156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1148($sp) -lw $t0, 4($sp) +sw $a1, 1160($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1132($sp) -lw $t0, 1140($sp) +sw $t1, 1144($sp) +lw $t0, 1152($sp) lw $t1, 16($t0) -sw $t1, 1136($sp) -lw $a0, 1132($sp) -lw $t1, 1136($sp) +sw $t1, 1148($sp) +lw $a0, 1144($sp) +lw $t1, 1148($sp) seq $a0, $a0, $t1 -sw $a0, 1128($sp) +sw $a0, 1140($sp) li $a0, 20 li $v0, 9 syscall @@ -8872,49 +8922,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1124($sp) +sw $t0, 1136($sp) move $t0, $sp -lw $t1, 1128($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1124($t0) +lw $t1, 1136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1152($sp) -lw $t0, 1124($sp) +sw $a1, 1164($sp) +lw $t0, 1136($sp) lw $a0, 16($t0) bnez $a0, label_89 la $t0, s_30 -sw $t0, 1156($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 1160($sp) -move $t0, $sp -lw $t1, 1156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 1164($sp) -lw $t1, 1160($sp) -sw $t1, 1120($sp) -b label_90 -label_89: -la $t0, s_31 sw $t0, 1168($sp) li $a0, 20 li $v0, 9 @@ -8940,13 +8961,10 @@ sw $t1, 0($sp) jal String_init sw $a1, 1176($sp) lw $t1, 1172($sp) -sw $t1, 1120($sp) -label_90: -lw $t1, 1120($sp) -sw $t1, 1084($sp) -b label_91 -label_88: -la $t0, s_32 +sw $t1, 1132($sp) +b label_90 +label_89: +la $t0, s_31 sw $t0, 1180($sp) li $a0, 20 li $v0, 9 @@ -8972,13 +8990,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1188($sp) lw $t1, 1184($sp) -sw $t1, 1084($sp) -label_91: -lw $t1, 1084($sp) -sw $t1, 1048($sp) -b label_92 -label_87: -la $t0, s_33 +sw $t1, 1132($sp) +label_90: +lw $t1, 1132($sp) +sw $t1, 1096($sp) +b label_91 +label_88: +la $t0, s_32 sw $t0, 1192($sp) li $a0, 20 li $v0, 9 @@ -9004,13 +9022,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1200($sp) lw $t1, 1196($sp) -sw $t1, 1048($sp) -label_92: -lw $t1, 1048($sp) -sw $t1, 1012($sp) -b label_93 -label_86: -la $t0, s_34 +sw $t1, 1096($sp) +label_91: +lw $t1, 1096($sp) +sw $t1, 1060($sp) +b label_92 +label_87: +la $t0, s_33 sw $t0, 1204($sp) li $a0, 20 li $v0, 9 @@ -9036,13 +9054,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1212($sp) lw $t1, 1208($sp) -sw $t1, 1012($sp) -label_93: -lw $t1, 1012($sp) -sw $t1, 976($sp) -b label_94 -label_85: -la $t0, s_35 +sw $t1, 1060($sp) +label_92: +lw $t1, 1060($sp) +sw $t1, 1024($sp) +b label_93 +label_86: +la $t0, s_34 sw $t0, 1216($sp) li $a0, 20 li $v0, 9 @@ -9068,13 +9086,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1224($sp) lw $t1, 1220($sp) -sw $t1, 976($sp) -label_94: -lw $t1, 976($sp) -sw $t1, 940($sp) -b label_95 -label_84: -la $t0, s_36 +sw $t1, 1024($sp) +label_93: +lw $t1, 1024($sp) +sw $t1, 988($sp) +b label_94 +label_85: +la $t0, s_35 sw $t0, 1228($sp) li $a0, 20 li $v0, 9 @@ -9100,13 +9118,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1236($sp) lw $t1, 1232($sp) -sw $t1, 940($sp) -label_95: -lw $t1, 940($sp) -sw $t1, 904($sp) -b label_96 -label_83: -la $t0, s_37 +sw $t1, 988($sp) +label_94: +lw $t1, 988($sp) +sw $t1, 952($sp) +b label_95 +label_84: +la $t0, s_36 sw $t0, 1240($sp) li $a0, 20 li $v0, 9 @@ -9132,13 +9150,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1248($sp) lw $t1, 1244($sp) -sw $t1, 904($sp) -label_96: -lw $t1, 904($sp) -sw $t1, 868($sp) -b label_97 -label_82: -la $t0, s_38 +sw $t1, 952($sp) +label_95: +lw $t1, 952($sp) +sw $t1, 916($sp) +b label_96 +label_83: +la $t0, s_37 sw $t0, 1252($sp) li $a0, 20 li $v0, 9 @@ -9164,13 +9182,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1260($sp) lw $t1, 1256($sp) -sw $t1, 868($sp) -label_97: -lw $t1, 868($sp) -sw $t1, 832($sp) -b label_98 -label_81: -la $t0, s_39 +sw $t1, 916($sp) +label_96: +lw $t1, 916($sp) +sw $t1, 880($sp) +b label_97 +label_82: +la $t0, s_38 sw $t0, 1264($sp) li $a0, 20 li $v0, 9 @@ -9196,13 +9214,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1272($sp) lw $t1, 1268($sp) -sw $t1, 832($sp) -label_98: -lw $t1, 832($sp) -sw $t1, 796($sp) -b label_99 -label_80: -la $t0, s_40 +sw $t1, 880($sp) +label_97: +lw $t1, 880($sp) +sw $t1, 844($sp) +b label_98 +label_81: +la $t0, s_39 sw $t0, 1276($sp) li $a0, 20 li $v0, 9 @@ -9228,13 +9246,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1284($sp) lw $t1, 1280($sp) -sw $t1, 796($sp) -label_99: -lw $t1, 796($sp) -sw $t1, 760($sp) -b label_100 -label_79: -la $t0, s_41 +sw $t1, 844($sp) +label_98: +lw $t1, 844($sp) +sw $t1, 808($sp) +b label_99 +label_80: +la $t0, s_40 sw $t0, 1288($sp) li $a0, 20 li $v0, 9 @@ -9260,13 +9278,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1296($sp) lw $t1, 1292($sp) -sw $t1, 760($sp) -label_100: -lw $t1, 760($sp) -sw $t1, 724($sp) -b label_101 -label_78: -la $t0, s_42 +sw $t1, 808($sp) +label_99: +lw $t1, 808($sp) +sw $t1, 772($sp) +b label_100 +label_79: +la $t0, s_41 sw $t0, 1300($sp) li $a0, 20 li $v0, 9 @@ -9292,13 +9310,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1308($sp) lw $t1, 1304($sp) -sw $t1, 724($sp) -label_101: -lw $t1, 724($sp) -sw $t1, 688($sp) -b label_102 -label_77: -la $t0, s_43 +sw $t1, 772($sp) +label_100: +lw $t1, 772($sp) +sw $t1, 736($sp) +b label_101 +label_78: +la $t0, s_42 sw $t0, 1312($sp) li $a0, 20 li $v0, 9 @@ -9324,13 +9342,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1320($sp) lw $t1, 1316($sp) -sw $t1, 688($sp) -label_102: -lw $t1, 688($sp) -sw $t1, 652($sp) -b label_103 -label_76: -la $t0, s_44 +sw $t1, 736($sp) +label_101: +lw $t1, 736($sp) +sw $t1, 700($sp) +b label_102 +label_77: +la $t0, s_43 sw $t0, 1324($sp) li $a0, 20 li $v0, 9 @@ -9356,13 +9374,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1332($sp) lw $t1, 1328($sp) -sw $t1, 652($sp) -label_103: -lw $t1, 652($sp) -sw $t1, 616($sp) -b label_104 -label_75: -la $t0, s_45 +sw $t1, 700($sp) +label_102: +lw $t1, 700($sp) +sw $t1, 664($sp) +b label_103 +label_76: +la $t0, s_44 sw $t0, 1336($sp) li $a0, 20 li $v0, 9 @@ -9388,13 +9406,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1344($sp) lw $t1, 1340($sp) -sw $t1, 616($sp) -label_104: -lw $t1, 616($sp) -sw $t1, 580($sp) -b label_105 -label_74: -la $t0, s_46 +sw $t1, 664($sp) +label_103: +lw $t1, 664($sp) +sw $t1, 628($sp) +b label_104 +label_75: +la $t0, s_45 sw $t0, 1348($sp) li $a0, 20 li $v0, 9 @@ -9420,13 +9438,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1356($sp) lw $t1, 1352($sp) -sw $t1, 580($sp) -label_105: -lw $t1, 580($sp) -sw $t1, 544($sp) -b label_106 -label_73: -la $t0, s_47 +sw $t1, 628($sp) +label_104: +lw $t1, 628($sp) +sw $t1, 592($sp) +b label_105 +label_74: +la $t0, s_46 sw $t0, 1360($sp) li $a0, 20 li $v0, 9 @@ -9452,13 +9470,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1368($sp) lw $t1, 1364($sp) -sw $t1, 544($sp) -label_106: -lw $t1, 544($sp) -sw $t1, 508($sp) -b label_107 -label_72: -la $t0, s_48 +sw $t1, 592($sp) +label_105: +lw $t1, 592($sp) +sw $t1, 556($sp) +b label_106 +label_73: +la $t0, s_47 sw $t0, 1372($sp) li $a0, 20 li $v0, 9 @@ -9484,13 +9502,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1380($sp) lw $t1, 1376($sp) -sw $t1, 508($sp) -label_107: -lw $t1, 508($sp) -sw $t1, 472($sp) -b label_108 -label_71: -la $t0, s_49 +sw $t1, 556($sp) +label_106: +lw $t1, 556($sp) +sw $t1, 520($sp) +b label_107 +label_72: +la $t0, s_48 sw $t0, 1384($sp) li $a0, 20 li $v0, 9 @@ -9516,13 +9534,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1392($sp) lw $t1, 1388($sp) -sw $t1, 472($sp) -label_108: -lw $t1, 472($sp) -sw $t1, 436($sp) -b label_109 -label_70: -la $t0, s_50 +sw $t1, 520($sp) +label_107: +lw $t1, 520($sp) +sw $t1, 484($sp) +b label_108 +label_71: +la $t0, s_49 sw $t0, 1396($sp) li $a0, 20 li $v0, 9 @@ -9548,13 +9566,13 @@ sw $t1, 0($sp) jal String_init sw $a1, 1404($sp) lw $t1, 1400($sp) -sw $t1, 436($sp) -label_109: -lw $t1, 436($sp) -sw $t1, 400($sp) -b label_110 -label_69: -la $t0, s_51 +sw $t1, 484($sp) +label_108: +lw $t1, 484($sp) +sw $t1, 448($sp) +b label_109 +label_70: +la $t0, s_50 sw $t0, 1408($sp) li $a0, 20 li $v0, 9 @@ -9580,22 +9598,79 @@ sw $t1, 0($sp) jal String_init sw $a1, 1416($sp) lw $t1, 1412($sp) -sw $t1, 400($sp) +sw $t1, 448($sp) +label_109: +lw $t1, 448($sp) +sw $t1, 412($sp) +b label_110 +label_69: +la $t0, s_51 +sw $t0, 1420($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1424($sp) +move $t0, $sp +lw $t1, 1420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1428($sp) +lw $t1, 1424($sp) +sw $t1, 412($sp) label_110: -lw $t1, 400($sp) -sw $t1, 1420($sp) -lw $a1, 1420($sp) +lw $t1, 412($sp) +sw $t1, 1432($sp) +lw $a1, 1432($sp) lw $ra, 0($sp) -addi $sp, $sp, 1428 +addi $sp, $sp, 1440 jr $ra CellularAutomaton.prompt: -addi $sp, $sp, -124 +addi $sp, $sp, -136 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, empty_str +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) la $t0, s_52 -sw $t0, 12($sp) +sw $t0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -9609,32 +9684,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 16($sp) +sw $t0, 28($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 20($sp) +sw $a1, 32($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 8($sp) +sw $a1, 20($sp) la $t0, s_53 -sw $t0, 28($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -9648,45 +9723,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 36($sp) +sw $a1, 48($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 36($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 40($sp) -lw $t1, 40($sp) -sw $t1, 4($sp) +sw $a1, 52($sp) +lw $t1, 52($sp) +sw $t1, 16($sp) la $t0, s_3 -sw $t0, 52($sp) +sw $t0, 64($sp) li $a0, 20 li $v0, 9 syscall @@ -9700,32 +9775,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 56($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 60($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 48($sp) +sw $a1, 60($sp) la $t0, s_54 -sw $t0, 84($sp) +sw $t0, 96($sp) li $a0, 20 li $v0, 9 syscall @@ -9739,25 +9814,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) +sw $a1, 104($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 4($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 72($sp) +sw $a1, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -9771,17 +9846,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 96($sp) -lw $t0, 68($sp) +sw $a1, 108($sp) +lw $t0, 80($sp) lw $a0, 16($t0) bnez $a0, label_111 li $a0, 20 @@ -9797,20 +9872,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 112($sp) li $t0, 1 -sw $t0, 104($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 108($sp) -lw $t1, 100($sp) -sw $t1, 64($sp) +sw $a1, 120($sp) +lw $t1, 112($sp) +sw $t1, 76($sp) b label_112 label_111: li $a0, 20 @@ -9826,35 +9901,60 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 112($sp) +sw $t0, 124($sp) li $t0, 0 -sw $t0, 116($sp) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 120($sp) -lw $t1, 112($sp) -sw $t1, 64($sp) +sw $a1, 132($sp) +lw $t1, 124($sp) +sw $t1, 76($sp) label_112: -lw $t1, 64($sp) -sw $t1, 124($sp) -lw $a1, 124($sp) +lw $t1, 76($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) lw $ra, 0($sp) -addi $sp, $sp, 132 +addi $sp, $sp, 144 jr $ra CellularAutomaton.prompt2: -addi $sp, $sp, -124 +addi $sp, $sp, -136 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +la $t0, empty_str +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) la $t0, s_55 -sw $t0, 12($sp) +sw $t0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -9868,32 +9968,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 16($sp) +sw $t0, 28($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 20($sp) +sw $a1, 32($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 8($sp) +sw $a1, 20($sp) la $t0, s_56 -sw $t0, 28($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -9907,32 +10007,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 36($sp) +sw $a1, 48($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 36($sp) la $t0, s_57 -sw $t0, 44($sp) +sw $t0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -9946,45 +10046,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 52($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 40($sp) +sw $a1, 52($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 56($sp) -lw $t1, 56($sp) -sw $t1, 4($sp) +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 16($sp) la $t0, s_58 -sw $t0, 84($sp) +sw $t0, 96($sp) li $a0, 20 li $v0, 9 syscall @@ -9998,25 +10098,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) +sw $a1, 104($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 4($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 72($sp) +sw $a1, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -10030,17 +10130,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 96($sp) -lw $t0, 68($sp) +sw $a1, 108($sp) +lw $t0, 80($sp) lw $a0, 16($t0) bnez $a0, label_113 li $a0, 20 @@ -10056,20 +10156,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 112($sp) li $t0, 0 -sw $t0, 104($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 108($sp) -lw $t1, 100($sp) -sw $t1, 64($sp) +sw $a1, 120($sp) +lw $t1, 112($sp) +sw $t1, 76($sp) b label_114 label_113: li $a0, 20 @@ -10085,26 +10185,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 112($sp) +sw $t0, 124($sp) li $t0, 1 -sw $t0, 116($sp) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 120($sp) -lw $t1, 112($sp) -sw $t1, 64($sp) +sw $a1, 132($sp) +lw $t1, 124($sp) +sw $t1, 76($sp) label_114: -lw $t1, 64($sp) -sw $t1, 124($sp) -lw $a1, 124($sp) +lw $t1, 76($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) lw $ra, 0($sp) -addi $sp, $sp, 132 +addi $sp, $sp, 144 jr $ra Main_init: addi $sp, $sp, -4 @@ -10124,15 +10224,36 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -148 +addi $sp, $sp, -172 addi $sp, $sp, -4 sw $ra, 0($sp) -la $t1, void -sw $t1, 4($sp) -la $t1, void -sw $t1, 8($sp) -la $t0, s_59 -sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) li $a0, 20 li $v0, 9 syscall @@ -10147,31 +10268,60 @@ sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) sw $t0, 20($sp) +la $t0, empty_str +sw $t0, 24($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 24($sp) +sw $a1, 28($sp) +lw $t1, 20($sp) +sw $t1, 32($sp) +la $t0, s_59 +sw $t0, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +jal String_init +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 12($sp) +sw $a1, 36($sp) la $t0, s_60 -sw $t0, 32($sp) +sw $t0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -10185,43 +10335,43 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 40($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 28($sp) +sw $a1, 52($sp) label_115: move $t0, $sp -lw $t1, 152($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 104($t2) jal $t3 -sw $a1, 48($sp) -lw $t0, 48($sp) +sw $a1, 72($sp) +lw $t0, 72($sp) lw $a0, 16($t0) bnez $a0, label_116 b label_117 @@ -10239,33 +10389,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 76($sp) li $t0, 1 -sw $t0, 56($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 60($sp) -lw $t1, 52($sp) -sw $t1, 4($sp) +sw $a1, 84($sp) +lw $t1, 76($sp) +sw $t1, 16($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 96($t2) jal $t3 -sw $a1, 68($sp) -lw $t1, 68($sp) -sw $t1, 8($sp) +sw $a1, 92($sp) +lw $t1, 92($sp) +sw $t1, 32($sp) li $a0, 32 li $v0, 9 syscall @@ -10279,62 +10429,62 @@ li $t1, 8 sw $t1, 8($t0) la $t1, CellularAutomaton_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal CellularAutomaton_init -sw $a1, 84($sp) +sw $a1, 108($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 76($sp) -lw $t0, 152($sp) -lw $t1, 76($sp) +sw $a1, 100($sp) +lw $t0, 176($sp) +lw $t1, 100($sp) sw $t1, 32($t0) -lw $t0, 152($sp) +lw $t0, 176($sp) lw $t1, 32($t0) -sw $t1, 96($sp) +sw $t1, 120($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 120($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 92($sp) +sw $a1, 116($sp) label_118: -lw $t0, 4($sp) +lw $t0, 16($sp) lw $a0, 16($t0) bnez $a0, label_119 b label_120 label_119: move $t0, $sp -lw $t1, 152($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 100($t2) jal $t3 -sw $a1, 108($sp) -lw $t0, 108($sp) +sw $a1, 132($sp) +lw $t0, 132($sp) lw $a0, 16($t0) bnez $a0, label_121 li $a0, 20 @@ -10350,64 +10500,64 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 112($sp) +sw $t0, 136($sp) li $t0, 0 -sw $t0, 116($sp) +sw $t0, 140($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 120($sp) -lw $t1, 112($sp) -sw $t1, 4($sp) -lw $t1, 112($sp) -sw $t1, 104($sp) +sw $a1, 144($sp) +lw $t1, 136($sp) +sw $t1, 16($sp) +lw $t1, 136($sp) +sw $t1, 128($sp) b label_122 label_121: -lw $t0, 152($sp) +lw $t0, 176($sp) lw $t1, 32($t0) -sw $t1, 132($sp) +sw $t1, 156($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 92($t2) jal $t3 -sw $a1, 128($sp) -lw $t0, 152($sp) +sw $a1, 152($sp) +lw $t0, 176($sp) lw $t1, 32($t0) -sw $t1, 140($sp) +sw $t1, 164($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 136($sp) -lw $t1, 136($sp) -sw $t1, 104($sp) +sw $a1, 160($sp) +lw $t1, 160($sp) +sw $t1, 128($sp) label_122: b label_118 label_120: b label_115 label_117: -lw $t1, 152($sp) -sw $t1, 144($sp) -lw $t1, 144($sp) -sw $t1, 148($sp) -lw $a1, 148($sp) +lw $t1, 176($sp) +sw $t1, 168($sp) +lw $t1, 168($sp) +sw $t1, 172($sp) +lw $a1, 172($sp) lw $ra, 0($sp) -addi $sp, $sp, 156 +addi $sp, $sp, 180 jr $ra \ No newline at end of file diff --git a/tests/codegen/life_test.cil b/tests/codegen/life_test.cil index a40a1a3d..6413b964 100644 --- a/tests/codegen/life_test.cil +++ b/tests/codegen/life_test.cil @@ -1,195 +1,3 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Board { - attribute rows - attribute columns - attribute board_size - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method size_of_board : Board.size_of_board - method board_init : Board.board_init -} -type CellularAutomaton { - attribute rows - attribute columns - attribute board_size - attribute population_map - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method size_of_board : Board.size_of_board - method board_init : Board.board_init - method init : CellularAutomaton.init - method print : CellularAutomaton.print - method num_cells : CellularAutomaton.num_cells - method cell : CellularAutomaton.cell - method north : CellularAutomaton.north - method south : CellularAutomaton.south - method east : CellularAutomaton.east - method west : CellularAutomaton.west - method northwest : CellularAutomaton.northwest - method northeast : CellularAutomaton.northeast - method southeast : CellularAutomaton.southeast - method southwest : CellularAutomaton.southwest - method neighbors : CellularAutomaton.neighbors - method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution - method evolve : CellularAutomaton.evolve - method option : CellularAutomaton.option - method prompt : CellularAutomaton.prompt - method prompt2 : CellularAutomaton.prompt2 -} -type Main { - attribute rows - attribute columns - attribute board_size - attribute population_map - attribute cells - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method size_of_board : Board.size_of_board - method board_init : Board.board_init - method init : CellularAutomaton.init - method print : CellularAutomaton.print - method num_cells : CellularAutomaton.num_cells - method cell : CellularAutomaton.cell - method north : CellularAutomaton.north - method south : CellularAutomaton.south - method east : CellularAutomaton.east - method west : CellularAutomaton.west - method northwest : CellularAutomaton.northwest - method northeast : CellularAutomaton.northeast - method southeast : CellularAutomaton.southeast - method southwest : CellularAutomaton.southwest - method neighbors : CellularAutomaton.neighbors - method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution - method evolve : CellularAutomaton.evolve - method option : CellularAutomaton.option - method prompt : CellularAutomaton.prompt - method prompt2 : CellularAutomaton.prompt2 - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: \n -s_4: -s_5: X -s_6: - -s_7: \nPlease chose a number:\n -s_8: \t1: A cross\n -s_9: \t2: A slash from the upper left to lower right\n -s_10: \t3: A slash from the upper right to lower left\n -s_11: \t4: An X\n -s_12: \t5: A greater than sign \n -s_13: \t6: A less than sign\n -s_14: \t7: Two greater than signs\n -s_15: \t8: Two less than signs\n -s_16: \t9: A 'V'\n -s_17: \t10: An inverse 'V'\n -s_18: \t11: Numbers 9 and 10 combined\n -s_19: \t12: A full grid\n -s_20: \t13: A 'T'\n -s_21: \t14: A plus '+'\n -s_22: \t15: A 'W'\n -s_23: \t16: An 'M'\n -s_24: \t17: An 'E'\n -s_25: \t18: A '3'\n -s_26: \t19: An 'O'\n -s_27: \t20: An '8'\n -s_28: \t21: An 'S'\n -s_29: Your choice => -s_30: -s_31: XXXX X XX X XXXX -s_32: XX X XX X XX X XX X XX -s_33: XX X XX X XX -s_34: XXX X X X X XXXX -s_35: XXXXX X XXXXX X XXXX -s_36: X X X X X X X -s_37: X X X X X X X -s_38: X X XXXXX X X -s_39: XXXXX X X X X -s_40: XXXXXXXXXXXXXXXXXXXXXXXXX -s_41: X X X X X X X X -s_42: X X X X X -s_43: X X X X X -s_44: X XX X X X -s_45: X X X XX X -s_46: X X X X X -s_47: X X X X X -s_48: X X X X X X X X X -s_49: X X X X X -s_50: X X X X X -s_51: XX XXXX XXXX XX -s_52: Would you like to continue with the next generation? \n -s_53: Please use lowercase y or n for your answer [y]: -s_54: n -s_55: \n\n -s_56: Would you like to choose a background pattern? \n -s_57: Please use lowercase y or n for your answer [n]: -s_58: y -s_59: Welcome to the Game of Life.\n -s_60: There are many initial states to choose from. \n .CODE function main { diff --git a/tests/codegen/test.py b/tests/codegen/test.py index eb6aa029..2befc11b 100644 --- a/tests/codegen/test.py +++ b/tests/codegen/test.py @@ -1,7 +1,7 @@ -f1 = open('palindrome_test.cil', 'r') +f1 = open('cells_test.mips', 'r') lines_1 = f1.readlines() -f2 = open('palindrome.cil', 'r') +f2 = open('cells.mips', 'r') lines_2 = f2.readlines() print(len(lines_1)) print(len(lines_2)) @@ -12,5 +12,5 @@ print('f1: ', lines_1[i]) print('f2: ', lines_2[i]) c += 1 - # if c == 15: - # break + if c == 20: + break From dd663f8a5994e8cfba280d61d85280ece440dcfa Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Mon, 14 Dec 2020 02:29:37 -0500 Subject: [PATCH 133/140] solving expr index --- src/visitors/transpilator.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 39cfb335..78066ac3 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -791,7 +791,7 @@ def visit(self, node, scope, sscope): right_value = self.visit(node.right, scope, sscope) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left])) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -808,7 +808,7 @@ def visit(self, node, scope, sscope): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right])) else: right_type = 'Int' if isinstance(node.right, IntegerNode): @@ -853,7 +853,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left])) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -870,7 +870,7 @@ def visit(self, node, scope, sscope): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right])) else: right_type = 'Int' if isinstance(node.right, IntegerNode): @@ -912,7 +912,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left])) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -937,7 +937,7 @@ def visit(self, node, scope, sscope): elif isinstance(node.right.expr, StringNode): right_type = 'String' else: - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right])) else: if isinstance(node.right, IntegerNode): right_type = 'Int' @@ -974,7 +974,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left])) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -991,7 +991,7 @@ def visit(self, node, scope, sscope): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr])) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right])) else: right_type = 'Int' if isinstance(node.right, IntegerNode): @@ -1104,7 +1104,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr].name)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left].name)) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -1121,7 +1121,7 @@ def visit(self, node, scope, sscope): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr].name)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right].name)) else: right_type = 'Int' if isinstance(node.right, IntegerNode): @@ -1163,7 +1163,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr].name)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left].name)) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -1180,7 +1180,7 @@ def visit(self, node, scope, sscope): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr].name)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right].name)) else: right_type = 'Int' if isinstance(node.right, IntegerNode): @@ -1272,7 +1272,7 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", None)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", None)) if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left.expr].name)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left].name)) else: left_type = 'Int' if isinstance(node.left, IntegerNode): @@ -1289,7 +1289,7 @@ def visit(self, node, scope, sscope): self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right.expr].name)) + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right].name)) else: right_type = 'Int' if isinstance(node.right, IntegerNode): From 4ad38bffd5927c8b40cd2b4b96acc2d7a1c076ed Mon Sep 17 00:00:00 2001 From: hros18 Date: Mon, 14 Dec 2020 09:48:57 -0500 Subject: [PATCH 134/140] fixxing StarNode bug --- src/main.py | 32 ++++++------ src/visitors/to_mips.py | 6 +-- src/visitors/transpilator.py | 99 +++++++++++++++++++++--------------- tests/codegen/arith.mips | 3 ++ tests/codegen/atoi.mips | 3 ++ tests/codegen/test.py | 4 +- 6 files changed, 87 insertions(+), 60 deletions(-) diff --git a/src/main.py b/src/main.py index 6230e242..c5845f37 100644 --- a/src/main.py +++ b/src/main.py @@ -42,6 +42,7 @@ def main(): cv = codeVisitor(context) cil_ast = cv.visit(ast, None, scope) + # f2_n = program[:-3] + '_test.cil' # f2 = open(f2_n, 'w+') @@ -49,28 +50,29 @@ def main(): # cil_code = formatter(cil_ast) # f2.write(f'{cil_code}') # f2.close() - print('LEN:::::',len(cv.instructions)) - i = 0 - for x in cv.instructions: - print('------{}-------'.format(i)) - i += 1 - print(type(x)) - items = vars(x) - for item in items: - # if isinstance(items[item], ArgNodeIL) - print(item, ':', str(items[item])) - if str(item) == 'args': - for x in items[item]: - print('arg: ',x.dest) + # print('LEN:::::',len(cv.instructions)) + # i = 0 + # for x in cv.instructions: + # print('------{}-------'.format(i)) + # i += 1 + # print(type(x)) + # items = vars(x) + # for item in items: + # # if isinstance(items[item], ArgNodeIL) + # print(item, ':', str(items[item])) + # if str(item) == 'args': + # for x in items[item]: + # print('arg: ',x.dest) mips = MIPS() code = mips.visit(cil_ast) - print('Equals: ', mips.countStatic) + # print('Equals: ', mips.countStatic) # for c in cv.data: # print(str(c)) # for c in cv.code: # print(str(c)) - + print('Ops: ',cv.count) + print('GetAttr: ', mips.countStatic) path = program[:-2] # path = path[:-1] path += 'mips' diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index d9cbeba2..1bd8712c 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -208,7 +208,7 @@ def visit(self, node): @visitor.when(GetAttribNodeIL) def visit(self, node): print(self.count) - self.count += 1 + self.countStatic += 1 print('GetAttrNodeIL') # print('----------------::::::') # print('----------------::::::',node.obj) @@ -295,8 +295,8 @@ def visit(self, node): @visitor.when(StaticCallNodeIL) def visit(self, node): print(self.count) - if node.function == 'String_equals': - self.countStatic += 1 + # if node.function == 'String_equals': + # self.countStatic += 1 print('StaticCallNodeIL') self.text += 'move $t0, $sp\n' # print('--------CALL------') diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 78066ac3..89d2e940 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -77,6 +77,7 @@ def __init__(self, context): self.current_function = None self.context = context self.label_count = 0 + self.count = '' # self.scope = scope self.context.set_type_tags() self.context.set_type_max_tags() @@ -529,9 +530,12 @@ def visit(self, node, scope, sscope): @visitor.when(VariableNode) def visit(self, node, scope, sscope): if self.is_defined_param(node.id): + # print('------------------------------') + # print('defined PARAM ', node.id) return node.id elif self.current_type.has_attr(node.id): result_local = self.define_internal_local(scope=scope, name = node.id, class_type=None) + # self.count += 1 self.register_instruction(GetAttribNodeIL(result_local, 'self' , node.id, self.current_type.name)) return result_local else: @@ -703,7 +707,7 @@ def visit(self, node, scope, sscope): def visit(self, node, scope, sscope): result_local = self.define_internal_local(scope = scope, name = "result") case_expr = self.visit(node.expr, scope, sscope) - + print('EXPRRRRRRRR:', type(node.expr)) nscope = sscope.expr_dict[node] exit_label = self.get_label() @@ -782,6 +786,7 @@ def visit(self, node, scope, sscope): @visitor.when(SumNode) def visit(self, node, scope, sscope): + self.count += ' +' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -805,6 +810,7 @@ def visit(self, node, scope, sscope): left_type = (sscope.find_variable(node.left.id)).type.name except: left_type = 'Int' + # self.count += 1 self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): @@ -822,6 +828,7 @@ def visit(self, node, scope, sscope): right_type = (sscope.find_variable(node.right.id)).type.name except: right_type = 'Int' + # self.count += 1 self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) @@ -841,6 +848,7 @@ def visit(self, node, scope, sscope): @visitor.when(DiffNode) def visit(self, node, scope, sscope): + self.count += ' -' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -900,6 +908,7 @@ def visit(self, node, scope, sscope): @visitor.when(StarNode) def visit(self, node, scope, sscope): + self.count += ' *' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -911,46 +920,48 @@ def visit(self, node, scope, sscope): # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", node.right.computed_type.name)) - if hasattr(node.left, 'expr'): - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left])) - else: - left_type = 'Int' - if isinstance(node.left, IntegerNode): - left_type = 'Int' - elif isinstance(node.left, BoolNode): - left_type = 'Bool' - elif isinstance(node.left, StringNode): - left_type = 'String' - else: - try: - left_type = (sscope.find_variable(node.left.id)).type.name - except: - left_type = 'Int' - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) + # if hasattr(node.left, 'expr'): + # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.left])) + # else: + # left_type = 'Int' + # if isinstance(node.left, IntegerNode): + # left_type = 'Int' + # elif isinstance(node.left, BoolNode): + # left_type = 'Bool' + # elif isinstance(node.left, StringNode): + # left_type = 'String' + # else: + # try: + # left_type = (sscope.find_variable(node.left.id)).type.name + # except: + # left_type = 'Int' + left_type = self.context.exprs_dict[node.left].name + right_type = self.context.exprs_dict[node.right].name + self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) - right_type = 'Int' - if hasattr(node.right, 'expr'): - if isinstance(node.right.expr, IntegerNode): - right_type = 'Int' - elif isinstance(node.right.expr, BoolNode): - right_type = 'Bool' - elif isinstance(node.right.expr, StringNode): - right_type = 'String' - else: - self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", self.context.exprs_dict[node.right])) - else: - if isinstance(node.right, IntegerNode): - right_type = 'Int' - elif isinstance(node.right, BoolNode): - right_type = 'Bool' - elif isinstance(node.right, StringNode): - right_type = 'String' - else: - try: - right_type = (sscope.find_variable(node.right.id)).type.name - except: - right_type = 'Int' - self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) + # right_type = 'Int' + # if hasattr(node.right, 'expr'): + # if isinstance(node.right.expr, IntegerNode): + # right_type = 'Int' + # elif isinstance(node.right.expr, BoolNode): + # right_type = 'Bool' + # elif isinstance(node.right.expr, StringNode): + # right_type = 'String' + # else: + # self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", self.context.exprs_dict[node.right])) + # else: + # if isinstance(node.right, IntegerNode): + # right_type = 'Int' + # elif isinstance(node.right, BoolNode): + # right_type = 'Bool' + # elif isinstance(node.right, StringNode): + # right_type = 'String' + # else: + # try: + # right_type = (sscope.find_variable(node.right.id)).type.name + # except: + # right_type = 'Int' + self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) self.register_instruction(BinaryNodeIL(op_local, left_local, right_local, "*")) # Allocate Int result @@ -962,6 +973,7 @@ def visit(self, node, scope, sscope): @visitor.when(DivNode) def visit(self, node, scope, sscope): + self.count += ' /' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -1018,6 +1030,7 @@ def visit(self, node, scope, sscope): @visitor.when(BitNotNode) def visit(self, node, scope, sscope): + self.count += ' ~' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") expr_local = self.define_internal_local(scope=scope) @@ -1034,6 +1047,7 @@ def visit(self, node, scope, sscope): typeX = self.context.exprs_dict[node.expr].name except: typeX = 'Int' + # self.count += 1 self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", typeX)) else: right_type = 'Int' @@ -1048,6 +1062,7 @@ def visit(self, node, scope, sscope): right_type = (sscope.find_variable(node.expr.id)).type.name except: right_type = 'Int' + # self.count += 1 self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", right_type)) self.register_instruction(UnaryNodeIL(op_local, expr_local, "~")) @@ -1060,6 +1075,7 @@ def visit(self, node, scope, sscope): @visitor.when(NotNode) def visit(self, node, scope, sscope): + self.count += ' !' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") expr_local = self.define_internal_local(scope=scope) @@ -1090,6 +1106,7 @@ def visit(self, node, scope, sscope): @visitor.when(LessNode) def visit(self, node, scope, sscope): + self.count += ' <' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -1148,6 +1165,7 @@ def visit(self, node, scope, sscope): @visitor.when(LessEqualNode) def visit(self, node, scope, sscope): + self.count += ' <=' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -1207,6 +1225,7 @@ def visit(self, node, scope, sscope): @visitor.when(EqualNode) def visit(self, node, scope, sscope): + self.count += ' ==' # print('----got in equalss----') # print(node) result_local = self.define_internal_local(scope=scope, name = "result") diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 8e6684f5..be511a1c 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -5671,6 +5671,9 @@ sw $a1, 136($sp) lw $t0, 164($sp) lw $t1, 16($t0) sw $t1, 104($sp) +lw $t0, 112($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) lw $a0, 104($sp) lw $t1, 108($sp) mul $a0, $a0, $t1 diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index 5f8dd9ad..e8bd3998 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -3788,6 +3788,9 @@ sw $a1, 136($sp) lw $t0, 164($sp) lw $t1, 16($t0) sw $t1, 104($sp) +lw $t0, 112($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) lw $a0, 104($sp) lw $t1, 108($sp) mul $a0, $a0, $t1 diff --git a/tests/codegen/test.py b/tests/codegen/test.py index 2befc11b..2f820f83 100644 --- a/tests/codegen/test.py +++ b/tests/codegen/test.py @@ -1,7 +1,7 @@ -f1 = open('cells_test.mips', 'r') +f1 = open('arith.mips', 'r') lines_1 = f1.readlines() -f2 = open('cells.mips', 'r') +f2 = open('arith_test.mips', 'r') lines_2 = f2.readlines() print(len(lines_1)) print(len(lines_2)) From 49df9a28153f9c30671a8231ada990f85991e404 Mon Sep 17 00:00:00 2001 From: hros18 Date: Mon, 14 Dec 2020 17:16:56 -0500 Subject: [PATCH 135/140] offset for methods vars, fixxed --- src/main.py | 15 +- src/visitors/to_mips.py | 5 +- src/visitors/transpilator.py | 40 +- tests/codegen/arith.mips | 347 +- tests/codegen/arith_test.mips | 10078 +++++++++++++++++++++++++++++++ tests/codegen/cells.mips | 12 +- tests/codegen/complex.mips | 32 +- tests/codegen/graph.mips | 16 +- tests/codegen/hairyscary.mips | 8 +- tests/codegen/life.mips | 64 +- tests/codegen/list.mips | 10 +- tests/codegen/new_complex.mips | 32 +- tests/codegen/primes.mips | 52 +- tests/codegen/sort-list.mips | 8 +- 14 files changed, 10313 insertions(+), 406 deletions(-) create mode 100644 tests/codegen/arith_test.mips diff --git a/src/main.py b/src/main.py index c5845f37..bdc6b000 100644 --- a/src/main.py +++ b/src/main.py @@ -71,8 +71,19 @@ def main(): # print(str(c)) # for c in cv.code: # print(str(c)) - print('Ops: ',cv.count) - print('GetAttr: ', mips.countStatic) + # print('Ops: ',cv.count) + # print('GetAttr: ', mips.countStatic) + print('attr_offset: ', mips.attr_offset) + print('var_offset: ') + c = 1 + for k in mips.var_offset.keys(): + t = 1 + print(f'{c}. {k}') + for x in mips.var_offset[k].keys(): + print(f'{x} : {mips.var_offset[k][x]}') + t += 1 + print('\n') + c += 1 path = program[:-2] # path = path[:-1] path += 'mips' diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 1bd8712c..b78d0e47 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -12,7 +12,7 @@ def __init__(self): self.text = '' self.data = '' self.count = 0 - self.countStatic = 0 + self.countStatic = '' self.mips_comm_for_operators = { '+' : 'add', '-' : 'sub', @@ -208,7 +208,7 @@ def visit(self, node): @visitor.when(GetAttribNodeIL) def visit(self, node): print(self.count) - self.countStatic += 1 + self.countStatic += 'GetAttr: dest: ' + str(node.dest) + '\n' print('GetAttrNodeIL') # print('----------------::::::') # print('----------------::::::',node.obj) @@ -272,6 +272,7 @@ def visit(self, node): print(self.count) self.count += 1 print('DynamicCallNodeIL') + self.countStatic += 'DynamicCall: instance: ' + str(node.obj) + '\n' self.text += 'move $t0, $sp\n' for arg in node.args: diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 89d2e940..6a608398 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -387,6 +387,7 @@ def visit(self, node, scope, sscope): # print(node) # print(node.id) # print('args:',node.args) + self.count += 'SelfCall \n-------------------\n'+ node.id + '(' + str(node.args)+')' + '--------\n ' result_local = self.define_internal_local(scope = scope, name = "result") expr_value = 'self' @@ -397,6 +398,7 @@ def visit(self, node, scope, sscope): call_args.append(ArgNodeIL(expr_value)) # dynamic_type = 'Void' + self.count += expr_value + '\n' self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, self.current_type.name, expr_value)) return result_local @@ -534,7 +536,7 @@ def visit(self, node, scope, sscope): # print('defined PARAM ', node.id) return node.id elif self.current_type.has_attr(node.id): - result_local = self.define_internal_local(scope=scope, name = node.id, class_type=None) + result_local = self.define_internal_local(scope=scope, name = node.id, class_type=self.current_type.name) # self.count += 1 self.register_instruction(GetAttribNodeIL(result_local, 'self' , node.id, self.current_type.name)) return result_local @@ -589,6 +591,7 @@ def visit(self, node, scope, sscope): @visitor.when(ExprCallNode) def visit(self, node, scope, sscope): + self.count += 'ExprCall: \n-------------------\n'+ node.id + '(' + str(node.row) +','+ str(node.col)+')' + '--------\n ' result_local = self.define_internal_local(scope = scope, name = "result") expr_value = self.visit(node.obj, scope, sscope) @@ -605,12 +608,14 @@ def visit(self, node, scope, sscope): # self.register_instruction(ArgNodeIL(arg)) dynamic_type = self.context.exprs_dict[node.obj] + self.count += expr_value + '\n' self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, dynamic_type.name, expr_value)) return result_local @visitor.when(ParentCallNode) def visit(self, node, scope, sscope): + self.count += 'ParentCall \n-------------------\n'+ node.id + '(' + str(node.row) +','+ str(node.col)+')' + '--------\n ' result_local = self.define_internal_local(scope = scope, name = "result") expr_value = self.visit(node.obj, scope, sscope) @@ -625,7 +630,7 @@ def visit(self, node, scope, sscope): static_instance = self.define_internal_local(scope=scope, name='static_instance') self.register_instruction(AllocateNodeIL(node.type,self.context.get_type(node.type).tag ,static_instance)) - + self.count += static_instance + '\n' self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, node.type, static_instance)) return result_local @@ -725,11 +730,13 @@ def visit(self, node, scope, sscope): for t, c_scp in reversed(tag_lst): option = option_dict[t] + option_type = self.context.get_type(option.typex) self.register_instruction(LabelNodeIL(label)) label = self.get_label() - option_type = self.context.get_type(option.typex) #changes + # print(option_type.name) + # if option_type.name != 'Object' self.register_instruction(OptionNodeIL(case_expr, option_type.tag, option_type.max_tag, label)) option_scope = scope.create_child() @@ -786,7 +793,7 @@ def visit(self, node, scope, sscope): @visitor.when(SumNode) def visit(self, node, scope, sscope): - self.count += ' +' + #self.count += ' +' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -810,7 +817,7 @@ def visit(self, node, scope, sscope): left_type = (sscope.find_variable(node.left.id)).type.name except: left_type = 'Int' - # self.count += 1 + # #self.count += 1 self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) if hasattr(node.right, 'expr'): @@ -828,7 +835,7 @@ def visit(self, node, scope, sscope): right_type = (sscope.find_variable(node.right.id)).type.name except: right_type = 'Int' - # self.count += 1 + # #self.count += 1 self.register_instruction(GetAttribNodeIL(right_local, right_value, "value", right_type)) # self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", node.left.computed_type.name)) @@ -848,7 +855,7 @@ def visit(self, node, scope, sscope): @visitor.when(DiffNode) def visit(self, node, scope, sscope): - self.count += ' -' + #self.count += ' -' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -908,7 +915,7 @@ def visit(self, node, scope, sscope): @visitor.when(StarNode) def visit(self, node, scope, sscope): - self.count += ' *' + #self.count += ' *' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -937,6 +944,7 @@ def visit(self, node, scope, sscope): # left_type = 'Int' left_type = self.context.exprs_dict[node.left].name right_type = self.context.exprs_dict[node.right].name + #self.count += f'({left_local},{right_local})' self.register_instruction(GetAttribNodeIL(left_local, left_value, "value", left_type)) # right_type = 'Int' @@ -973,7 +981,7 @@ def visit(self, node, scope, sscope): @visitor.when(DivNode) def visit(self, node, scope, sscope): - self.count += ' /' + #self.count += ' /' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -1030,7 +1038,7 @@ def visit(self, node, scope, sscope): @visitor.when(BitNotNode) def visit(self, node, scope, sscope): - self.count += ' ~' + #self.count += ' ~' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") expr_local = self.define_internal_local(scope=scope) @@ -1047,7 +1055,7 @@ def visit(self, node, scope, sscope): typeX = self.context.exprs_dict[node.expr].name except: typeX = 'Int' - # self.count += 1 + # #self.count += 1 self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", typeX)) else: right_type = 'Int' @@ -1062,7 +1070,7 @@ def visit(self, node, scope, sscope): right_type = (sscope.find_variable(node.expr.id)).type.name except: right_type = 'Int' - # self.count += 1 + # #self.count += 1 self.register_instruction(GetAttribNodeIL(expr_local, expr_value, "value", right_type)) self.register_instruction(UnaryNodeIL(op_local, expr_local, "~")) @@ -1075,7 +1083,7 @@ def visit(self, node, scope, sscope): @visitor.when(NotNode) def visit(self, node, scope, sscope): - self.count += ' !' + #self.count += ' !' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") expr_local = self.define_internal_local(scope=scope) @@ -1106,7 +1114,7 @@ def visit(self, node, scope, sscope): @visitor.when(LessNode) def visit(self, node, scope, sscope): - self.count += ' <' + #self.count += ' <' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -1165,7 +1173,7 @@ def visit(self, node, scope, sscope): @visitor.when(LessEqualNode) def visit(self, node, scope, sscope): - self.count += ' <=' + #self.count += ' <=' result_local = self.define_internal_local(scope=scope, name = "result") op_local = self.define_internal_local(scope=scope, name = "op") left_local = self.define_internal_local(scope=scope, name = "left") @@ -1225,7 +1233,7 @@ def visit(self, node, scope, sscope): @visitor.when(EqualNode) def visit(self, node, scope, sscope): - self.count += ' ==' + #self.count += ' ==' # print('----got in equalss----') # print(node) result_local = self.define_internal_local(scope=scope, name = "result") diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index be511a1c..70a4d7e0 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -1,195 +1,4 @@ -.data -dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" -case_void: .asciiz "Runtime Error: A case on void" -case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" -div_zero: .asciiz "Runtime Error: Division by zero" -substr: .asciiz "Runtime Error: Substring out of range" -heap: .asciiz "Runtime Error: Heap overflow" -temp_string: .space 2048 -void: .word 0 -Object_name: .asciiz "Object" -Object_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -Int_name: .asciiz "Int" -Int_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -String_name: .asciiz "String" -String_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word String.length -.word String.concat -.word String.substr -Bool_name: .asciiz "Bool" -Bool_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -A_name: .asciiz "A" -A_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word A.method5 -B_name: .asciiz "B" -B_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word B.method5 -C_name: .asciiz "C" -C_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word C.method5 -.word C.method6 -D_name: .asciiz "D" -D_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word B.method5 -.word D.method7 -E_name: .asciiz "E" -E_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word B.method5 -.word D.method7 -.word E.method6 -A2I_name: .asciiz "A2I" -A2I_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A2I.c2i -.word A2I.i2c -.word A2I.a2i -.word A2I.a2i_aux -.word A2I.i2a -.word A2I.i2a_aux -Main_name: .asciiz "Main" -Main_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -.word Main.menu -.word Main.prompt -.word Main.get_int -.word Main.is_even -.word Main.class_type -.word Main.print -.word Main.main -s_0: .asciiz "Abort called from class " -s_1: .asciiz " -" -empty_str: .asciiz "" -s_3: .asciiz "0" -s_4: .asciiz "1" -s_5: .asciiz "2" -s_6: .asciiz "3" -s_7: .asciiz "4" -s_8: .asciiz "5" -s_9: .asciiz "6" -s_10: .asciiz "7" -s_11: .asciiz "8" -s_12: .asciiz "9" -s_13: .asciiz "-" -s_14: .asciiz "+" -s_15: .asciiz "\n\tTo add a number to " -s_16: .asciiz "...enter a:\n" -s_17: .asciiz "\tTo negate " -s_18: .asciiz "...enter b:\n" -s_19: .asciiz "\tTo find the difference between " -s_20: .asciiz "and another number...enter c:\n" -s_21: .asciiz "\tTo find the factorial of " -s_22: .asciiz "...enter d:\n" -s_23: .asciiz "\tTo square " -s_24: .asciiz "...enter e:\n" -s_25: .asciiz "\tTo cube " -s_26: .asciiz "...enter f:\n" -s_27: .asciiz "\tTo find out if " -s_28: .asciiz "is a multiple of 3...enter g:\n" -s_29: .asciiz "\tTo divide " -s_30: .asciiz "by 8...enter h:\n" -s_31: .asciiz "\tTo get a new number...enter j:\n" -s_32: .asciiz "\tTo quit...enter q:\n\n" -s_33: .asciiz "\n" -s_34: .asciiz "Please enter a number... " -s_35: .asciiz "Oooops\n" -s_36: .asciiz "Class type is now E\n" -s_37: .asciiz "Class type is now D\n" -s_38: .asciiz "Class type is now C\n" -s_39: .asciiz "Class type is now B\n" -s_40: .asciiz "Class type is now A\n" -s_41: .asciiz " " -s_42: .asciiz "number " -s_43: .asciiz "is odd!\n" -s_44: .asciiz "is even!\n" -s_45: .asciiz "a" -s_46: .asciiz "b" -s_47: .asciiz "c" -s_48: .asciiz "d" -s_49: .asciiz "e" -s_50: .asciiz "f" -s_51: .asciiz "g" -s_52: .asciiz "h" -s_53: .asciiz "j" -s_54: .asciiz "q" -s_55: .asciiz "is equal to " -s_56: .asciiz "times 8 with a remainder of " -s_57: .asciiz "is not divisible by 3.\n" -s_58: .asciiz "is divisible by 3.\n" + .text dispatch_void_error: la $a0 dispatch_void @@ -6204,9 +6013,9 @@ jal $t3 sw $a1, 4($sp) lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 24($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 360($t0) @@ -6299,9 +6108,9 @@ jal $t3 sw $a1, 44($sp) lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 64($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 360($t0) @@ -6394,9 +6203,9 @@ jal $t3 sw $a1, 84($sp) lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 104($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 360($t0) @@ -6489,9 +6298,9 @@ jal $t3 sw $a1, 124($sp) lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 144($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 360($t0) @@ -6584,9 +6393,9 @@ jal $t3 sw $a1, 164($sp) lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 184($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 360($t0) @@ -6679,9 +6488,9 @@ jal $t3 sw $a1, 204($sp) lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 224($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 224($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 360($t0) @@ -6774,9 +6583,9 @@ jal $t3 sw $a1, 244($sp) lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 264($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 264($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 360($t0) @@ -8040,9 +7849,9 @@ jal $t3 sw $a1, 24($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 44($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 1140($t0) @@ -8057,12 +7866,12 @@ jal $t3 sw $a1, 40($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 60($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -8173,9 +7982,9 @@ sw $t1, 48($sp) label_87: lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 100($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 1140($t0) @@ -8204,7 +8013,7 @@ lw $t1, 104($sp) sw $t1, 16($t0) lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 132($sp) +sw $t1, 492($sp) la $t0, s_45 sw $t0, 136($sp) li $a0, 20 @@ -8234,7 +8043,7 @@ move $t0, $sp lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -8267,7 +8076,7 @@ lw $a0, 16($t0) bnez $a0, label_88 lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 172($sp) +sw $t1, 492($sp) la $t0, s_46 sw $t0, 176($sp) li $a0, 20 @@ -8297,7 +8106,7 @@ move $t0, $sp lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -8330,7 +8139,7 @@ lw $a0, 16($t0) bnez $a0, label_89 lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 212($sp) +sw $t1, 492($sp) la $t0, s_47 sw $t0, 216($sp) li $a0, 20 @@ -8360,7 +8169,7 @@ move $t0, $sp lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 212($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -8393,7 +8202,7 @@ lw $a0, 16($t0) bnez $a0, label_90 lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 252($sp) +sw $t1, 492($sp) la $t0, s_48 sw $t0, 256($sp) li $a0, 20 @@ -8423,7 +8232,7 @@ move $t0, $sp lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -8456,7 +8265,7 @@ lw $a0, 16($t0) bnez $a0, label_91 lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 292($sp) +sw $t1, 492($sp) la $t0, s_49 sw $t0, 296($sp) li $a0, 20 @@ -8486,7 +8295,7 @@ move $t0, $sp lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 292($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -8519,7 +8328,7 @@ lw $a0, 16($t0) bnez $a0, label_92 lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 332($sp) +sw $t1, 492($sp) la $t0, s_50 sw $t0, 336($sp) li $a0, 20 @@ -8549,7 +8358,7 @@ move $t0, $sp lw $t1, 340($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -8582,7 +8391,7 @@ lw $a0, 16($t0) bnez $a0, label_93 lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 372($sp) +sw $t1, 492($sp) la $t0, s_51 sw $t0, 376($sp) li $a0, 20 @@ -8612,7 +8421,7 @@ move $t0, $sp lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 372($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -8645,7 +8454,7 @@ lw $a0, 16($t0) bnez $a0, label_94 lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 412($sp) +sw $t1, 492($sp) la $t0, s_52 sw $t0, 416($sp) li $a0, 20 @@ -8675,7 +8484,7 @@ move $t0, $sp lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 412($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -8708,7 +8517,7 @@ lw $a0, 16($t0) bnez $a0, label_95 lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 452($sp) +sw $t1, 492($sp) la $t0, s_53 sw $t0, 456($sp) li $a0, 20 @@ -8738,7 +8547,7 @@ move $t0, $sp lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 452($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -8854,12 +8663,12 @@ jal A_init sw $a1, 520($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 528($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 528($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 528($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -8976,12 +8785,12 @@ jal E_init sw $a1, 576($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 584($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 584($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 584($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9006,12 +8815,12 @@ lw $t1, 568($sp) sw $t1, 564($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 612($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 612($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 612($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9163,9 +8972,9 @@ jal $t3 sw $a1, 660($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 680($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 680($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 1140($t0) @@ -9397,12 +9206,12 @@ jal D_init sw $a1, 784($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 792($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 792($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 792($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9467,9 +9276,9 @@ jal $t3 sw $a1, 796($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 816($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 816($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 1140($t0) @@ -9566,9 +9375,9 @@ jal $t3 sw $a1, 836($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 856($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 856($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 1140($t0) @@ -9652,12 +9461,12 @@ jal C_init sw $a1, 884($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 892($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 892($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 892($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9724,12 +9533,12 @@ jal C_init sw $a1, 912($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 920($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 920($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 920($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9796,12 +9605,12 @@ jal C_init sw $a1, 940($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 948($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 948($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 948($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9916,12 +9725,12 @@ jal D_init sw $a1, 988($sp) lw $t0, 1140($sp) lw $t1, 24($t0) -sw $t1, 996($sp) +sw $t1, 1124($sp) move $t0, $sp -lw $t1, 996($t0) +lw $t1, 1124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 996($t0) +lw $t1, 1124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9930,12 +9739,12 @@ jal $t3 sw $a1, 992($sp) lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1004($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1004($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1004($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9971,8 +9780,8 @@ b label_108 label_89: lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1016($sp) -lw $t0, 1016($sp) +sw $t1, 1132($sp) +lw $t0, 1132($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_110 @@ -9980,7 +9789,7 @@ b case_void_error label_110: blt $t1 0 label_111 bgt $t1 11 label_111 -lw $t1, 1016($sp) +lw $t1, 1132($sp) sw $t1, 1020($sp) la $t0, s_35 sw $t0, 1028($sp) @@ -10063,7 +9872,7 @@ b label_109 label_111: blt $t1 7 label_112 bgt $t1 7 label_112 -lw $t1, 1016($sp) +lw $t1, 1132($sp) sw $t1, 1056($sp) move $t0, $sp lw $t1, 1056($t0) @@ -10099,7 +9908,7 @@ b label_109 label_112: blt $t1 5 label_113 bgt $t1 5 label_113 -lw $t1, 1016($sp) +lw $t1, 1132($sp) sw $t1, 1072($sp) move $t0, $sp lw $t1, 1072($t0) diff --git a/tests/codegen/arith_test.mips b/tests/codegen/arith_test.mips new file mode 100644 index 00000000..76d96a43 --- /dev/null +++ b/tests/codegen/arith_test.mips @@ -0,0 +1,10078 @@ + +.text +dispatch_void_error: +la $a0 dispatch_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_void_error: +la $a0 case_void +li $v0, 4 +syscall +li $v0, 10 +syscall +case_no_match_error: +la $a0 case_no_match +li $v0, 4 +syscall +li $v0, 10 +syscall +div_zero_error: +la $a0 div_zero +li $v0, 4 +syscall +li $v0, 10 +syscall +substr_error: +la $a0 substr +li $v0, 4 +syscall +li $v0, 10 +syscall +heap_error: +la $a0 heap +li $v0, 4 +syscall +li $v0, 10 +syscall +main: +addi $sp, $sp, -8 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main_init +sw $a1, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Main.main +sw $a1, 8($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Object_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +Object.abort: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_0 +sw $t0, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +li $v0, 4 +syscall +la $t0, s_1 +sw $t0, 12($sp) +lw $a0, 12($sp) +li $v0, 4 +syscall +li $v0, 10 +syscall +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.type_name: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 4($t0) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +Object.copy: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $a0, 8($t0) +mul $a0, $a0, 4 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t1, $v0 +li $a0, 0 +lw $t3, 8($t0) +copy_object_word: +lw $t2, 0($t0) +sw $t2, 0($t1) +addi $t0, $t0, 4 +addi $t1, $t1, 4 +addi $a0, $a0, 1 +blt $a0, $t3, copy_object_word +sw $v0, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +IO_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 8 +jr $ra +IO.out_string: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a0, 4($sp) +li $v0, 4 +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.out_int: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 12($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +li $v0 , 1 +lw $a0 , 4($sp) +syscall +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +IO.in_string: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $a0, temp_string +li $a1, 2048 +li $v0, 8 +syscall +move $t0, $a0 +jump_read_str_char: +li $t1, 0 +lb $t1, 0($t0) +beqz $t1, analize_str_end +addi $t0, $t0, 1 +j jump_read_str_char +analize_str_end: +addi $t0, $t0, -1 +li $t1, 0 +lb $t1, 0($t0) +bne $t1, 10, finish_jump_read_str_char +sb $0, 0($t0) +addi $t0, $t0, -1 +lb $t1, 0($t0) +bne $t1, 13, finish_jump_read_str_char +sb $0, 0($t0) +j analize_str_end +finish_jump_read_str_char: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +IO.in_int: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $v0, 5 +syscall +sw $v0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String.length: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t0, 16($t0) +li $a0, 0 +count_char: +lb $t1, 0($t0) +beqz $t1, finish_chars_count +addi $t0, $t0, 1 +addi $a0, $a0, 1 +j count_char +finish_chars_count: +sw $a0, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 20 +jr $ra +String.concat: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 8($sp) +lw $t0, 44($sp) +lw $t1, 16($t0) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String.length +sw $a1, 16($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t0, 24($sp) +add $a0, $a0, $t0 +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t3, $v0 +lw $t0, 4($sp) +lw $t1, 12($sp) +copy_str1_char: +lb $t2, 0($t0) +sb $t2, 0($v0) +beqz $t2, concat_str2_char +addi $t0, $t0, 1 +addi $v0, $v0, 1 +j copy_str1_char +concat_str2_char: +lb $t2, 0($t1) +sb $t2, 0($v0) +beqz $t2, finish_str2_concat +addi $t1, $t1, 1 +addi $v0, $v0, 1 +j concat_str2_char +finish_str2_concat: +sb $0, ($v0) +sw $t3, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 48 +jr $ra +String.substr: +addi $sp, $sp, -20 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $a0, 8($sp) +addi $a0, $a0, 1 +li $v0, 9 +syscall +bge $v0, $sp heap_error +lw $t0, 4($sp) +lw $t1, 8($sp) +lw $t4, 24($sp) +lw $t2, 16($t4) +bltz $t0, substr_error +li $a0, 0 +jump_str_char: +beq $a0, $t0, finish_index_jump +addi $a0, $a0, 1 +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +j jump_str_char +finish_index_jump: +li $a0, 0 +move $t3, $v0 +copy_substr_char: +beq $a0, $t1 finish_substr_copy +li $t0, 0 +lb $t0, 0($t2) +sb $t0, 0($v0) +addi $t2, $t2, 1 +beq $t2, $zero, substr_error +addi $v0, $v0, 1 +addi $a0, $a0, 1 +j copy_substr_char +finish_substr_copy: +sb $0, ($v0) +sw $t3, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 20($sp) +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Bool_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +Int_init: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 4($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +String_equals: +addi $sp, $sp, -12 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $t0, 20($sp) +lw $t1, 16($t0) +sw $t1, 8($sp) +lw $t1, 4($sp) +lw $t2, 8($sp) +compare_str_char: +li $t3, 0 +lb $t3, 0($t1) +li $t4, 0 +lb $t4, 0($t2) +seq $a0, $t3, $t4 +beqz $a0, finish_compare_str +beqz $t3, finish_compare_str +beqz $t4, finish_compare_str +addi $t1, $t1, 1 +addi $t2, $t2, 1 +j compare_str_char +finish_compare_str: +sw $a0, 12($sp) +lw $a1, 12($sp) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +A_init: +addi $sp, $sp, -16 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Object_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +li $t0, 0 +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 16($sp) +lw $t0, 20($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $ra, 0($sp) +addi $sp, $sp, 24 +jr $ra +A.value: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 16($t0) +sw $t1, 4($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A.set_var: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 8($sp) +lw $t1, 12($sp) +sw $t1, 16($t0) +lw $a1, 8($sp) +lw $ra, 0($sp) +addi $sp, $sp, 16 +jr $ra +A.method1: +addi $sp, $sp, 0 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A.method2: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) +add $a0, $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 72 +jr $ra +A.method3: +addi $sp, $sp, -52 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t1, 28($sp) +neg $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 40($sp) +lw $t1, 40($sp) +sw $t1, 52($sp) +lw $a1, 52($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +A.method4: +addi $sp, $sp, -136 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +slt $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 24($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +sub $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 60($sp) +lw $t1, 44($sp) +sw $t1, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 76($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 80($sp) +lw $t1, 80($sp) +sw $t1, 4($sp) +b label_2 +label_1: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +li $t0, 0 +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 92($sp) +lw $t1, 84($sp) +sw $t1, 96($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $t0, 148($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $a0, 108($sp) +lw $t1, 112($sp) +sub $a0, $a0, $t1 +sw $a0, 104($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 116($sp) +lw $t1, 100($sp) +sw $t1, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 124($sp) +lw $t1, 124($sp) +sw $t1, 136($sp) +lw $t1, 136($sp) +sw $t1, 4($sp) +label_2: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 152 +jr $ra +A.method5: +addi $sp, $sp, -136 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 1 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +li $t0, 1 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 28($sp) +lw $t1, 20($sp) +sw $t1, 32($sp) +label_3: +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +sle $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 56($sp) +lw $t0, 40($sp) +lw $a0, 16($t0) +bnez $a0, label_4 +b label_5 +label_4: +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 72($sp) +lw $a0, 68($sp) +lw $t1, 72($sp) +mul $a0, $a0, $t1 +sw $a0, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +lw $t1, 60($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +li $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 32($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +add $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +lw $t1, 84($sp) +sw $t1, 32($sp) +b label_3 +label_5: +lw $t1, 36($sp) +sw $t1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 124($sp) +lw $t1, 124($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) +lw $ra, 0($sp) +addi $sp, $sp, 148 +jr $ra +B_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +B.method5: +addi $sp, $sp, -56 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) +mul $a0, $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 52($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 44($sp) +lw $t1, 44($sp) +sw $t1, 56($sp) +lw $a1, 56($sp) +lw $ra, 0($sp) +addi $sp, $sp, 68 +jr $ra +C_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +C.method6: +addi $sp, $sp, -52 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t1, 28($sp) +neg $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 48($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 40($sp) +lw $t1, 40($sp) +sw $t1, 52($sp) +lw $a1, 52($sp) +lw $ra, 0($sp) +addi $sp, $sp, 64 +jr $ra +C.method5: +addi $sp, $sp, -76 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 44($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $a0, 44($sp) +lw $t1, 48($sp) +mul $a0, $a0, $t1 +sw $a0, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 52($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) +mul $a0, $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 56($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 72($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 76($sp) +lw $a1, 76($sp) +lw $ra, 0($sp) +addi $sp, $sp, 88 +jr $ra +D_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +D.method7: +addi $sp, $sp, -244 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t1, 252($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +slt $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +lw $t0, 12($sp) +lw $a0, 16($t0) +bnez $a0, label_6 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +li $t0, 0 +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 72($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_7 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +li $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +seq $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 112($sp) +lw $t0, 84($sp) +lw $a0, 16($t0) +bnez $a0, label_8 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +li $t0, 2 +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +lw $t0, 136($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +lw $a0, 128($sp) +lw $t1, 132($sp) +seq $a0, $a0, $t1 +sw $a0, 124($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 148($sp) +lw $t0, 120($sp) +lw $a0, 16($t0) +bnez $a0, label_9 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +li $t0, 3 +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 180($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 164($sp) +lw $t0, 172($sp) +lw $t1, 16($t0) +sw $t1, 168($sp) +lw $a0, 164($sp) +lw $t1, 168($sp) +sub $a0, $a0, $t1 +sw $a0, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 184($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 152($sp) +lw $t1, 152($sp) +sw $t1, 116($sp) +b label_10 +label_9: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +li $t0, 0 +sw $t0, 192($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 196($sp) +lw $t1, 188($sp) +sw $t1, 116($sp) +label_10: +lw $t1, 116($sp) +sw $t1, 80($sp) +b label_11 +label_8: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 200($sp) +li $t0, 0 +sw $t0, 204($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 208($sp) +lw $t1, 200($sp) +sw $t1, 80($sp) +label_11: +lw $t1, 80($sp) +sw $t1, 44($sp) +b label_12 +label_7: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 212($sp) +li $t0, 1 +sw $t0, 216($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 220($sp) +lw $t1, 212($sp) +sw $t1, 44($sp) +label_12: +lw $t1, 44($sp) +sw $t1, 8($sp) +b label_13 +label_6: +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 236($sp) +lw $t1, 236($sp) +neg $a0, $t1 +sw $a0, 232($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 228($sp) +move $t0, $sp +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 240($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 248($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 224($sp) +lw $t1, 224($sp) +sw $t1, 8($sp) +label_13: +lw $t1, 8($sp) +sw $t1, 244($sp) +lw $a1, 244($sp) +lw $ra, 0($sp) +addi $sp, $sp, 256 +jr $ra +E_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +E.method6: +addi $sp, $sp, -68 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +li $t0, 8 +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 44($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 28($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 48($sp) +lw $t1, 20($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 56($sp) +lw $t1, 56($sp) +sw $t1, 68($sp) +lw $a1, 68($sp) +lw $ra, 0($sp) +addi $sp, $sp, 80 +jr $ra +A2I_init: +addi $sp, $sp, -4 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Object_init +sw $a1, 4($sp) +move $a1, $zero +lw $ra, 0($sp) +addi $sp, $sp, 12 +jr $ra +A2I.c2i: +addi $sp, $sp, -496 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_3 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_14 +la $t0, s_4 +sw $t0, 60($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 68($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_15 +la $t0, s_5 +sw $t0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +lw $t0, 80($sp) +lw $a0, 16($t0) +bnez $a0, label_16 +la $t0, s_6 +sw $t0, 132($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 144($sp) +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_17 +la $t0, s_7 +sw $t0, 168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 180($sp) +lw $t0, 152($sp) +lw $a0, 16($t0) +bnez $a0, label_18 +la $t0, s_8 +sw $t0, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 212($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +lw $t0, 188($sp) +lw $a0, 16($t0) +bnez $a0, label_19 +la $t0, s_9 +sw $t0, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 252($sp) +lw $t0, 224($sp) +lw $a0, 16($t0) +bnez $a0, label_20 +la $t0, s_10 +sw $t0, 276($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 280($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 284($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 288($sp) +lw $t0, 260($sp) +lw $a0, 16($t0) +bnez $a0, label_21 +la $t0, s_11 +sw $t0, 312($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 320($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 296($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 324($sp) +lw $t0, 296($sp) +lw $a0, 16($t0) +bnez $a0, label_22 +la $t0, s_12 +sw $t0, 348($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 356($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 504($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 360($sp) +lw $t0, 332($sp) +lw $a0, 16($t0) +bnez $a0, label_23 +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 364($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 368($sp) +li $t0, 0 +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 376($sp) +lw $t1, 368($sp) +sw $t1, 328($sp) +b label_24 +label_23: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 380($sp) +li $t0, 9 +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 388($sp) +lw $t1, 380($sp) +sw $t1, 328($sp) +label_24: +lw $t1, 328($sp) +sw $t1, 292($sp) +b label_25 +label_22: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 392($sp) +li $t0, 8 +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 400($sp) +lw $t1, 392($sp) +sw $t1, 292($sp) +label_25: +lw $t1, 292($sp) +sw $t1, 256($sp) +b label_26 +label_21: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 404($sp) +li $t0, 7 +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 412($sp) +lw $t1, 404($sp) +sw $t1, 256($sp) +label_26: +lw $t1, 256($sp) +sw $t1, 220($sp) +b label_27 +label_20: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 416($sp) +li $t0, 6 +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 424($sp) +lw $t1, 416($sp) +sw $t1, 220($sp) +label_27: +lw $t1, 220($sp) +sw $t1, 184($sp) +b label_28 +label_19: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 428($sp) +li $t0, 5 +sw $t0, 432($sp) +move $t0, $sp +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 436($sp) +lw $t1, 428($sp) +sw $t1, 184($sp) +label_28: +lw $t1, 184($sp) +sw $t1, 148($sp) +b label_29 +label_18: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 440($sp) +li $t0, 4 +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 448($sp) +lw $t1, 440($sp) +sw $t1, 148($sp) +label_29: +lw $t1, 148($sp) +sw $t1, 112($sp) +b label_30 +label_17: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 452($sp) +li $t0, 3 +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 460($sp) +lw $t1, 452($sp) +sw $t1, 112($sp) +label_30: +lw $t1, 112($sp) +sw $t1, 76($sp) +b label_31 +label_16: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 464($sp) +li $t0, 2 +sw $t0, 468($sp) +move $t0, $sp +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 472($sp) +lw $t1, 464($sp) +sw $t1, 76($sp) +label_31: +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_32 +label_15: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +li $t0, 1 +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 484($sp) +lw $t1, 476($sp) +sw $t1, 40($sp) +label_32: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_33 +label_14: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 488($sp) +li $t0, 0 +sw $t0, 492($sp) +move $t0, $sp +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 496($sp) +lw $t1, 488($sp) +sw $t1, 4($sp) +label_33: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 508 +jr $ra +A2I.i2c: +addi $sp, $sp, -496 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_34 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +li $t0, 1 +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +seq $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_35 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +li $t0, 2 +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 104($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) +seq $a0, $a0, $t1 +sw $a0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 108($sp) +lw $t0, 80($sp) +lw $a0, 16($t0) +bnez $a0, label_36 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +li $t0, 3 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 124($sp) +lw $t0, 132($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $a0, 124($sp) +lw $t1, 128($sp) +seq $a0, $a0, $t1 +sw $a0, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 144($sp) +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_37 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 168($sp) +li $t0, 4 +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 176($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 160($sp) +lw $t0, 168($sp) +lw $t1, 16($t0) +sw $t1, 164($sp) +lw $a0, 160($sp) +lw $t1, 164($sp) +seq $a0, $a0, $t1 +sw $a0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 180($sp) +lw $t0, 152($sp) +lw $a0, 16($t0) +bnez $a0, label_38 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +li $t0, 5 +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 212($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $t0, 204($sp) +lw $t1, 16($t0) +sw $t1, 200($sp) +lw $a0, 196($sp) +lw $t1, 200($sp) +seq $a0, $a0, $t1 +sw $a0, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 188($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 216($sp) +lw $t0, 188($sp) +lw $a0, 16($t0) +bnez $a0, label_39 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 240($sp) +li $t0, 6 +sw $t0, 244($sp) +move $t0, $sp +lw $t1, 244($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 248($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 232($sp) +lw $t0, 240($sp) +lw $t1, 16($t0) +sw $t1, 236($sp) +lw $a0, 232($sp) +lw $t1, 236($sp) +seq $a0, $a0, $t1 +sw $a0, 228($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 228($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 252($sp) +lw $t0, 224($sp) +lw $a0, 16($t0) +bnez $a0, label_40 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +li $t0, 7 +sw $t0, 280($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 268($sp) +lw $t0, 276($sp) +lw $t1, 16($t0) +sw $t1, 272($sp) +lw $a0, 268($sp) +lw $t1, 272($sp) +seq $a0, $a0, $t1 +sw $a0, 264($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 264($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 288($sp) +lw $t0, 260($sp) +lw $a0, 16($t0) +bnez $a0, label_41 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 312($sp) +li $t0, 8 +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 320($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 304($sp) +lw $t0, 312($sp) +lw $t1, 16($t0) +sw $t1, 308($sp) +lw $a0, 304($sp) +lw $t1, 308($sp) +seq $a0, $a0, $t1 +sw $a0, 300($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 296($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 324($sp) +lw $t0, 296($sp) +lw $a0, 16($t0) +bnez $a0, label_42 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 348($sp) +li $t0, 9 +sw $t0, 352($sp) +move $t0, $sp +lw $t1, 352($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 356($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 340($sp) +lw $t0, 348($sp) +lw $t1, 16($t0) +sw $t1, 344($sp) +lw $a0, 340($sp) +lw $t1, 344($sp) +seq $a0, $a0, $t1 +sw $a0, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 360($sp) +lw $t0, 332($sp) +lw $a0, 16($t0) +bnez $a0, label_43 +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 364($sp) +la $t0, empty_str +sw $t0, 368($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 372($sp) +move $t0, $sp +lw $t1, 368($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 376($sp) +lw $t1, 372($sp) +sw $t1, 328($sp) +b label_44 +label_43: +la $t0, s_12 +sw $t0, 380($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 384($sp) +move $t0, $sp +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 384($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 388($sp) +lw $t1, 384($sp) +sw $t1, 328($sp) +label_44: +lw $t1, 328($sp) +sw $t1, 292($sp) +b label_45 +label_42: +la $t0, s_11 +sw $t0, 392($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 392($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 400($sp) +lw $t1, 396($sp) +sw $t1, 292($sp) +label_45: +lw $t1, 292($sp) +sw $t1, 256($sp) +b label_46 +label_41: +la $t0, s_10 +sw $t0, 404($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 408($sp) +move $t0, $sp +lw $t1, 404($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 408($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 412($sp) +lw $t1, 408($sp) +sw $t1, 256($sp) +label_46: +lw $t1, 256($sp) +sw $t1, 220($sp) +b label_47 +label_40: +la $t0, s_9 +sw $t0, 416($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 424($sp) +lw $t1, 420($sp) +sw $t1, 220($sp) +label_47: +lw $t1, 220($sp) +sw $t1, 184($sp) +b label_48 +label_39: +la $t0, s_8 +sw $t0, 428($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 432($sp) +move $t0, $sp +lw $t1, 428($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 432($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 436($sp) +lw $t1, 432($sp) +sw $t1, 184($sp) +label_48: +lw $t1, 184($sp) +sw $t1, 148($sp) +b label_49 +label_38: +la $t0, s_7 +sw $t0, 440($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 444($sp) +move $t0, $sp +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 444($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 448($sp) +lw $t1, 444($sp) +sw $t1, 148($sp) +label_49: +lw $t1, 148($sp) +sw $t1, 112($sp) +b label_50 +label_37: +la $t0, s_6 +sw $t0, 452($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 456($sp) +move $t0, $sp +lw $t1, 452($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 460($sp) +lw $t1, 456($sp) +sw $t1, 112($sp) +label_50: +lw $t1, 112($sp) +sw $t1, 76($sp) +b label_51 +label_36: +la $t0, s_5 +sw $t0, 464($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 468($sp) +move $t0, $sp +lw $t1, 464($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 468($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 472($sp) +lw $t1, 468($sp) +sw $t1, 76($sp) +label_51: +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_52 +label_35: +la $t0, s_4 +sw $t0, 476($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 480($sp) +move $t0, $sp +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 484($sp) +lw $t1, 480($sp) +sw $t1, 40($sp) +label_52: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_53 +label_34: +la $t0, s_3 +sw $t0, 488($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 492($sp) +move $t0, $sp +lw $t1, 488($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 496($sp) +lw $t1, 492($sp) +sw $t1, 4($sp) +label_53: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 508 +jr $ra +A2I.a2i: +addi $sp, $sp, -312 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_54 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +li $t0, 1 +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +li $t0, 0 +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 88($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 64($sp) +la $t0, s_13 +sw $t0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 104($sp) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_55 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +li $t0, 1 +sw $t0, 136($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +li $t0, 0 +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 152($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 128($sp) +la $t0, s_14 +sw $t0, 156($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 164($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 168($sp) +lw $t0, 112($sp) +lw $a0, 16($t0) +bnez $a0, label_56 +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 172($sp) +lw $t1, 172($sp) +sw $t1, 108($sp) +b label_57 +label_56: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 204($sp) +li $t0, 1 +sw $t0, 208($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 204($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 212($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 192($sp) +lw $t0, 204($sp) +lw $t1, 16($t0) +sw $t1, 196($sp) +lw $a0, 192($sp) +lw $t1, 196($sp) +sub $a0, $a0, $t1 +sw $a0, 188($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 184($sp) +move $t0, $sp +lw $t1, 188($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 216($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +li $t0, 1 +sw $t0, 224($sp) +move $t0, $sp +lw $t1, 224($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 228($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 180($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 176($sp) +lw $t1, 176($sp) +sw $t1, 108($sp) +label_57: +lw $t1, 108($sp) +sw $t1, 44($sp) +b label_58 +label_55: +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 268($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 272($sp) +li $t0, 1 +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 280($sp) +lw $t0, 268($sp) +lw $t1, 16($t0) +sw $t1, 260($sp) +lw $t0, 272($sp) +lw $t1, 16($t0) +sw $t1, 264($sp) +lw $a0, 260($sp) +lw $t1, 264($sp) +sub $a0, $a0, $t1 +sw $a0, 256($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 284($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 288($sp) +li $t0, 1 +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 296($sp) +move $t0, $sp +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 320($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 248($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 244($sp) +lw $t0, 244($sp) +lw $t1, 16($t0) +sw $t1, 240($sp) +lw $t1, 240($sp) +neg $a0, $t1 +sw $a0, 236($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 232($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 300($sp) +lw $t1, 232($sp) +sw $t1, 44($sp) +label_58: +lw $t1, 44($sp) +sw $t1, 4($sp) +b label_59 +label_54: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 304($sp) +li $t0, 0 +sw $t0, 308($sp) +move $t0, $sp +lw $t1, 308($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 312($sp) +lw $t1, 304($sp) +sw $t1, 4($sp) +label_59: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 324 +jr $ra +A2I.a2i_aux: +addi $sp, $sp, -188 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +li $t0, 0 +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 12($sp) +lw $t1, 4($sp) +sw $t1, 16($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +lw $t1, 20($sp) +sw $t1, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) +label_60: +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +slt $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 64($sp) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_61 +b label_62 +label_61: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +li $t0, 10 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 16($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +mul $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +li $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 116($sp) +lw $t0, 84($sp) +lw $t1, 16($t0) +sw $t1, 76($sp) +lw $t0, 116($sp) +lw $t1, 16($t0) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) +add $a0, $a0, $t1 +sw $a0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t1, 68($sp) +sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 160($sp) +li $t0, 1 +sw $t0, 164($sp) +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 168($sp) +lw $t0, 40($sp) +lw $t1, 16($t0) +sw $t1, 152($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 156($sp) +lw $a0, 152($sp) +lw $t1, 156($sp) +add $a0, $a0, $t1 +sw $a0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 172($sp) +lw $t1, 144($sp) +sw $t1, 40($sp) +b label_60 +label_62: +lw $t1, 44($sp) +sw $t1, 180($sp) +lw $t1, 180($sp) +sw $t1, 184($sp) +lw $t1, 16($sp) +sw $t1, 188($sp) +lw $a1, 188($sp) +lw $ra, 0($sp) +addi $sp, $sp, 200 +jr $ra +A2I.i2a: +addi $sp, $sp, -156 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_63 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +li $t0, 0 +sw $t0, 64($sp) +move $t0, $sp +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t0, 60($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) +slt $a0, $a0, $t1 +sw $a0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 44($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 72($sp) +lw $t0, 44($sp) +lw $a0, 16($t0) +bnez $a0, label_64 +la $t0, s_13 +sw $t0, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 124($sp) +li $t0, 1 +sw $t0, 128($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $t1, 120($sp) +neg $a0, $t1 +sw $a0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 112($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +lw $t0, 112($sp) +lw $t1, 16($t0) +sw $t1, 108($sp) +lw $a0, 104($sp) +lw $t1, 108($sp) +mul $a0, $a0, $t1 +sw $a0, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 96($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 140($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 40($sp) +b label_65 +label_64: +move $t0, $sp +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 160($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 144($sp) +lw $t1, 144($sp) +sw $t1, 40($sp) +label_65: +lw $t1, 40($sp) +sw $t1, 4($sp) +b label_66 +label_63: +la $t0, s_3 +sw $t0, 148($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +move $t0, $sp +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 156($sp) +lw $t1, 152($sp) +sw $t1, 4($sp) +label_66: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 168 +jr $ra +A2I.i2a_aux: +addi $sp, $sp, -152 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +li $t0, 0 +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 32($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $a0, 16($sp) +lw $t1, 20($sp) +seq $a0, $a0, $t1 +sw $a0, 12($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 36($sp) +lw $t0, 8($sp) +lw $a0, 16($t0) +bnez $a0, label_67 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 56($sp) +li $t0, 10 +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 64($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 48($sp) +lw $t0, 56($sp) +lw $t1, 16($t0) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) +beq $t1, 0, div_zero_error +div $a0, $a0, $t1 +sw $a0, 44($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 44($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 68($sp) +lw $t1, 40($sp) +sw $t1, 72($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 80($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +li $t0, 10 +sw $t0, 124($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 128($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 112($sp) +lw $t0, 120($sp) +lw $t1, 16($t0) +sw $t1, 116($sp) +lw $a0, 112($sp) +lw $t1, 116($sp) +mul $a0, $a0, $t1 +sw $a0, 108($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 108($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 132($sp) +lw $t0, 160($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) +sub $a0, $a0, $t1 +sw $a0, 92($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 136($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 84($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 140($sp) +lw $t1, 140($sp) +sw $t1, 4($sp) +b label_68 +label_67: +la $t0, empty_str +sw $t0, 144($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 148($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 148($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 152($sp) +lw $t1, 148($sp) +sw $t1, 4($sp) +label_68: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 164 +jr $ra +Main_init: +addi $sp, $sp, -28 +addi $sp, $sp, -4 +sw $ra, 0($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal IO_init +sw $a1, 4($sp) +move $a1, $zero +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 8($sp) +la $t0, empty_str +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +lw $t0, 32($sp) +lw $t1, 8($sp) +sw $t1, 16($t0) +lw $t0, 32($sp) +la $t1, void +sw $t1, 20($t0) +lw $t0, 32($sp) +la $t1, void +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +li $t0, 1 +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 28($sp) +lw $t0, 32($sp) +lw $t1, 20($sp) +sw $t1, 28($t0) +lw $ra, 0($sp) +addi $sp, $sp, 36 +jr $ra +Main.menu: +addi $sp, $sp, -356 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_15 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 20($sp) +la $t0, s_16 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +la $t0, s_17 +sw $t0, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 52($sp) +move $t0, $sp +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 56($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 44($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 60($sp) +la $t0, s_18 +sw $t0, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 76($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 80($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 68($sp) +la $t0, s_19 +sw $t0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 84($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 100($sp) +la $t0, s_20 +sw $t0, 112($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 120($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 108($sp) +la $t0, s_21 +sw $t0, 128($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 132($sp) +move $t0, $sp +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 136($sp) +move $t0, $sp +lw $t1, 132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 124($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 140($sp) +la $t0, s_22 +sw $t0, 152($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 160($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 148($sp) +la $t0, s_23 +sw $t0, 168($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 172($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 176($sp) +move $t0, $sp +lw $t1, 172($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 164($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 180($sp) +la $t0, s_24 +sw $t0, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 196($sp) +move $t0, $sp +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 200($sp) +move $t0, $sp +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 188($sp) +la $t0, s_25 +sw $t0, 208($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 212($sp) +move $t0, $sp +lw $t1, 208($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 216($sp) +move $t0, $sp +lw $t1, 212($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 204($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 220($sp) +la $t0, s_26 +sw $t0, 232($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 236($sp) +move $t0, $sp +lw $t1, 232($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 240($sp) +move $t0, $sp +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 228($sp) +la $t0, s_27 +sw $t0, 248($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 252($sp) +move $t0, $sp +lw $t1, 248($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 256($sp) +move $t0, $sp +lw $t1, 252($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 244($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 260($sp) +la $t0, s_28 +sw $t0, 272($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 272($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 280($sp) +move $t0, $sp +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 268($sp) +la $t0, s_29 +sw $t0, 288($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 292($sp) +move $t0, $sp +lw $t1, 288($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 296($sp) +move $t0, $sp +lw $t1, 292($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 284($sp) +lw $t0, 360($sp) +lw $t1, 20($t0) +sw $t1, 304($sp) +move $t0, $sp +lw $t1, 304($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 300($sp) +la $t0, s_30 +sw $t0, 312($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 312($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 320($sp) +move $t0, $sp +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 308($sp) +la $t0, s_31 +sw $t0, 328($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 332($sp) +move $t0, $sp +lw $t1, 328($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 336($sp) +move $t0, $sp +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 324($sp) +la $t0, s_32 +sw $t0, 344($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 348($sp) +move $t0, $sp +lw $t1, 344($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 352($sp) +move $t0, $sp +lw $t1, 348($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 340($sp) +move $t0, $sp +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 356($sp) +lw $a1, 356($sp) +lw $ra, 0($sp) +addi $sp, $sp, 364 +jr $ra +Main.prompt: +addi $sp, $sp, -36 +addi $sp, $sp, -4 +sw $ra, 0($sp) +la $t0, s_1 +sw $t0, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 8($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 16($sp) +move $t0, $sp +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 4($sp) +la $t0, s_33 +sw $t0, 24($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 36($sp) +lw $a1, 36($sp) +lw $ra, 0($sp) +addi $sp, $sp, 44 +jr $ra +Main.get_int: +addi $sp, $sp, -32 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 8($sp) +lw $t1, 4($sp) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 16($sp) +lw $t1, 16($sp) +sw $t1, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 24($sp) +lw $t1, 24($sp) +sw $t1, 28($sp) +lw $t1, 28($sp) +sw $t1, 32($sp) +lw $a1, 32($sp) +lw $ra, 0($sp) +addi $sp, $sp, 40 +jr $ra +Main.is_even: +addi $sp, $sp, -196 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t1, 204($sp) +sw $t1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 28($sp) +li $t0, 0 +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 36($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 20($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 24($sp) +lw $a0, 20($sp) +lw $t1, 24($sp) +slt $a0, $a0, $t1 +sw $a0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 12($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 40($sp) +lw $t0, 12($sp) +lw $a0, 16($t0) +bnez $a0, label_69 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 64($sp) +li $t0, 0 +sw $t0, 68($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 64($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 72($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) +seq $a0, $a0, $t1 +sw $a0, 52($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 48($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 76($sp) +lw $t0, 48($sp) +lw $a0, 16($t0) +bnez $a0, label_70 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +li $t0, 1 +sw $t0, 104($sp) +move $t0, $sp +lw $t1, 104($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 108($sp) +lw $t0, 100($sp) +lw $t1, 16($t0) +sw $t1, 92($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) +seq $a0, $a0, $t1 +sw $a0, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 84($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 112($sp) +lw $t0, 84($sp) +lw $a0, 16($t0) +bnez $a0, label_71 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 136($sp) +li $t0, 2 +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 144($sp) +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 128($sp) +lw $t0, 136($sp) +lw $t1, 16($t0) +sw $t1, 132($sp) +lw $a0, 128($sp) +lw $t1, 132($sp) +sub $a0, $a0, $t1 +sw $a0, 124($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 148($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 116($sp) +lw $t1, 116($sp) +sw $t1, 80($sp) +b label_72 +label_71: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 152($sp) +li $t0, 0 +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 152($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 160($sp) +lw $t1, 152($sp) +sw $t1, 80($sp) +label_72: +lw $t1, 80($sp) +sw $t1, 44($sp) +b label_73 +label_70: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 164($sp) +li $t0, 1 +sw $t0, 168($sp) +move $t0, $sp +lw $t1, 168($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 164($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 172($sp) +lw $t1, 164($sp) +sw $t1, 44($sp) +label_73: +lw $t1, 44($sp) +sw $t1, 8($sp) +b label_74 +label_69: +lw $t0, 4($sp) +lw $t1, 16($t0) +sw $t1, 188($sp) +lw $t1, 188($sp) +neg $a0, $t1 +sw $a0, 184($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 180($sp) +move $t0, $sp +lw $t1, 184($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 192($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 200($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 176($sp) +lw $t1, 176($sp) +sw $t1, 8($sp) +label_74: +lw $t1, 8($sp) +sw $t1, 196($sp) +lw $a1, 196($sp) +lw $ra, 0($sp) +addi $sp, $sp, 208 +jr $ra +Main.class_type: +addi $sp, $sp, -124 +addi $sp, $sp, -4 +sw $ra, 0($sp) +lw $t0, 132($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_76 +b case_void_error +label_76: +blt $t1 9 label_77 +bgt $t1 9 label_77 +lw $t1, 132($sp) +sw $t1, 8($sp) +la $t0, s_34 +sw $t0, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 20($sp) +move $t0, $sp +lw $t1, 16($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 12($sp) +lw $t1, 12($sp) +sw $t1, 4($sp) +b label_75 +label_77: +blt $t1 8 label_78 +bgt $t1 9 label_78 +lw $t1, 132($sp) +sw $t1, 28($sp) +la $t0, s_35 +sw $t0, 36($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 44($sp) +move $t0, $sp +lw $t1, 40($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 32($sp) +lw $t1, 32($sp) +sw $t1, 4($sp) +b label_75 +label_78: +blt $t1 7 label_79 +bgt $t1 7 label_79 +lw $t1, 132($sp) +sw $t1, 48($sp) +la $t0, s_36 +sw $t0, 56($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 60($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 64($sp) +move $t0, $sp +lw $t1, 60($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 52($sp) +lw $t1, 52($sp) +sw $t1, 4($sp) +b label_75 +label_79: +blt $t1 6 label_80 +bgt $t1 9 label_80 +lw $t1, 132($sp) +sw $t1, 68($sp) +la $t0, s_37 +sw $t0, 76($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 80($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 84($sp) +move $t0, $sp +lw $t1, 80($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 72($sp) +lw $t1, 72($sp) +sw $t1, 4($sp) +b label_75 +label_80: +blt $t1 5 label_81 +bgt $t1 9 label_81 +lw $t1, 132($sp) +sw $t1, 88($sp) +la $t0, s_38 +sw $t0, 96($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 100($sp) +move $t0, $sp +lw $t1, 96($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 104($sp) +move $t0, $sp +lw $t1, 100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 92($sp) +lw $t1, 92($sp) +sw $t1, 4($sp) +b label_75 +label_81: +blt $t1 0 label_82 +bgt $t1 9 label_82 +lw $t1, 132($sp) +sw $t1, 108($sp) +la $t0, s_39 +sw $t0, 116($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 120($sp) +move $t0, $sp +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 124($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 128($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 112($sp) +lw $t1, 112($sp) +sw $t1, 4($sp) +b label_75 +label_82: +b case_no_match_error +label_75: +lw $a1, 4($sp) +lw $ra, 0($sp) +addi $sp, $sp, 136 +jr $ra +Main.print: +addi $sp, $sp, -44 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 8($sp) +lw $t1, 4($sp) +sw $t1, 12($sp) +move $t0, $sp +lw $t1, 52($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 52($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +move $t0, $sp +lw $t1, 24($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 20($sp) +move $t0, $sp +lw $t1, 20($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 16($sp) +la $t0, s_40 +sw $t0, 32($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 40($sp) +move $t0, $sp +lw $t1, 36($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 48($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 28($sp) +lw $t1, 28($sp) +sw $t1, 44($sp) +lw $a1, 44($sp) +lw $ra, 0($sp) +addi $sp, $sp, 56 +jr $ra +Main.main: +addi $sp, $sp, -1136 +addi $sp, $sp, -4 +sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 4($sp) +move $t0, $sp +lw $t1, 4($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 8($sp) +lw $t0, 1140($sp) +lw $t1, 4($sp) +sw $t1, 20($t0) +label_83: +lw $t0, 1140($sp) +lw $t1, 28($t0) +sw $t1, 20($sp) +lw $t0, 20($sp) +lw $a0, 16($t0) +bnez $a0, label_84 +b label_85 +label_84: +la $t0, s_41 +sw $t0, 28($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 32($sp) +move $t0, $sp +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) +move $t0, $sp +lw $t1, 32($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 24($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 40($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 56($sp) +move $t0, $sp +lw $t1, 56($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 52($sp) +lw $t0, 52($sp) +lw $a0, 16($t0) +bnez $a0, label_86 +la $t0, s_42 +sw $t0, 68($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 68($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 76($sp) +move $t0, $sp +lw $t1, 72($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 48($sp) +b label_87 +label_86: +la $t0, s_43 +sw $t0, 84($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 88($sp) +move $t0, $sp +lw $t1, 84($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 92($sp) +move $t0, $sp +lw $t1, 88($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 80($sp) +lw $t1, 80($sp) +sw $t1, 48($sp) +label_87: +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 104($sp) +lw $t0, 1140($sp) +lw $t1, 104($sp) +sw $t1, 16($t0) +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_44 +sw $t0, 136($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 140($sp) +move $t0, $sp +lw $t1, 136($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 144($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 148($sp) +lw $t0, 116($sp) +lw $a0, 16($t0) +bnez $a0, label_88 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_45 +sw $t0, 176($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 180($sp) +move $t0, $sp +lw $t1, 176($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 184($sp) +move $t0, $sp +lw $t1, 180($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 156($sp) +move $t0, $sp +lw $t1, 160($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 188($sp) +lw $t0, 156($sp) +lw $a0, 16($t0) +bnez $a0, label_89 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_46 +sw $t0, 216($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 220($sp) +move $t0, $sp +lw $t1, 216($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 224($sp) +move $t0, $sp +lw $t1, 220($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 200($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 196($sp) +move $t0, $sp +lw $t1, 200($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 196($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 228($sp) +lw $t0, 196($sp) +lw $a0, 16($t0) +bnez $a0, label_90 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_47 +sw $t0, 256($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 260($sp) +move $t0, $sp +lw $t1, 256($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 264($sp) +move $t0, $sp +lw $t1, 260($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 240($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 236($sp) +move $t0, $sp +lw $t1, 240($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 236($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 268($sp) +lw $t0, 236($sp) +lw $a0, 16($t0) +bnez $a0, label_91 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_48 +sw $t0, 296($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 300($sp) +move $t0, $sp +lw $t1, 296($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 304($sp) +move $t0, $sp +lw $t1, 300($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 280($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 276($sp) +move $t0, $sp +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 276($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 308($sp) +lw $t0, 276($sp) +lw $a0, 16($t0) +bnez $a0, label_92 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_49 +sw $t0, 336($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 340($sp) +move $t0, $sp +lw $t1, 336($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 340($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 344($sp) +move $t0, $sp +lw $t1, 340($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 320($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 316($sp) +move $t0, $sp +lw $t1, 320($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 316($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 348($sp) +lw $t0, 316($sp) +lw $a0, 16($t0) +bnez $a0, label_93 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_50 +sw $t0, 376($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 380($sp) +move $t0, $sp +lw $t1, 376($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 384($sp) +move $t0, $sp +lw $t1, 380($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 360($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 356($sp) +move $t0, $sp +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 356($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 388($sp) +lw $t0, 356($sp) +lw $a0, 16($t0) +bnez $a0, label_94 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_51 +sw $t0, 416($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 420($sp) +move $t0, $sp +lw $t1, 416($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 424($sp) +move $t0, $sp +lw $t1, 420($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 400($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 396($sp) +move $t0, $sp +lw $t1, 400($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 396($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 428($sp) +lw $t0, 396($sp) +lw $a0, 16($t0) +bnez $a0, label_95 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_52 +sw $t0, 456($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 460($sp) +move $t0, $sp +lw $t1, 456($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 460($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 464($sp) +move $t0, $sp +lw $t1, 460($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 440($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 436($sp) +move $t0, $sp +lw $t1, 440($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 436($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 468($sp) +lw $t0, 436($sp) +lw $a0, 16($t0) +bnez $a0, label_96 +lw $t0, 1140($sp) +lw $t1, 16($t0) +sw $t1, 492($sp) +la $t0, s_53 +sw $t0, 496($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 500($sp) +move $t0, $sp +lw $t1, 496($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 504($sp) +move $t0, $sp +lw $t1, 500($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 492($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_equals +sw $a1, 480($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 476($sp) +move $t0, $sp +lw $t1, 480($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 476($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 508($sp) +lw $t0, 476($sp) +lw $a0, 16($t0) +bnez $a0, label_97 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 516($sp) +move $t0, $sp +lw $t1, 516($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 520($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 524($sp) +move $t0, $sp +lw $t1, 524($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 516($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 516($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 20($t2) +jal $t3 +sw $a1, 512($sp) +lw $t0, 1140($sp) +lw $t1, 512($sp) +sw $t1, 20($t0) +lw $t1, 512($sp) +sw $t1, 472($sp) +b label_98 +label_97: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 3 +sw $t1, 0($t0) +la $t1, Bool_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Bool_methods +sw $t1, 12($t0) +sw $t0, 536($sp) +li $t0, 0 +sw $t0, 540($sp) +move $t0, $sp +lw $t1, 540($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 536($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Bool_init +sw $a1, 544($sp) +lw $t0, 1140($sp) +lw $t1, 536($sp) +sw $t1, 28($t0) +lw $t1, 536($sp) +sw $t1, 472($sp) +label_98: +lw $t1, 472($sp) +sw $t1, 432($sp) +b label_99 +label_96: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 552($sp) +move $t0, $sp +lw $t1, 552($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 556($sp) +lw $t0, 1140($sp) +lw $t1, 552($sp) +sw $t1, 20($t0) +lw $t1, 552($sp) +sw $t1, 432($sp) +label_99: +lw $t1, 432($sp) +sw $t1, 392($sp) +b label_100 +label_95: +la $t1, void +sw $t1, 564($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, E_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, E_methods +sw $t1, 12($t0) +sw $t0, 572($sp) +move $t0, $sp +lw $t1, 572($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal E_init +sw $a1, 576($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 580($sp) +move $t0, $sp +lw $t1, 580($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 572($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 572($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 44($t2) +jal $t3 +sw $a1, 568($sp) +lw $t1, 568($sp) +sw $t1, 564($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 608($sp) +move $t0, $sp +lw $t1, 564($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 564($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 632($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 636($sp) +li $t0, 8 +sw $t0, 640($sp) +move $t0, $sp +lw $t1, 640($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 636($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 644($sp) +lw $t0, 632($sp) +lw $t1, 16($t0) +sw $t1, 624($sp) +lw $t0, 636($sp) +lw $t1, 16($t0) +sw $t1, 628($sp) +lw $a0, 624($sp) +lw $t1, 628($sp) +mul $a0, $a0, $t1 +sw $a0, 620($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 616($sp) +move $t0, $sp +lw $t1, 620($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 616($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 648($sp) +lw $t0, 608($sp) +lw $t1, 16($t0) +sw $t1, 600($sp) +lw $t0, 616($sp) +lw $t1, 16($t0) +sw $t1, 604($sp) +lw $a0, 600($sp) +lw $t1, 604($sp) +sub $a0, $a0, $t1 +sw $a0, 596($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 592($sp) +move $t0, $sp +lw $t1, 596($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 592($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 652($sp) +lw $t1, 592($sp) +sw $t1, 656($sp) +la $t0, s_41 +sw $t0, 664($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 668($sp) +move $t0, $sp +lw $t1, 664($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 668($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 672($sp) +move $t0, $sp +lw $t1, 668($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 660($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 676($sp) +la $t0, s_54 +sw $t0, 688($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 692($sp) +move $t0, $sp +lw $t1, 688($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 692($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 696($sp) +move $t0, $sp +lw $t1, 692($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 684($sp) +move $t0, $sp +lw $t1, 564($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 700($sp) +la $t0, s_55 +sw $t0, 708($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 712($sp) +move $t0, $sp +lw $t1, 708($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 712($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 716($sp) +move $t0, $sp +lw $t1, 712($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 704($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 720($sp) +move $t0, $sp +lw $t1, 720($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A2I_init +sw $a1, 724($sp) +lw $t1, 720($sp) +sw $t1, 728($sp) +move $t0, $sp +lw $t1, 656($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 728($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 728($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 736($sp) +move $t0, $sp +lw $t1, 736($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 732($sp) +la $t0, s_1 +sw $t0, 744($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 748($sp) +move $t0, $sp +lw $t1, 744($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 748($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 752($sp) +move $t0, $sp +lw $t1, 748($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 740($sp) +lw $t1, 740($sp) +sw $t1, 756($sp) +lw $t1, 756($sp) +sw $t1, 760($sp) +lw $t0, 1140($sp) +lw $t1, 564($sp) +sw $t1, 20($t0) +lw $t1, 564($sp) +sw $t1, 768($sp) +lw $t1, 768($sp) +sw $t1, 392($sp) +label_100: +lw $t1, 392($sp) +sw $t1, 352($sp) +b label_101 +label_94: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 780($sp) +move $t0, $sp +lw $t1, 780($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 784($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 788($sp) +move $t0, $sp +lw $t1, 788($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 780($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 780($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 776($sp) +lw $t0, 776($sp) +lw $a0, 16($t0) +bnez $a0, label_102 +la $t0, s_41 +sw $t0, 800($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 804($sp) +move $t0, $sp +lw $t1, 800($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 804($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 808($sp) +move $t0, $sp +lw $t1, 804($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 796($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 812($sp) +la $t0, s_56 +sw $t0, 824($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 828($sp) +move $t0, $sp +lw $t1, 824($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 828($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 832($sp) +move $t0, $sp +lw $t1, 828($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 820($sp) +lw $t1, 820($sp) +sw $t1, 772($sp) +b label_103 +label_102: +la $t0, s_41 +sw $t0, 840($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 844($sp) +move $t0, $sp +lw $t1, 840($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 844($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 848($sp) +move $t0, $sp +lw $t1, 844($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 836($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) +jal $t3 +sw $a1, 852($sp) +la $t0, s_57 +sw $t0, 864($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 868($sp) +move $t0, $sp +lw $t1, 864($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 868($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 872($sp) +move $t0, $sp +lw $t1, 868($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 860($sp) +lw $t1, 860($sp) +sw $t1, 772($sp) +label_103: +lw $t1, 772($sp) +sw $t1, 352($sp) +label_101: +lw $t1, 352($sp) +sw $t1, 312($sp) +b label_104 +label_93: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 880($sp) +move $t0, $sp +lw $t1, 880($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 884($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 888($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 896($sp) +move $t0, $sp +lw $t1, 888($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 880($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 896($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 876($sp) +lw $t0, 1140($sp) +lw $t1, 876($sp) +sw $t1, 20($t0) +lw $t1, 876($sp) +sw $t1, 312($sp) +label_104: +lw $t1, 312($sp) +sw $t1, 272($sp) +b label_105 +label_92: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 908($sp) +move $t0, $sp +lw $t1, 908($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 912($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 916($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 924($sp) +move $t0, $sp +lw $t1, 916($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 908($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 924($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 904($sp) +lw $t0, 1140($sp) +lw $t1, 904($sp) +sw $t1, 20($t0) +lw $t1, 904($sp) +sw $t1, 272($sp) +label_105: +lw $t1, 272($sp) +sw $t1, 232($sp) +b label_106 +label_91: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 936($sp) +move $t0, $sp +lw $t1, 936($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal C_init +sw $a1, 940($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 944($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 952($sp) +move $t0, $sp +lw $t1, 944($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 936($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 952($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 932($sp) +lw $t0, 1140($sp) +lw $t1, 932($sp) +sw $t1, 20($t0) +lw $t1, 932($sp) +sw $t1, 232($sp) +label_106: +lw $t1, 232($sp) +sw $t1, 192($sp) +b label_107 +label_90: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 964($sp) +move $t0, $sp +lw $t1, 964($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 968($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 972($sp) +move $t0, $sp +lw $t1, 972($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 964($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 964($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 960($sp) +lw $t0, 1140($sp) +lw $t1, 960($sp) +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 984($sp) +move $t0, $sp +lw $t1, 984($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal D_init +sw $a1, 988($sp) +lw $t0, 1140($sp) +lw $t1, 24($t0) +sw $t1, 1124($sp) +move $t0, $sp +lw $t1, 1124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1124($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 992($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1000($sp) +move $t0, $sp +lw $t1, 992($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1000($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 984($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 984($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 32($t2) +jal $t3 +sw $a1, 980($sp) +lw $t0, 1140($sp) +lw $t1, 980($sp) +sw $t1, 20($t0) +lw $t1, 980($sp) +sw $t1, 192($sp) +label_107: +lw $t1, 192($sp) +sw $t1, 152($sp) +b label_108 +label_89: +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +lw $t0, 1132($sp) +lw $t1, 0($t0) +la $a0, void +bne $t1 $a0 label_110 +b case_void_error +label_110: +blt $t1 7 label_111 +bgt $t1 7 label_111 +lw $t1, 1132($sp) +sw $t1, 1020($sp) +move $t0, $sp +lw $t1, 1020($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1020($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1028($sp) +move $t0, $sp +lw $t1, 1028($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1020($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1020($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 1024($sp) +lw $t0, 1140($sp) +lw $t1, 1024($sp) +sw $t1, 20($t0) +lw $t1, 1024($sp) +sw $t1, 1012($sp) +b label_109 +label_111: +blt $t1 5 label_112 +bgt $t1 9 label_112 +lw $t1, 1132($sp) +sw $t1, 1036($sp) +move $t0, $sp +lw $t1, 1036($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1036($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1044($sp) +move $t0, $sp +lw $t1, 1044($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1036($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1036($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 1040($sp) +lw $t0, 1140($sp) +lw $t1, 1040($sp) +sw $t1, 20($t0) +lw $t1, 1040($sp) +sw $t1, 1012($sp) +b label_109 +label_112: +blt $t1 0 label_113 +bgt $t1 9 label_113 +lw $t1, 1132($sp) +sw $t1, 1052($sp) +la $t0, s_39 +sw $t0, 1060($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 1064($sp) +move $t0, $sp +lw $t1, 1060($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1064($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 1068($sp) +move $t0, $sp +lw $t1, 1064($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1056($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 0($t2) +jal $t3 +sw $a1, 1072($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 4 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 1076($sp) +li $t0, 0 +sw $t0, 1080($sp) +move $t0, $sp +lw $t1, 1080($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1076($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal Int_init +sw $a1, 1084($sp) +lw $t1, 1076($sp) +sw $t1, 1012($sp) +b label_109 +label_113: +b case_no_match_error +label_109: +lw $t1, 1012($sp) +sw $t1, 152($sp) +label_108: +lw $t1, 152($sp) +sw $t1, 112($sp) +b label_114 +label_88: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, A_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, A_methods +sw $t1, 12($t0) +sw $t0, 1092($sp) +move $t0, $sp +lw $t1, 1092($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal A_init +sw $a1, 1096($sp) +move $t0, $sp +lw $t1, 1140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1140($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 36($t2) +jal $t3 +sw $a1, 1100($sp) +move $t0, $sp +lw $t1, 1100($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1092($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1092($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 16($t2) +jal $t3 +sw $a1, 1088($sp) +lw $t0, 1140($sp) +lw $t1, 1088($sp) +sw $t1, 24($t0) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, B_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, B_methods +sw $t1, 12($t0) +sw $t0, 1112($sp) +move $t0, $sp +lw $t1, 1112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal B_init +sw $a1, 1116($sp) +lw $t0, 1140($sp) +lw $t1, 24($t0) +sw $t1, 1124($sp) +move $t0, $sp +lw $t1, 1124($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1124($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1120($sp) +lw $t0, 1140($sp) +lw $t1, 20($t0) +sw $t1, 1132($sp) +move $t0, $sp +lw $t1, 1132($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1132($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1128($sp) +move $t0, $sp +lw $t1, 1120($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1112($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 24($t2) +jal $t3 +sw $a1, 1108($sp) +lw $t0, 1140($sp) +lw $t1, 1108($sp) +sw $t1, 20($t0) +lw $t1, 1108($sp) +sw $t1, 112($sp) +label_114: +b label_83 +label_85: +lw $a1, 16($sp) +lw $ra, 0($sp) +addi $sp, $sp, 1144 +jr $ra \ No newline at end of file diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index dcd3ed03..d2ffb85a 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -2154,12 +2154,12 @@ lw $t1, 4($sp) sw $t1, 16($t0) lw $t0, 148($sp) lw $t1, 16($t0) -sw $t1, 36($sp) +sw $t1, 104($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2259,12 +2259,12 @@ b label_18 label_17: lw $t0, 148($sp) lw $t1, 16($t0) -sw $t1, 96($sp) +sw $t1, 104($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 0e5264ea..21b447b1 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -1037,7 +1037,7 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 100($sp) lw $t1, 20($t0) -sw $t1, 24($sp) +sw $t1, 76($sp) li $a0, 20 li $v0, 9 syscall @@ -1063,7 +1063,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 36($sp) -lw $t0, 24($sp) +lw $t0, 76($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 28($sp) @@ -1101,9 +1101,9 @@ lw $a0, 16($t0) bnez $a0, label_3 lw $t0, 100($sp) lw $t1, 16($t0) -sw $t1, 60($sp) +sw $t1, 96($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 100($t0) @@ -1245,7 +1245,7 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 92($sp) lw $t1, 16($t0) -sw $t1, 20($sp) +sw $t1, 36($sp) lw $t0, 92($sp) lw $t1, 16($t0) sw $t1, 36($sp) @@ -1278,10 +1278,10 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 40($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) lw $a0, 12($sp) @@ -1313,7 +1313,7 @@ jal Bool_init sw $a1, 44($sp) lw $t0, 92($sp) lw $t1, 20($t0) -sw $t1, 64($sp) +sw $t1, 80($sp) lw $t0, 92($sp) lw $t1, 20($t0) sw $t1, 80($sp) @@ -1346,10 +1346,10 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 84($sp) -lw $t0, 64($sp) +lw $t0, 80($sp) lw $t1, 16($t0) sw $t1, 56($sp) -lw $t0, 64($sp) +lw $t0, 80($sp) lw $t1, 16($t0) sw $t1, 56($sp) lw $a0, 56($sp) @@ -1389,7 +1389,7 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 48($sp) lw $t1, 20($t0) -sw $t1, 20($sp) +sw $t1, 36($sp) lw $t0, 48($sp) lw $t1, 20($t0) sw $t1, 36($sp) @@ -1422,10 +1422,10 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 40($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) lw $a0, 12($sp) @@ -1465,7 +1465,7 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 48($sp) lw $t1, 16($t0) -sw $t1, 20($sp) +sw $t1, 36($sp) lw $t0, 48($sp) lw $t1, 16($t0) sw $t1, 36($sp) @@ -1498,10 +1498,10 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 40($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) lw $a0, 12($sp) diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index a67e19e9..c527c773 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -2451,12 +2451,12 @@ sw $t1, 20($sp) label_6: lw $t0, 140($sp) lw $t1, 20($t0) -sw $t1, 60($sp) +sw $t1, 100($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 100($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2557,9 +2557,9 @@ b label_8 label_7: lw $t0, 140($sp) lw $t1, 20($t0) -sw $t1, 88($sp) +sw $t1, 100($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 140($t0) @@ -5312,12 +5312,12 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 20($sp) lw $t1, 24($t0) -sw $t1, 8($sp) +sw $t1, 16($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 16($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 0be21c95..fbe445ce 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -886,8 +886,8 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 60($sp) lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t1, 4($sp) +sw $t1, 28($sp) +lw $t1, 28($sp) sw $t1, 8($sp) lw $t0, 60($sp) lw $t1, 16($t0) @@ -1493,8 +1493,8 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 60($sp) lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t1, 4($sp) +sw $t1, 28($sp) +lw $t1, 28($sp) sw $t1, 8($sp) lw $t0, 60($sp) lw $t1, 16($t0) diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index e99147ff..29d3c73b 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -1866,9 +1866,9 @@ lw $t1, 28($t0) sw $t1, 76($sp) lw $t0, 152($sp) lw $t1, 20($t0) -sw $t1, 80($sp) +sw $t1, 116($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) @@ -2234,11 +2234,11 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 104($sp) lw $t1, 20($t0) -sw $t1, 40($sp) +sw $t1, 84($sp) lw $t0, 108($sp) lw $t1, 16($t0) sw $t1, 32($sp) -lw $t0, 40($sp) +lw $t0, 84($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $a0, 32($sp) @@ -2424,11 +2424,11 @@ lw $t1, 24($t0) sw $t1, 24($sp) lw $t0, 96($sp) lw $t1, 20($t0) -sw $t1, 44($sp) +sw $t1, 76($sp) lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 36($sp) -lw $t0, 44($sp) +lw $t0, 76($sp) lw $t1, 16($t0) sw $t1, 40($sp) lw $a0, 36($sp) @@ -2644,11 +2644,11 @@ jal Int_init sw $a1, 84($sp) lw $t0, 188($sp) lw $t1, 20($t0) -sw $t1, 88($sp) +sw $t1, 96($sp) lw $t0, 56($sp) lw $t1, 16($t0) sw $t1, 48($sp) -lw $t0, 88($sp) +lw $t0, 96($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $a0, 48($sp) @@ -2984,11 +2984,11 @@ lw $a0, 16($t0) bnez $a0, label_24 lw $t0, 172($sp) lw $t1, 20($t0) -sw $t1, 92($sp) +sw $t1, 100($sp) lw $t0, 176($sp) lw $t1, 16($t0) sw $t1, 84($sp) -lw $t0, 92($sp) +lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 88($sp) lw $a0, 84($sp) @@ -3237,11 +3237,11 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 196($sp) lw $t1, 20($t0) -sw $t1, 40($sp) +sw $t1, 124($sp) lw $t0, 200($sp) lw $t1, 16($t0) sw $t1, 32($sp) -lw $t0, 40($sp) +lw $t0, 124($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $a0, 32($sp) @@ -3334,11 +3334,11 @@ lw $a0, 16($t0) bnez $a0, label_28 lw $t0, 196($sp) lw $t1, 20($t0) -sw $t1, 116($sp) +sw $t1, 124($sp) lw $t0, 200($sp) lw $t1, 16($t0) sw $t1, 108($sp) -lw $t0, 116($sp) +lw $t0, 124($sp) lw $t1, 16($t0) sw $t1, 112($sp) lw $a0, 108($sp) @@ -3587,11 +3587,11 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 260($sp) lw $t1, 20($t0) -sw $t1, 40($sp) +sw $t1, 156($sp) lw $t0, 264($sp) lw $t1, 16($t0) sw $t1, 32($sp) -lw $t0, 40($sp) +lw $t0, 156($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $a0, 32($sp) @@ -3742,11 +3742,11 @@ jal Int_init sw $a1, 144($sp) lw $t0, 260($sp) lw $t1, 20($t0) -sw $t1, 148($sp) +sw $t1, 156($sp) lw $t0, 116($sp) lw $t1, 16($t0) sw $t1, 108($sp) -lw $t0, 148($sp) +lw $t0, 156($sp) lw $t1, 16($t0) sw $t1, 112($sp) lw $a0, 108($sp) @@ -4056,11 +4056,11 @@ lw $t1, 24($t0) sw $t1, 24($sp) lw $t0, 252($sp) lw $t1, 20($t0) -sw $t1, 44($sp) +sw $t1, 148($sp) lw $t0, 256($sp) lw $t1, 16($t0) sw $t1, 36($sp) -lw $t0, 44($sp) +lw $t0, 148($sp) lw $t1, 16($t0) sw $t1, 40($sp) lw $a0, 36($sp) @@ -4186,11 +4186,11 @@ jal Int_init sw $a1, 136($sp) lw $t0, 252($sp) lw $t1, 20($t0) -sw $t1, 140($sp) +sw $t1, 148($sp) lw $t0, 108($sp) lw $t1, 16($t0) sw $t1, 100($sp) -lw $t0, 140($sp) +lw $t0, 148($sp) lw $t1, 16($t0) sw $t1, 104($sp) lw $a0, 100($sp) @@ -4500,11 +4500,11 @@ lw $t1, 24($t0) sw $t1, 24($sp) lw $t0, 188($sp) lw $t1, 20($t0) -sw $t1, 44($sp) +sw $t1, 116($sp) lw $t0, 192($sp) lw $t1, 16($t0) sw $t1, 36($sp) -lw $t0, 44($sp) +lw $t0, 116($sp) lw $t1, 16($t0) sw $t1, 40($sp) lw $a0, 36($sp) @@ -4572,11 +4572,11 @@ lw $a0, 16($t0) bnez $a0, label_40 lw $t0, 188($sp) lw $t1, 20($t0) -sw $t1, 108($sp) +sw $t1, 116($sp) lw $t0, 192($sp) lw $t1, 16($t0) sw $t1, 100($sp) -lw $t0, 108($sp) +lw $t0, 116($sp) lw $t1, 16($t0) sw $t1, 104($sp) lw $a0, 100($sp) @@ -10455,12 +10455,12 @@ lw $t1, 100($sp) sw $t1, 32($t0) lw $t0, 176($sp) lw $t1, 32($t0) -sw $t1, 120($sp) +sw $t1, 164($sp) move $t0, $sp -lw $t1, 120($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -10520,12 +10520,12 @@ b label_122 label_121: lw $t0, 176($sp) lw $t1, 32($t0) -sw $t1, 156($sp) +sw $t1, 164($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 14f25859..b5eea8ab 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -1288,12 +1288,12 @@ sw $t1, 16($t0) label_3: lw $t0, 144($sp) lw $t1, 16($t0) -sw $t1, 116($sp) +sw $t1, 136($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 136($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1336,9 +1336,9 @@ b label_5 label_4: lw $t0, 144($sp) lw $t1, 16($t0) -sw $t1, 128($sp) +sw $t1, 136($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 144($t0) diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index fda93f9f..01a6daa0 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -1164,7 +1164,7 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 100($sp) lw $t1, 20($t0) -sw $t1, 24($sp) +sw $t1, 76($sp) li $a0, 20 li $v0, 9 syscall @@ -1190,7 +1190,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 36($sp) -lw $t0, 24($sp) +lw $t0, 76($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 28($sp) @@ -1228,9 +1228,9 @@ lw $a0, 16($t0) bnez $a0, label_5 lw $t0, 100($sp) lw $t1, 16($t0) -sw $t1, 60($sp) +sw $t1, 96($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 100($t0) @@ -1372,7 +1372,7 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 92($sp) lw $t1, 16($t0) -sw $t1, 20($sp) +sw $t1, 36($sp) lw $t0, 92($sp) lw $t1, 16($t0) sw $t1, 36($sp) @@ -1405,10 +1405,10 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 40($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) lw $a0, 12($sp) @@ -1440,7 +1440,7 @@ jal Bool_init sw $a1, 44($sp) lw $t0, 92($sp) lw $t1, 20($t0) -sw $t1, 64($sp) +sw $t1, 80($sp) lw $t0, 92($sp) lw $t1, 20($t0) sw $t1, 80($sp) @@ -1473,10 +1473,10 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 84($sp) -lw $t0, 64($sp) +lw $t0, 80($sp) lw $t1, 16($t0) sw $t1, 56($sp) -lw $t0, 64($sp) +lw $t0, 80($sp) lw $t1, 16($t0) sw $t1, 56($sp) lw $a0, 56($sp) @@ -1516,7 +1516,7 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 48($sp) lw $t1, 20($t0) -sw $t1, 20($sp) +sw $t1, 36($sp) lw $t0, 48($sp) lw $t1, 20($t0) sw $t1, 36($sp) @@ -1549,10 +1549,10 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 40($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) lw $a0, 12($sp) @@ -1592,7 +1592,7 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 48($sp) lw $t1, 16($t0) -sw $t1, 20($sp) +sw $t1, 36($sp) lw $t0, 48($sp) lw $t1, 16($t0) sw $t1, 36($sp) @@ -1625,10 +1625,10 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 40($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) -lw $t0, 20($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 12($sp) lw $a0, 12($sp) diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 211f913b..582480b4 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -682,9 +682,9 @@ lw $t1, 24($sp) sw $t1, 16($t0) lw $t0, 544($sp) lw $t1, 16($t0) -sw $t1, 36($sp) +sw $t1, 464($sp) lw $t0, 544($sp) -lw $t1, 36($sp) +lw $t1, 464($sp) sw $t1, 20($t0) li $a0, 20 li $v0, 9 @@ -775,7 +775,7 @@ b label_3 label_2: lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 96($sp) +sw $t1, 508($sp) li $a0, 20 li $v0, 9 syscall @@ -801,7 +801,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 108($sp) -lw $t0, 96($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 88($sp) lw $t0, 100($sp) @@ -868,17 +868,17 @@ sw $t1, 24($t0) label_4: lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 160($sp) +sw $t1, 508($sp) lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 180($sp) +sw $t1, 428($sp) lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 184($sp) -lw $t0, 180($sp) +sw $t1, 428($sp) +lw $t0, 428($sp) lw $t1, 16($t0) sw $t1, 172($sp) -lw $t0, 184($sp) +lw $t0, 428($sp) lw $t1, 16($t0) sw $t1, 176($sp) lw $a0, 172($sp) @@ -908,7 +908,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 188($sp) -lw $t0, 160($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 152($sp) lw $t0, 164($sp) @@ -946,20 +946,20 @@ lw $a0, 16($t0) bnez $a0, label_7 lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 232($sp) +sw $t1, 508($sp) lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 252($sp) +sw $t1, 428($sp) lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 272($sp) +sw $t1, 508($sp) lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 276($sp) -lw $t0, 272($sp) +sw $t1, 428($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 264($sp) -lw $t0, 276($sp) +lw $t0, 428($sp) lw $t1, 16($t0) sw $t1, 268($sp) lw $a0, 264($sp) @@ -990,7 +990,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 280($sp) -lw $t0, 252($sp) +lw $t0, 428($sp) lw $t1, 16($t0) sw $t1, 244($sp) lw $t0, 256($sp) @@ -1023,7 +1023,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 284($sp) -lw $t0, 232($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 224($sp) lw $t0, 236($sp) @@ -1213,7 +1213,7 @@ b label_6 label_5: lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 360($sp) +sw $t1, 428($sp) li $a0, 20 li $v0, 9 syscall @@ -1239,7 +1239,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 372($sp) -lw $t0, 360($sp) +lw $t0, 428($sp) lw $t1, 16($t0) sw $t1, 352($sp) lw $t0, 364($sp) @@ -1279,14 +1279,14 @@ b label_4 label_6: lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 404($sp) +sw $t1, 508($sp) lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 424($sp) +sw $t1, 428($sp) lw $t0, 544($sp) lw $t1, 24($t0) sw $t1, 428($sp) -lw $t0, 424($sp) +lw $t0, 428($sp) lw $t1, 16($t0) sw $t1, 416($sp) lw $t0, 428($sp) @@ -1319,7 +1319,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 432($sp) -lw $t0, 404($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 396($sp) lw $t0, 408($sp) @@ -1386,9 +1386,9 @@ b label_12 label_11: lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 452($sp) +sw $t1, 508($sp) lw $t0, 544($sp) -lw $t1, 452($sp) +lw $t1, 508($sp) sw $t1, 16($t0) lw $t0, 544($sp) lw $t1, 16($t0) diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index c7d94a49..41623913 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -1134,11 +1134,11 @@ addi $sp, $sp, -4 sw $ra, 0($sp) lw $t0, 68($sp) lw $t1, 16($t0) -sw $t1, 24($sp) +sw $t1, 52($sp) lw $t0, 72($sp) lw $t1, 16($t0) sw $t1, 16($sp) -lw $t0, 24($sp) +lw $t0, 52($sp) lw $t1, 16($t0) sw $t1, 20($sp) lw $a0, 16($sp) @@ -1714,9 +1714,9 @@ jal Cons_init sw $a1, 64($sp) lw $t0, 120($sp) lw $t1, 16($t0) -sw $t1, 68($sp) +sw $t1, 116($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 28($t0) From ef77e79c0b3704822d0cd2f7de4b86f582c1a5f9 Mon Sep 17 00:00:00 2001 From: hros18 Date: Mon, 14 Dec 2020 18:30:00 -0500 Subject: [PATCH 136/140] fixxing bug in CaseNode --- src/main.py | 11 +- src/semantic/context.py | 22 +- src/visitors/to_mips.py | 6 +- src/visitors/transpilator.py | 2 +- tests/codegen/arith.mips | 397 +++++++++++++++++++++++++--------- tests/codegen/arith_test.mips | 212 ++++++++++++++++++ tests/codegen/book_list.mips | 14 +- tests/codegen/hairyscary.mips | 118 +++++----- 8 files changed, 600 insertions(+), 182 deletions(-) diff --git a/src/main.py b/src/main.py index bdc6b000..a012d900 100644 --- a/src/main.py +++ b/src/main.py @@ -76,13 +76,12 @@ def main(): print('attr_offset: ', mips.attr_offset) print('var_offset: ') c = 1 - for k in mips.var_offset.keys(): + for k in cv.context.types.keys(): t = 1 - print(f'{c}. {k}') - for x in mips.var_offset[k].keys(): - print(f'{x} : {mips.var_offset[k][x]}') - t += 1 - print('\n') + name = cv.context.types[k].name + tag = cv.context.types[k].tag + max_tag = cv.context.types[k].max_tag + print(f'{name}. {tag} {max_tag}') c += 1 path = program[:-2] # path = path[:-1] diff --git a/src/semantic/context.py b/src/semantic/context.py index 5233de06..f2bad696 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -70,16 +70,32 @@ def set_type_tags(self, node='Object', tag=0): self.set_type_tags(t, tag + i + 1) # print('Done type tags') # self.types['Object'].tag = 0 + # self.types['Object'].tag = 0 # self.types['IO'].tag = 1 - # self.types['Main'].tag = 3 + # self.types['Main'].tag = 2 # self.types['String'].tag = 2 # self.types['Bool'].tag = 3 # self.types['Int'].tag = 4 # self.types['A'].tag = 5 # self.types['B'].tag = 6 - # self.types['A'].tag = 5 - # self.types['B'].tag = 6 + # self.types['C'].tag = 7 + # self.types['D'].tag = 8 + # self.types['E'].tag = 9 + # self.types['A2I'].tag = 6 + def set_type_max_tags(self, node='Object'): + # self.types['Object'].max_tag = 9 + # self.types['IO'].max_tag = 2 + # self.types['Main'].max_tag = 2 + # self.types['String'].max_tag = 2 + # self.types['Bool'].max_tag = 3 + # self.types['Int'].max_tag = 4 + # self.types['A'].max_tag = 9 + # self.types['B'].max_tag = 9 + # self.types['C'].max_tag = 7 + # self.types['D'].max_tag = 9 + # self.types['E'].max_tag = 9 + # self.types['A2I'].max_tag = 6 if not self.graph[node]: self.types[node].max_tag = self.types[node].tag else: diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index b78d0e47..22170d7a 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -332,7 +332,7 @@ def visit(self, node): self.text += f'lw $t0, {offset}($sp)\n' self.text += f'lw $t1, 0($t0)\n' self.text += 'la $a0, void\n' - self.text += f'bne $t1 $a0 {node.first_label}\n' + self.text += f'bne $t1 $a0 {node.first_label}\n' self.text += 'b case_void_error\n' @visitor.when(OptionNodeIL) @@ -340,8 +340,8 @@ def visit(self, node): print(self.count) self.count += 1 print('OptionNodeIL') - self.text += f'blt $t1 {node.tag} {node.next_label}\n' - self.text += f'bgt $t1 {node.max_tag} {node.next_label}\n' + self.text += f'blt $t1 {node.tag} {node.next_label}\n' + self.text += f'bgt $t1 {node.max_tag} {node.next_label}\n' @visitor.when(BinaryNodeIL) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 6a608398..7c72fa9b 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -723,7 +723,7 @@ def visit(self, node, scope, sscope): tag_lst = [] option_dict = {} for option, c_scp in zip(node.case_list, nscope.children): - tag = self.context.get_type(option.typex).name + tag = self.context.get_type(option.typex).tag tag_lst.append( (tag, c_scp) ) option_dict[tag] = option tag_lst.sort() diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 70a4d7e0..69ba7deb 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -1,4 +1,195 @@ - +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A_name: .asciiz "A" +A_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word A.method5 +B_name: .asciiz "B" +B_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +C_name: .asciiz "C" +C_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word C.method5 +.word C.method6 +D_name: .asciiz "D" +D_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +E_name: .asciiz "E" +E_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +.word E.method6 +A2I_name: .asciiz "A2I" +A2I_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.menu +.word Main.prompt +.word Main.get_int +.word Main.is_even +.word Main.class_type +.word Main.print +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "0" +s_4: .asciiz "1" +s_5: .asciiz "2" +s_6: .asciiz "3" +s_7: .asciiz "4" +s_8: .asciiz "5" +s_9: .asciiz "6" +s_10: .asciiz "7" +s_11: .asciiz "8" +s_12: .asciiz "9" +s_13: .asciiz "-" +s_14: .asciiz "+" +s_15: .asciiz "\n\tTo add a number to " +s_16: .asciiz "...enter a:\n" +s_17: .asciiz "\tTo negate " +s_18: .asciiz "...enter b:\n" +s_19: .asciiz "\tTo find the difference between " +s_20: .asciiz "and another number...enter c:\n" +s_21: .asciiz "\tTo find the factorial of " +s_22: .asciiz "...enter d:\n" +s_23: .asciiz "\tTo square " +s_24: .asciiz "...enter e:\n" +s_25: .asciiz "\tTo cube " +s_26: .asciiz "...enter f:\n" +s_27: .asciiz "\tTo find out if " +s_28: .asciiz "is a multiple of 3...enter g:\n" +s_29: .asciiz "\tTo divide " +s_30: .asciiz "by 8...enter h:\n" +s_31: .asciiz "\tTo get a new number...enter j:\n" +s_32: .asciiz "\tTo quit...enter q:\n\n" +s_33: .asciiz "\n" +s_34: .asciiz "Please enter a number... " +s_35: .asciiz "Class type is now E\n" +s_36: .asciiz "Class type is now D\n" +s_37: .asciiz "Class type is now C\n" +s_38: .asciiz "Class type is now B\n" +s_39: .asciiz "Class type is now A\n" +s_40: .asciiz "Oooops\n" +s_41: .asciiz " " +s_42: .asciiz "number " +s_43: .asciiz "is odd!\n" +s_44: .asciiz "is even!\n" +s_45: .asciiz "a" +s_46: .asciiz "b" +s_47: .asciiz "c" +s_48: .asciiz "d" +s_49: .asciiz "e" +s_50: .asciiz "f" +s_51: .asciiz "g" +s_52: .asciiz "h" +s_53: .asciiz "j" +s_54: .asciiz "q" +s_55: .asciiz "is equal to " +s_56: .asciiz "times 8 with a remainder of " +s_57: .asciiz "is not divisible by 3.\n" +s_58: .asciiz "is divisible by 3.\n" .text dispatch_void_error: la $a0 dispatch_void @@ -7371,11 +7562,11 @@ sw $ra, 0($sp) lw $t0, 132($sp) lw $t1, 0($t0) la $a0, void -bne $t1 $a0 label_76 +bne $t1 $a0 label_76 b case_void_error label_76: -blt $t1 0 label_77 -bgt $t1 11 label_77 +blt $t1 9 label_77 +bgt $t1 9 label_77 lw $t1, 132($sp) sw $t1, 8($sp) la $t0, s_35 @@ -7421,8 +7612,8 @@ lw $t1, 12($sp) sw $t1, 4($sp) b label_75 label_77: -blt $t1 9 label_78 -bgt $t1 9 label_78 +blt $t1 8 label_78 +bgt $t1 8 label_78 lw $t1, 132($sp) sw $t1, 28($sp) la $t0, s_36 @@ -7468,8 +7659,8 @@ lw $t1, 32($sp) sw $t1, 4($sp) b label_75 label_78: -blt $t1 8 label_79 -bgt $t1 8 label_79 +blt $t1 7 label_79 +bgt $t1 7 label_79 lw $t1, 132($sp) sw $t1, 48($sp) la $t0, s_37 @@ -7515,8 +7706,8 @@ lw $t1, 52($sp) sw $t1, 4($sp) b label_75 label_79: -blt $t1 7 label_80 -bgt $t1 7 label_80 +blt $t1 6 label_80 +bgt $t1 6 label_80 lw $t1, 132($sp) sw $t1, 68($sp) la $t0, s_38 @@ -7562,8 +7753,8 @@ lw $t1, 72($sp) sw $t1, 4($sp) b label_75 label_80: -blt $t1 6 label_81 -bgt $t1 6 label_81 +blt $t1 5 label_81 +bgt $t1 5 label_81 lw $t1, 132($sp) sw $t1, 88($sp) la $t0, s_39 @@ -7609,8 +7800,8 @@ lw $t1, 92($sp) sw $t1, 4($sp) b label_75 label_81: -blt $t1 5 label_82 -bgt $t1 5 label_82 +blt $t1 0 label_82 +bgt $t1 11 label_82 lw $t1, 132($sp) sw $t1, 108($sp) la $t0, s_40 @@ -9784,15 +9975,87 @@ sw $t1, 1132($sp) lw $t0, 1132($sp) lw $t1, 0($t0) la $a0, void -bne $t1 $a0 label_110 +bne $t1 $a0 label_110 b case_void_error label_110: -blt $t1 0 label_111 -bgt $t1 11 label_111 +blt $t1 7 label_111 +bgt $t1 7 label_111 lw $t1, 1132($sp) sw $t1, 1020($sp) -la $t0, s_35 -sw $t0, 1028($sp) +move $t0, $sp +lw $t1, 1020($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1020($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1028($sp) +move $t0, $sp +lw $t1, 1028($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1020($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1020($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 1024($sp) +lw $t0, 1140($sp) +lw $t1, 1024($sp) +sw $t1, 20($t0) +lw $t1, 1024($sp) +sw $t1, 1012($sp) +b label_109 +label_111: +blt $t1 5 label_112 +bgt $t1 5 label_112 +lw $t1, 1132($sp) +sw $t1, 1036($sp) +move $t0, $sp +lw $t1, 1036($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1036($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1044($sp) +move $t0, $sp +lw $t1, 1044($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1036($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1036($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 28($t2) +jal $t3 +sw $a1, 1040($sp) +lw $t0, 1140($sp) +lw $t1, 1040($sp) +sw $t1, 20($t0) +lw $t1, 1040($sp) +sw $t1, 1012($sp) +b label_109 +label_112: +blt $t1 0 label_113 +bgt $t1 11 label_113 +lw $t1, 1132($sp) +sw $t1, 1052($sp) +la $t0, s_40 +sw $t0, 1060($sp) li $a0, 20 li $v0, 9 syscall @@ -9806,18 +10069,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1032($sp) +sw $t0, 1064($sp) move $t0, $sp -lw $t1, 1028($t0) +lw $t1, 1060($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1032($t0) +lw $t1, 1064($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1036($sp) +sw $a1, 1068($sp) move $t0, $sp -lw $t1, 1032($t0) +lw $t1, 1064($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 1140($t0) @@ -9829,7 +10092,7 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1024($sp) +sw $a1, 1056($sp) move $t0, $sp lw $t1, 1140($t0) addi $sp, $sp, -4 @@ -9840,7 +10103,7 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 -sw $a1, 1040($sp) +sw $a1, 1072($sp) li $a0, 20 li $v0, 9 syscall @@ -9854,90 +10117,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1044($sp) +sw $t0, 1076($sp) li $t0, 0 -sw $t0, 1048($sp) -move $t0, $sp -lw $t1, 1048($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1044($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 1052($sp) -lw $t1, 1044($sp) -sw $t1, 1012($sp) -b label_109 -label_111: -blt $t1 7 label_112 -bgt $t1 7 label_112 -lw $t1, 1132($sp) -sw $t1, 1056($sp) -move $t0, $sp -lw $t1, 1056($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1056($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1064($sp) -move $t0, $sp -lw $t1, 1064($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1056($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1056($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 1060($sp) -lw $t0, 1140($sp) -lw $t1, 1060($sp) -sw $t1, 20($t0) -lw $t1, 1060($sp) -sw $t1, 1012($sp) -b label_109 -label_112: -blt $t1 5 label_113 -bgt $t1 5 label_113 -lw $t1, 1132($sp) -sw $t1, 1072($sp) -move $t0, $sp -lw $t1, 1072($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1072($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1080($sp) +sw $t0, 1080($sp) move $t0, $sp lw $t1, 1080($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1072($t0) +lw $t1, 1076($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1072($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 1076($sp) -lw $t0, 1140($sp) -lw $t1, 1076($sp) -sw $t1, 20($t0) +jal Int_init +sw $a1, 1084($sp) lw $t1, 1076($sp) sw $t1, 1012($sp) b label_109 diff --git a/tests/codegen/arith_test.mips b/tests/codegen/arith_test.mips index 76d96a43..ad96fb8f 100644 --- a/tests/codegen/arith_test.mips +++ b/tests/codegen/arith_test.mips @@ -1,4 +1,216 @@ +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A_name: .asciiz "A" +A_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word A.method5 +B_name: .asciiz "B" +B_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +C_name: .asciiz "C" +C_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word C.method5 +.word C.method6 +D_name: .asciiz "D" +D_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +E_name: .asciiz "E" +E_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +.word E.method6 +A2I_name: .asciiz "A2I" +A2I_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.menu +.word Main.prompt +.word Main.get_int +.word Main.is_even +.word Main.class_type +.word Main.print +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "0" +s_4: .asciiz "1" +s_5: .asciiz "2" +s_6: .asciiz "3" +s_7: .asciiz "4" +s_8: .asciiz "5" +s_9: .asciiz "6" +s_10: .asciiz "7" +s_11: .asciiz "8" +s_12: .asciiz "9" +s_13: .asciiz "-" +s_14: .asciiz "+" +s_15: .asciiz " + To add a number to " +s_16: .asciiz "...enter a: +" +s_17: .asciiz " To negate " +s_18: .asciiz "...enter b: +" +s_19: .asciiz " To find the difference between " +s_20: .asciiz "and another number...enter c: +" +s_21: .asciiz " To find the factorial of " +s_22: .asciiz "...enter d: +" +s_23: .asciiz " To square " +s_24: .asciiz "...enter e: +" +s_25: .asciiz " To cube " +s_26: .asciiz "...enter f: +" +s_27: .asciiz " To find out if " +s_28: .asciiz "is a multiple of 3...enter g: +" +s_29: .asciiz " To divide " +s_30: .asciiz "by 8...enter h: +" +s_31: .asciiz " To get a new number...enter j: +" +s_32: .asciiz " To quit...enter q: +" +s_33: .asciiz "Please enter a number... " +s_34: .asciiz "Class type is now E +" +s_35: .asciiz "Class type is now D +" +s_36: .asciiz "Class type is now C +" +s_37: .asciiz "Class type is now B +" +s_38: .asciiz "Class type is now A +" +s_39: .asciiz "Oooops +" +s_40: .asciiz " " +s_41: .asciiz "number " +s_42: .asciiz "is odd! +" +s_43: .asciiz "is even! +" +s_44: .asciiz "a" +s_45: .asciiz "b" +s_46: .asciiz "c" +s_47: .asciiz "d" +s_48: .asciiz "e" +s_49: .asciiz "f" +s_50: .asciiz "g" +s_51: .asciiz "h" +s_52: .asciiz "j" +s_53: .asciiz "q" +s_54: .asciiz "is equal to " +s_55: .asciiz "times 8 with a remainder of " +s_56: .asciiz "is not divisible by 3. +" +s_57: .asciiz "is divisible by 3. +" .text dispatch_void_error: la $a0 dispatch_void diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index 95697240..69ec493e 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -119,8 +119,8 @@ s_3: .asciiz "title: " s_4: .asciiz "\n" s_5: .asciiz "author: " s_6: .asciiz "periodical: " -s_7: .asciiz "- dynamic type was Book -\n" -s_8: .asciiz "- dynamic type was Article -\n" +s_7: .asciiz "- dynamic type was Article -\n" +s_8: .asciiz "- dynamic type was Book -\n" s_9: .asciiz "Aho, Sethi, and Ullman" s_10: .asciiz "Compilers, Principles, Techniques, and Tools" s_11: .asciiz "PC Magazine" @@ -1465,11 +1465,11 @@ sw $a1, 8($sp) lw $t0, 8($sp) lw $t1, 0($t0) la $a0, void -bne $t1 $a0 label_2 +bne $t1 $a0 label_2 b case_void_error label_2: -blt $t1 5 label_3 -bgt $t1 5 label_3 +blt $t1 6 label_3 +bgt $t1 6 label_3 lw $t1, 8($sp) sw $t1, 16($sp) la $t0, s_7 @@ -1515,8 +1515,8 @@ lw $t1, 20($sp) sw $t1, 4($sp) b label_1 label_3: -blt $t1 6 label_4 -bgt $t1 6 label_4 +blt $t1 5 label_4 +bgt $t1 5 label_4 lw $t1, 8($sp) sw $t1, 36($sp) la $t0, s_8 diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index fbe445ce..e6e50b4e 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -653,11 +653,11 @@ move $a1, $zero lw $t0, 124($sp) lw $t1, 0($t0) la $a0, void -bne $t1 $a0 label_2 +bne $t1 $a0 label_2 b case_void_error label_2: -blt $t1 7 label_3 -bgt $t1 7 label_3 +blt $t1 7 label_3 +bgt $t1 7 label_3 lw $t1, 124($sp) sw $t1, 12($sp) li $a0, 52 @@ -684,10 +684,18 @@ lw $t1, 16($sp) sw $t1, 8($sp) b label_1 label_3: -blt $t1 5 label_4 -bgt $t1 5 label_4 +blt $t1 6 label_4 +bgt $t1 6 label_4 lw $t1, 124($sp) sw $t1, 24($sp) +lw $t1, 24($sp) +sw $t1, 8($sp) +b label_1 +label_4: +blt $t1 5 label_5 +bgt $t1 5 label_5 +lw $t1, 124($sp) +sw $t1, 28($sp) li $a0, 44 li $v0, 9 syscall @@ -701,22 +709,14 @@ li $t1, 11 sw $t1, 8($t0) la $t1, Razz_methods sw $t1, 12($t0) -sw $t0, 28($sp) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Razz_init -sw $a1, 32($sp) -lw $t1, 28($sp) -sw $t1, 8($sp) -b label_1 -label_4: -blt $t1 6 label_5 -bgt $t1 6 label_5 -lw $t1, 124($sp) -sw $t1, 36($sp) -lw $t1, 36($sp) +sw $a1, 36($sp) +lw $t1, 32($sp) sw $t1, 8($sp) b label_1 label_5: @@ -1018,11 +1018,11 @@ move $a1, $zero lw $t0, 144($sp) lw $t1, 0($t0) la $a0, void -bne $t1 $a0 label_7 +bne $t1 $a0 label_7 b case_void_error label_7: -blt $t1 7 label_8 -bgt $t1 7 label_8 +blt $t1 7 label_8 +bgt $t1 7 label_8 lw $t1, 144($sp) sw $t1, 12($sp) li $a0, 52 @@ -1049,8 +1049,8 @@ lw $t1, 16($sp) sw $t1, 8($sp) b label_6 label_8: -blt $t1 6 label_9 -bgt $t1 6 label_9 +blt $t1 6 label_9 +bgt $t1 6 label_9 lw $t1, 144($sp) sw $t1, 24($sp) lw $t1, 24($sp) @@ -1320,98 +1320,98 @@ sw $t1, 16($t0) lw $t0, 68($sp) lw $t1, 0($t0) la $a0, void -bne $t1 $a0 label_11 +bne $t1 $a0 label_11 b case_void_error label_11: -blt $t1 7 label_12 -bgt $t1 7 label_12 +blt $t1 8 label_12 +bgt $t1 8 label_12 lw $t1, 68($sp) sw $t1, 24($sp) -li $a0, 52 +li $a0, 36 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 5 sw $t1, 0($t0) -la $t1, Bar_name +la $t1, Foo_name sw $t1, 4($t0) -li $t1, 13 +li $t1, 9 sw $t1, 8($t0) -la $t1, Bar_methods +la $t1, Foo_methods sw $t1, 12($t0) sw $t0, 28($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal Bar_init +jal Foo_init sw $a1, 32($sp) lw $t1, 28($sp) sw $t1, 20($sp) b label_10 label_12: -blt $t1 5 label_13 -bgt $t1 5 label_13 +blt $t1 7 label_13 +bgt $t1 7 label_13 lw $t1, 68($sp) sw $t1, 36($sp) -li $a0, 44 +li $a0, 52 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 6 sw $t1, 0($t0) -la $t1, Razz_name +la $t1, Bar_name sw $t1, 4($t0) -li $t1, 11 +li $t1, 13 sw $t1, 8($t0) -la $t1, Razz_methods +la $t1, Bar_methods sw $t1, 12($t0) sw $t0, 40($sp) move $t0, $sp lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal Razz_init +jal Bar_init sw $a1, 44($sp) lw $t1, 40($sp) sw $t1, 20($sp) b label_10 label_13: -blt $t1 8 label_14 -bgt $t1 8 label_14 +blt $t1 6 label_14 +bgt $t1 6 label_14 lw $t1, 68($sp) sw $t1, 48($sp) -li $a0, 36 +lw $t1, 48($sp) +sw $t1, 20($sp) +b label_10 +label_14: +blt $t1 5 label_15 +bgt $t1 5 label_15 +lw $t1, 68($sp) +sw $t1, 52($sp) +li $a0, 44 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 7 sw $t1, 0($t0) -la $t1, Foo_name +la $t1, Razz_name sw $t1, 4($t0) -li $t1, 9 +li $t1, 11 sw $t1, 8($t0) -la $t1, Foo_methods +la $t1, Razz_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 56($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal Foo_init -sw $a1, 56($sp) -lw $t1, 52($sp) -sw $t1, 20($sp) -b label_10 -label_14: -blt $t1 6 label_15 -bgt $t1 6 label_15 -lw $t1, 68($sp) -sw $t1, 60($sp) -lw $t1, 60($sp) +jal Razz_init +sw $a1, 60($sp) +lw $t1, 56($sp) sw $t1, 20($sp) b label_10 label_15: From 57c876e52b750e2ec856e96e81a986b1e86ed6bc Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Mon, 14 Dec 2020 19:33:09 -0500 Subject: [PATCH 137/140] solving graph in context --- src/semantic/context.py | 45 +- src/visitors/transpilator.py | 21 +- tests/codegen/arith.mips | 4507 ++++++++++++++++++----------- tests/codegen/atoi.mips | 1128 +++++--- tests/codegen/book_list.mips | 428 ++- tests/codegen/cells.mips | 738 +++-- tests/codegen/complex.mips | 188 +- tests/codegen/fib.mips | 150 +- tests/codegen/graph.mips | 1702 ++++++----- tests/codegen/hairyscary.mips | 436 +-- tests/codegen/hello_world.mips | 34 +- tests/codegen/io.mips | 94 +- tests/codegen/life.mips | 4972 +++++++++++++++++++------------- tests/codegen/list.mips | 270 +- tests/codegen/new_complex.mips | 288 +- tests/codegen/palindrome.mips | 260 +- tests/codegen/primes.mips | 666 +++-- tests/codegen/print-cool.mips | 128 +- tests/codegen/sort-list.mips | 396 ++- 19 files changed, 10181 insertions(+), 6270 deletions(-) diff --git a/src/semantic/context.py b/src/semantic/context.py index 5233de06..9bd23613 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -33,11 +33,11 @@ def __init__(self): self.types['String'].methods['concat'] = Method('concat', ['s'], [self.types['String']], self.types['String']) self.types['String'].methods['substr'] = Method('substr', ['i', 'l'], [self.types['Int'], self.types['Int']], self.types['String']) - self.graph['Object'] = ['IO', 'String', 'Bool', 'Int'] - self.graph['IO'] = ['Main'] - self.graph['String'] = [] - self.graph['Int'] = [] - self.graph['Bool'] = [] + #self.graph['Object'] = ['IO', 'String', 'Bool', 'Int'] + #self.graph['IO'] = ['Main'] + #self.graph['String'] = [] + #self.graph['Int'] = [] + #self.graph['Bool'] = [] def create_type(self, name:str): if name in self.types: @@ -47,14 +47,30 @@ def create_type(self, name:str): # print('type: ', typex.name) # print('parent: ', typex.parent.name) self.types[name] = typex - if not self.graph.__contains__(name): - self.graph[name] = [] - if self.graph.__contains__(typex.parent.name): - self.graph[typex.parent.name].append(name) - else: - self.graph[typex.parent.name] = [name] + # if not self.graph.__contains__(name): + # self.graph[name] = [] + # if self.graph.__contains__(typex.parent.name): + # self.graph[typex.parent.name].append(name) + # else: + # self.graph[typex.parent.name] = [name] return typex + def tag_types(self): + for name, inst in self.types.items(): + self.graph[name] = [] + + for name, inst in self.types.items(): + try: + if self.graph.__contains__(inst.parent.name): + self.graph[inst.parent.name].append(name) + else: + self.graph[inst.parent.name] = [name] + except: + pass + + # print(self.graph) + # assert False, "Stop" + def get_type(self, name:str): try: return self.types[name] @@ -87,12 +103,9 @@ def set_type_max_tags(self, node='Object'): self.set_type_max_tags(t) maximum = 0 for t in self.graph[node]: - try: - maximum = max(maximum, self.types[t].max_tag) - except: - maximum = 0 + maximum = max(maximum, self.types[t].max_tag) self.types[node].max_tag = maximum - # print('Done type max tags') + def __str__(self): return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index 6a608398..b1681a3b 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -79,6 +79,8 @@ def __init__(self, context): self.label_count = 0 self.count = '' # self.scope = scope + # tag context types + self.context.tag_types() self.context.set_type_tags() self.context.set_type_max_tags() @@ -352,7 +354,7 @@ def visit(self, node, scope): @visitor.when(ProgramNode) def visit(self, node, scope, sscope): - + if not scope: scope = ScopeCIL() @@ -399,7 +401,13 @@ def visit(self, node, scope, sscope): # dynamic_type = 'Void' self.count += expr_value + '\n' - self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, self.current_type.name, expr_value)) + + static_instance = self.define_internal_local(scope=scope, name='static_instance') + # print(self.current_type.name, self.context.get_type(self.current_type.name).tag) + # assert False, "Stop" + self.register_instruction(AllocateNodeIL(self.current_type.name, self.context.get_type(self.current_type.name).tag ,static_instance)) + + self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, self.current_type.name, static_instance)) return result_local @@ -723,17 +731,20 @@ def visit(self, node, scope, sscope): tag_lst = [] option_dict = {} for option, c_scp in zip(node.case_list, nscope.children): - tag = self.context.get_type(option.typex).name + tag = self.context.get_type(option.typex).tag tag_lst.append( (tag, c_scp) ) option_dict[tag] = option tag_lst.sort() + # print (tag_lst) + # assert False, "Stop" + for t, c_scp in reversed(tag_lst): option = option_dict[t] - option_type = self.context.get_type(option.typex) self.register_instruction(LabelNodeIL(label)) label = self.get_label() - + + option_type = self.context.get_type(option.typex) #changes # print(option_type.name) # if option_type.name != 'Object' diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 70a4d7e0..3c36881b 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -1,4 +1,195 @@ - +.data +dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" +case_void: .asciiz "Runtime Error: A case on void" +case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" +div_zero: .asciiz "Runtime Error: Division by zero" +substr: .asciiz "Runtime Error: Substring out of range" +heap: .asciiz "Runtime Error: Heap overflow" +temp_string: .space 2048 +void: .word 0 +Object_name: .asciiz "Object" +Object_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +Int_name: .asciiz "Int" +Int_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +String_name: .asciiz "String" +String_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word String.length +.word String.concat +.word String.substr +Bool_name: .asciiz "Bool" +Bool_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +IO_name: .asciiz "IO" +IO_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +A_name: .asciiz "A" +A_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word A.method5 +B_name: .asciiz "B" +B_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +C_name: .asciiz "C" +C_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word C.method5 +.word C.method6 +D_name: .asciiz "D" +D_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +E_name: .asciiz "E" +E_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A.value +.word A.set_var +.word A.method1 +.word A.method2 +.word A.method3 +.word A.method4 +.word B.method5 +.word D.method7 +.word E.method6 +A2I_name: .asciiz "A2I" +A2I_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word A2I.c2i +.word A2I.i2c +.word A2I.a2i +.word A2I.a2i_aux +.word A2I.i2a +.word A2I.i2a_aux +Main_name: .asciiz "Main" +Main_methods: +.word Object.abort +.word Object.type_name +.word Object.copy +.word IO.out_string +.word IO.out_int +.word IO.in_string +.word IO.in_int +.word Main.menu +.word Main.prompt +.word Main.get_int +.word Main.is_even +.word Main.class_type +.word Main.print +.word Main.main +s_0: .asciiz "Abort called from class " +s_1: .asciiz " +" +empty_str: .asciiz "" +s_3: .asciiz "0" +s_4: .asciiz "1" +s_5: .asciiz "2" +s_6: .asciiz "3" +s_7: .asciiz "4" +s_8: .asciiz "5" +s_9: .asciiz "6" +s_10: .asciiz "7" +s_11: .asciiz "8" +s_12: .asciiz "9" +s_13: .asciiz "-" +s_14: .asciiz "+" +s_15: .asciiz "\n\tTo add a number to " +s_16: .asciiz "...enter a:\n" +s_17: .asciiz "\tTo negate " +s_18: .asciiz "...enter b:\n" +s_19: .asciiz "\tTo find the difference between " +s_20: .asciiz "and another number...enter c:\n" +s_21: .asciiz "\tTo find the factorial of " +s_22: .asciiz "...enter d:\n" +s_23: .asciiz "\tTo square " +s_24: .asciiz "...enter e:\n" +s_25: .asciiz "\tTo cube " +s_26: .asciiz "...enter f:\n" +s_27: .asciiz "\tTo find out if " +s_28: .asciiz "is a multiple of 3...enter g:\n" +s_29: .asciiz "\tTo divide " +s_30: .asciiz "by 8...enter h:\n" +s_31: .asciiz "\tTo get a new number...enter j:\n" +s_32: .asciiz "\tTo quit...enter q:\n\n" +s_33: .asciiz "\n" +s_34: .asciiz "Please enter a number... " +s_35: .asciiz "Class type is now E\n" +s_36: .asciiz "Class type is now D\n" +s_37: .asciiz "Class type is now C\n" +s_38: .asciiz "Class type is now B\n" +s_39: .asciiz "Class type is now A\n" +s_40: .asciiz "Oooops\n" +s_41: .asciiz " " +s_42: .asciiz "number " +s_43: .asciiz "is odd!\n" +s_44: .asciiz "is even!\n" +s_45: .asciiz "a" +s_46: .asciiz "b" +s_47: .asciiz "c" +s_48: .asciiz "d" +s_49: .asciiz "e" +s_50: .asciiz "f" +s_51: .asciiz "g" +s_52: .asciiz "h" +s_53: .asciiz "j" +s_54: .asciiz "q" +s_55: .asciiz "is equal to " +s_56: .asciiz "times 8 with a remainder of " +s_57: .asciiz "is not divisible by 3.\n" +s_58: .asciiz "is divisible by 3.\n" .text dispatch_void_error: la $a0 dispatch_void @@ -45,7 +236,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 11 +li $t1, 5 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) @@ -115,7 +306,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -231,7 +422,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -265,7 +456,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -318,7 +509,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -400,7 +591,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -470,7 +661,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -560,7 +751,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -625,7 +816,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -662,7 +853,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -687,7 +878,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 7 sw $t1, 0($t0) la $t1, B_name sw $t1, 4($t0) @@ -731,7 +922,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -764,7 +955,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -789,7 +980,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 8 sw $t1, 0($t0) la $t1, C_name sw $t1, 4($t0) @@ -869,7 +1060,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -906,7 +1097,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -931,7 +1122,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 9 sw $t1, 0($t0) la $t1, D_name sw $t1, 4($t0) @@ -971,7 +1162,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1008,7 +1199,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1033,7 +1224,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 9 sw $t1, 0($t0) la $t1, D_name sw $t1, 4($t0) @@ -1080,7 +1271,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1107,7 +1298,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1183,7 +1374,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1208,7 +1399,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1243,7 +1434,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1272,7 +1463,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 9 +li $t1, 10 sw $t1, 0($t0) la $t1, E_name sw $t1, 4($t0) @@ -1330,7 +1521,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1367,7 +1558,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1392,7 +1583,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 9 +li $t1, 10 sw $t1, 0($t0) la $t1, E_name sw $t1, 4($t0) @@ -1450,7 +1641,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1483,7 +1674,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1508,7 +1699,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A_name sw $t1, 4($t0) @@ -1552,7 +1743,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1589,7 +1780,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1622,7 +1813,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1647,7 +1838,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 9 +li $t1, 10 sw $t1, 0($t0) la $t1, E_name sw $t1, 4($t0) @@ -1697,17 +1888,17 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra D.method7: -addi $sp, $sp, -244 +addi $sp, $sp, -252 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t1, 252($sp) +lw $t1, 260($sp) sw $t1, 4($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1768,7 +1959,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1829,7 +2020,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1890,7 +2081,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1951,7 +2142,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1986,7 +2177,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2004,14 +2195,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 184($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 188($sp) move $t0, $sp lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 248($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 248($t0) +lw $t1, 188($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2035,19 +2240,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 188($sp) -li $t0, 0 sw $t0, 192($sp) +li $t0, 0 +sw $t0, 196($sp) move $t0, $sp -lw $t1, 192($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 196($sp) -lw $t1, 188($sp) +sw $a1, 200($sp) +lw $t1, 192($sp) sw $t1, 116($sp) label_10: lw $t1, 116($sp) @@ -2067,19 +2272,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 200($sp) -li $t0, 0 sw $t0, 204($sp) +li $t0, 0 +sw $t0, 208($sp) move $t0, $sp -lw $t1, 204($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 208($sp) -lw $t1, 200($sp) +sw $a1, 212($sp) +lw $t1, 204($sp) sw $t1, 80($sp) label_11: lw $t1, 80($sp) @@ -2099,19 +2304,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 212($sp) -li $t0, 1 sw $t0, 216($sp) +li $t0, 1 +sw $t0, 220($sp) move $t0, $sp -lw $t1, 216($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 212($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 220($sp) -lw $t1, 212($sp) +sw $a1, 224($sp) +lw $t1, 216($sp) sw $t1, 44($sp) label_12: lw $t1, 44($sp) @@ -2120,16 +2325,16 @@ b label_13 label_6: lw $t0, 4($sp) lw $t1, 16($t0) -sw $t1, 236($sp) -lw $t1, 236($sp) +sw $t1, 240($sp) +lw $t1, 240($sp) neg $a0, $t1 -sw $a0, 232($sp) +sw $a0, 236($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2137,21 +2342,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 228($sp) +sw $t0, 232($sp) move $t0, $sp -lw $t1, 232($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 228($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 240($sp) +sw $a1, 244($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 248($sp) move $t0, $sp -lw $t1, 228($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 248($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 248($t0) @@ -2160,15 +2379,15 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 224($sp) -lw $t1, 224($sp) +sw $a1, 228($sp) +lw $t1, 228($sp) sw $t1, 8($sp) label_13: lw $t1, 8($sp) -sw $t1, 244($sp) -lw $a1, 244($sp) +sw $t1, 252($sp) +lw $a1, 252($sp) lw $ra, 0($sp) -addi $sp, $sp, 256 +addi $sp, $sp, 264 jr $ra E_init: addi $sp, $sp, -4 @@ -2193,7 +2412,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2220,7 +2439,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2256,7 +2475,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2281,7 +2500,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A_name sw $t1, 4($t0) @@ -2331,7 +2550,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra A2I.c2i: -addi $sp, $sp, -496 +addi $sp, $sp, -500 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -2341,7 +2560,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2363,7 +2582,7 @@ move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2401,7 +2620,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2423,7 +2642,7 @@ move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2461,7 +2680,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2483,7 +2702,7 @@ move $t0, $sp lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2521,7 +2740,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2543,7 +2762,7 @@ move $t0, $sp lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2581,7 +2800,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2603,7 +2822,7 @@ move $t0, $sp lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2641,7 +2860,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2663,7 +2882,7 @@ move $t0, $sp lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2701,7 +2920,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2723,7 +2942,7 @@ move $t0, $sp lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2761,7 +2980,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2783,7 +3002,7 @@ move $t0, $sp lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2821,7 +3040,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2843,7 +3062,7 @@ move $t0, $sp lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2881,7 +3100,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2903,7 +3122,7 @@ move $t0, $sp lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2934,11 +3153,25 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_23 +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 368($sp) move $t0, $sp -lw $t1, 500($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 500($t0) +lw $t1, 368($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2950,7 +3183,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2958,19 +3191,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 368($sp) -li $t0, 0 sw $t0, 372($sp) +li $t0, 0 +sw $t0, 376($sp) move $t0, $sp -lw $t1, 372($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 376($sp) -lw $t1, 368($sp) +sw $a1, 380($sp) +lw $t1, 372($sp) sw $t1, 328($sp) b label_24 label_23: @@ -2979,7 +3212,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2987,19 +3220,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 380($sp) -li $t0, 9 sw $t0, 384($sp) +li $t0, 9 +sw $t0, 388($sp) move $t0, $sp -lw $t1, 384($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 380($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 388($sp) -lw $t1, 380($sp) +sw $a1, 392($sp) +lw $t1, 384($sp) sw $t1, 328($sp) label_24: lw $t1, 328($sp) @@ -3011,7 +3244,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3019,19 +3252,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 392($sp) -li $t0, 8 sw $t0, 396($sp) +li $t0, 8 +sw $t0, 400($sp) move $t0, $sp -lw $t1, 396($t0) +lw $t1, 400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 392($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 400($sp) -lw $t1, 392($sp) +sw $a1, 404($sp) +lw $t1, 396($sp) sw $t1, 292($sp) label_25: lw $t1, 292($sp) @@ -3043,7 +3276,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3051,19 +3284,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 404($sp) -li $t0, 7 sw $t0, 408($sp) +li $t0, 7 +sw $t0, 412($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 404($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 412($sp) -lw $t1, 404($sp) +sw $a1, 416($sp) +lw $t1, 408($sp) sw $t1, 256($sp) label_26: lw $t1, 256($sp) @@ -3075,7 +3308,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3083,19 +3316,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 416($sp) -li $t0, 6 sw $t0, 420($sp) +li $t0, 6 +sw $t0, 424($sp) move $t0, $sp +lw $t1, 424($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 416($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) jal Int_init -sw $a1, 424($sp) -lw $t1, 416($sp) +sw $a1, 428($sp) +lw $t1, 420($sp) sw $t1, 220($sp) label_27: lw $t1, 220($sp) @@ -3107,7 +3340,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3115,19 +3348,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 428($sp) -li $t0, 5 sw $t0, 432($sp) +li $t0, 5 +sw $t0, 436($sp) move $t0, $sp -lw $t1, 432($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 428($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 436($sp) -lw $t1, 428($sp) +sw $a1, 440($sp) +lw $t1, 432($sp) sw $t1, 184($sp) label_28: lw $t1, 184($sp) @@ -3139,7 +3372,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3147,19 +3380,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 440($sp) -li $t0, 4 sw $t0, 444($sp) +li $t0, 4 +sw $t0, 448($sp) move $t0, $sp -lw $t1, 444($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 440($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 448($sp) -lw $t1, 440($sp) +sw $a1, 452($sp) +lw $t1, 444($sp) sw $t1, 148($sp) label_29: lw $t1, 148($sp) @@ -3171,7 +3404,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3179,19 +3412,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 452($sp) -li $t0, 3 sw $t0, 456($sp) +li $t0, 3 +sw $t0, 460($sp) move $t0, $sp -lw $t1, 456($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 452($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 460($sp) -lw $t1, 452($sp) +sw $a1, 464($sp) +lw $t1, 456($sp) sw $t1, 112($sp) label_30: lw $t1, 112($sp) @@ -3203,7 +3436,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3211,19 +3444,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 464($sp) -li $t0, 2 sw $t0, 468($sp) +li $t0, 2 +sw $t0, 472($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 464($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 472($sp) -lw $t1, 464($sp) +sw $a1, 476($sp) +lw $t1, 468($sp) sw $t1, 76($sp) label_31: lw $t1, 76($sp) @@ -3235,7 +3468,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3243,19 +3476,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 476($sp) -li $t0, 1 sw $t0, 480($sp) +li $t0, 1 +sw $t0, 484($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 476($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 484($sp) -lw $t1, 476($sp) +sw $a1, 488($sp) +lw $t1, 480($sp) sw $t1, 40($sp) label_32: lw $t1, 40($sp) @@ -3267,7 +3500,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3275,27 +3508,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 488($sp) -li $t0, 0 sw $t0, 492($sp) +li $t0, 0 +sw $t0, 496($sp) move $t0, $sp -lw $t1, 492($t0) +lw $t1, 496($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 488($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 496($sp) -lw $t1, 488($sp) +sw $a1, 500($sp) +lw $t1, 492($sp) sw $t1, 4($sp) label_33: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 508 +addi $sp, $sp, 512 jr $ra A2I.i2c: -addi $sp, $sp, -496 +addi $sp, $sp, -500 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -3303,7 +3536,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3323,7 +3556,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -3364,7 +3597,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3384,7 +3617,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 68($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $t0, 60($sp) @@ -3425,7 +3658,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3445,7 +3678,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 104($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 88($sp) lw $t0, 96($sp) @@ -3486,7 +3719,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3506,7 +3739,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 124($sp) lw $t0, 132($sp) @@ -3547,7 +3780,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3567,7 +3800,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 176($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 160($sp) lw $t0, 168($sp) @@ -3608,7 +3841,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3628,7 +3861,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 212($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 196($sp) lw $t0, 204($sp) @@ -3669,7 +3902,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3689,7 +3922,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 248($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 232($sp) lw $t0, 240($sp) @@ -3730,7 +3963,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3750,7 +3983,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 284($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 268($sp) lw $t0, 276($sp) @@ -3791,7 +4024,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3811,7 +4044,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 320($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 304($sp) lw $t0, 312($sp) @@ -3852,7 +4085,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3872,7 +4105,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 356($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 340($sp) lw $t0, 348($sp) @@ -3908,11 +4141,25 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_43 +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 368($sp) move $t0, $sp -lw $t1, 500($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 500($t0) +lw $t1, 368($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3920,13 +4167,13 @@ lw $t3, 0($t2) jal $t3 sw $a1, 364($sp) la $t0, empty_str -sw $t0, 368($sp) +sw $t0, 372($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3934,28 +4181,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 372($sp) +sw $t0, 376($sp) move $t0, $sp -lw $t1, 368($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 372($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 376($sp) -lw $t1, 372($sp) +sw $a1, 380($sp) +lw $t1, 376($sp) sw $t1, 328($sp) b label_44 label_43: la $t0, s_12 -sw $t0, 380($sp) +sw $t0, 384($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3963,17 +4210,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 384($sp) +sw $t0, 388($sp) move $t0, $sp -lw $t1, 380($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 388($sp) -lw $t1, 384($sp) +sw $a1, 392($sp) +lw $t1, 388($sp) sw $t1, 328($sp) label_44: lw $t1, 328($sp) @@ -3981,13 +4228,13 @@ sw $t1, 292($sp) b label_45 label_42: la $t0, s_11 -sw $t0, 392($sp) +sw $t0, 396($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3995,17 +4242,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 396($sp) +sw $t0, 400($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 396($t0) +lw $t1, 400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 400($sp) -lw $t1, 396($sp) +sw $a1, 404($sp) +lw $t1, 400($sp) sw $t1, 292($sp) label_45: lw $t1, 292($sp) @@ -4013,13 +4260,13 @@ sw $t1, 256($sp) b label_46 label_41: la $t0, s_10 -sw $t0, 404($sp) +sw $t0, 408($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4027,17 +4274,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 408($sp) +sw $t0, 412($sp) move $t0, $sp -lw $t1, 404($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 412($sp) -lw $t1, 408($sp) +sw $a1, 416($sp) +lw $t1, 412($sp) sw $t1, 256($sp) label_46: lw $t1, 256($sp) @@ -4045,13 +4292,13 @@ sw $t1, 220($sp) b label_47 label_40: la $t0, s_9 -sw $t0, 416($sp) +sw $t0, 420($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4059,17 +4306,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 420($sp) +sw $t0, 424($sp) move $t0, $sp -lw $t1, 416($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 420($t0) +lw $t1, 424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 424($sp) -lw $t1, 420($sp) +sw $a1, 428($sp) +lw $t1, 424($sp) sw $t1, 220($sp) label_47: lw $t1, 220($sp) @@ -4077,13 +4324,13 @@ sw $t1, 184($sp) b label_48 label_39: la $t0, s_8 -sw $t0, 428($sp) +sw $t0, 432($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4091,17 +4338,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 432($sp) +sw $t0, 436($sp) move $t0, $sp -lw $t1, 428($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 432($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 436($sp) -lw $t1, 432($sp) +sw $a1, 440($sp) +lw $t1, 436($sp) sw $t1, 184($sp) label_48: lw $t1, 184($sp) @@ -4109,13 +4356,13 @@ sw $t1, 148($sp) b label_49 label_38: la $t0, s_7 -sw $t0, 440($sp) +sw $t0, 444($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4123,17 +4370,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 444($sp) +sw $t0, 448($sp) move $t0, $sp -lw $t1, 440($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 444($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 448($sp) -lw $t1, 444($sp) +sw $a1, 452($sp) +lw $t1, 448($sp) sw $t1, 148($sp) label_49: lw $t1, 148($sp) @@ -4141,13 +4388,13 @@ sw $t1, 112($sp) b label_50 label_37: la $t0, s_6 -sw $t0, 452($sp) +sw $t0, 456($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4155,17 +4402,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 456($sp) +sw $t0, 460($sp) move $t0, $sp -lw $t1, 452($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 460($sp) -lw $t1, 456($sp) +sw $a1, 464($sp) +lw $t1, 460($sp) sw $t1, 112($sp) label_50: lw $t1, 112($sp) @@ -4173,13 +4420,13 @@ sw $t1, 76($sp) b label_51 label_36: la $t0, s_5 -sw $t0, 464($sp) +sw $t0, 468($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4187,17 +4434,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 468($sp) +sw $t0, 472($sp) move $t0, $sp -lw $t1, 464($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 472($sp) -lw $t1, 468($sp) +sw $a1, 476($sp) +lw $t1, 472($sp) sw $t1, 76($sp) label_51: lw $t1, 76($sp) @@ -4205,13 +4452,13 @@ sw $t1, 40($sp) b label_52 label_35: la $t0, s_4 -sw $t0, 476($sp) +sw $t0, 480($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4219,17 +4466,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 480($sp) +sw $t0, 484($sp) move $t0, $sp -lw $t1, 476($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 480($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 484($sp) -lw $t1, 480($sp) +sw $a1, 488($sp) +lw $t1, 484($sp) sw $t1, 40($sp) label_52: lw $t1, 40($sp) @@ -4237,13 +4484,13 @@ sw $t1, 4($sp) b label_53 label_34: la $t0, s_3 -sw $t0, 488($sp) +sw $t0, 492($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4251,32 +4498,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 492($sp) +sw $t0, 496($sp) move $t0, $sp -lw $t1, 488($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 496($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 496($sp) -lw $t1, 492($sp) +sw $a1, 500($sp) +lw $t1, 496($sp) sw $t1, 4($sp) label_53: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 508 +addi $sp, $sp, 512 jr $ra A2I.a2i: -addi $sp, $sp, -312 +addi $sp, $sp, -324 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4288,7 +4535,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4349,7 +4596,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4374,7 +4621,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4401,10 +4648,10 @@ sw $t1, 0($sp) lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4418,7 +4665,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4476,7 +4723,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4501,7 +4748,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4528,10 +4775,10 @@ sw $t1, 0($sp) lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4545,7 +4792,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4598,14 +4845,28 @@ sw $a1, 168($sp) lw $t0, 112($sp) lw $a0, 16($t0) bnez $a0, label_56 +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 176($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4617,22 +4878,22 @@ sw $t1, 108($sp) b label_57 label_56: move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 200($sp) +sw $a1, 204($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4640,34 +4901,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 204($sp) -li $t0, 1 sw $t0, 208($sp) +li $t0, 1 +sw $t0, 212($sp) move $t0, $sp -lw $t1, 208($t0) +lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 204($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 212($sp) -lw $t0, 200($sp) -lw $t1, 16($t0) -sw $t1, 192($sp) +sw $a1, 216($sp) lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 196($sp) -lw $a0, 192($sp) -lw $t1, 196($sp) +lw $t0, 208($sp) +lw $t1, 16($t0) +sw $t1, 200($sp) +lw $a0, 196($sp) +lw $t1, 200($sp) sub $a0, $a0, $t1 -sw $a0, 188($sp) +sw $a0, 192($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4675,22 +4936,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 184($sp) +sw $t0, 188($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 216($sp) +sw $a1, 220($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4698,50 +4959,64 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 220($sp) -li $t0, 1 sw $t0, 224($sp) +li $t0, 1 +sw $t0, 228($sp) move $t0, $sp -lw $t1, 224($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 228($sp) +sw $a1, 232($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 180($sp) +sw $a1, 184($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 180($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 236($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 176($sp) -lw $t1, 176($sp) +sw $a1, 180($sp) +lw $t1, 180($sp) sw $t1, 108($sp) label_57: lw $t1, 108($sp) @@ -4749,22 +5024,22 @@ sw $t1, 44($sp) b label_58 label_55: move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 268($sp) +sw $a1, 276($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4772,34 +5047,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 272($sp) +sw $t0, 280($sp) li $t0, 1 -sw $t0, 276($sp) +sw $t0, 284($sp) move $t0, $sp -lw $t1, 276($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 272($t0) +lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 280($sp) -lw $t0, 268($sp) +sw $a1, 288($sp) +lw $t0, 276($sp) lw $t1, 16($t0) -sw $t1, 260($sp) -lw $t0, 272($sp) +sw $t1, 268($sp) +lw $t0, 280($sp) lw $t1, 16($t0) -sw $t1, 264($sp) -lw $a0, 260($sp) -lw $t1, 264($sp) +sw $t1, 272($sp) +lw $a0, 268($sp) +lw $t1, 272($sp) sub $a0, $a0, $t1 -sw $a0, 256($sp) +sw $a0, 264($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4807,22 +5082,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 252($sp) +sw $t0, 260($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 284($sp) +sw $a1, 292($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4830,61 +5105,75 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 296($sp) li $t0, 1 -sw $t0, 292($sp) +sw $t0, 300($sp) move $t0, $sp -lw $t1, 292($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 296($sp) +sw $a1, 304($sp) move $t0, $sp -lw $t1, 252($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 248($sp) +sw $a1, 256($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 308($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 308($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 244($sp) -lw $t0, 244($sp) +sw $a1, 252($sp) +lw $t0, 252($sp) lw $t1, 16($t0) -sw $t1, 240($sp) -lw $t1, 240($sp) +sw $t1, 248($sp) +lw $t1, 248($sp) neg $a0, $t1 -sw $a0, 236($sp) +sw $a0, 244($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4892,17 +5181,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 232($sp) +sw $t0, 240($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 232($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 300($sp) -lw $t1, 232($sp) +sw $a1, 312($sp) +lw $t1, 240($sp) sw $t1, 44($sp) label_58: lw $t1, 44($sp) @@ -4914,7 +5203,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4922,27 +5211,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 304($sp) +sw $t0, 316($sp) li $t0, 0 -sw $t0, 308($sp) +sw $t0, 320($sp) move $t0, $sp -lw $t1, 308($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 304($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 312($sp) -lw $t1, 304($sp) +sw $a1, 324($sp) +lw $t1, 316($sp) sw $t1, 4($sp) label_59: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 324 +addi $sp, $sp, 336 jr $ra A2I.a2i_aux: -addi $sp, $sp, -188 +addi $sp, $sp, -192 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -4950,7 +5239,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4973,10 +5262,10 @@ sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) move $t0, $sp -lw $t1, 196($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 200($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4990,7 +5279,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5056,7 +5345,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5091,7 +5380,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5114,7 +5403,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5141,24 +5430,38 @@ sw $t1, 0($sp) lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 200($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 120($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 136($sp) move $t0, $sp lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 136($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -5180,7 +5483,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5197,7 +5500,7 @@ lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 136($sp) +sw $a1, 140($sp) lw $t1, 68($sp) sw $t1, 16($sp) li $a0, 20 @@ -5205,7 +5508,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5213,34 +5516,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 160($sp) -li $t0, 1 sw $t0, 164($sp) +li $t0, 1 +sw $t0, 168($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 168($sp) +sw $a1, 172($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 152($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) sw $t1, 156($sp) -lw $a0, 152($sp) -lw $t1, 156($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 160($sp) +lw $a0, 156($sp) +lw $t1, 160($sp) add $a0, $a0, $t1 -sw $a0, 148($sp) +sw $a0, 152($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5248,32 +5551,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 144($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 172($sp) -lw $t1, 144($sp) +sw $a1, 176($sp) +lw $t1, 148($sp) sw $t1, 40($sp) b label_60 label_62: lw $t1, 44($sp) -sw $t1, 180($sp) -lw $t1, 180($sp) sw $t1, 184($sp) -lw $t1, 16($sp) +lw $t1, 184($sp) sw $t1, 188($sp) -lw $a1, 188($sp) +lw $t1, 16($sp) +sw $t1, 192($sp) +lw $a1, 192($sp) lw $ra, 0($sp) -addi $sp, $sp, 200 +addi $sp, $sp, 204 jr $ra A2I.i2a: -addi $sp, $sp, -156 +addi $sp, $sp, -164 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -5281,7 +5584,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5301,7 +5604,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 164($sp) +lw $t0, 172($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -5342,7 +5645,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5365,7 +5668,7 @@ sw $a1, 68($sp) lw $t0, 60($sp) lw $t1, 16($t0) sw $t1, 52($sp) -lw $t0, 164($sp) +lw $t0, 172($sp) lw $t1, 16($t0) sw $t1, 56($sp) lw $a0, 52($sp) @@ -5405,7 +5708,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5428,7 +5731,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5459,7 +5762,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5477,7 +5780,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 136($sp) -lw $t0, 164($sp) +lw $t0, 172($sp) lw $t1, 16($t0) sw $t1, 104($sp) lw $t0, 112($sp) @@ -5492,7 +5795,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5510,14 +5813,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 144($sp) move $t0, $sp lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 144($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -5542,21 +5859,35 @@ lw $t1, 76($sp) sw $t1, 40($sp) b label_65 label_64: +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 144($sp) -lw $t1, 144($sp) +sw $a1, 148($sp) +lw $t1, 148($sp) sw $t1, 40($sp) label_65: lw $t1, 40($sp) @@ -5564,13 +5895,13 @@ sw $t1, 4($sp) b label_66 label_63: la $t0, s_3 -sw $t0, 148($sp) +sw $t0, 156($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5578,25 +5909,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 152($sp) +sw $t0, 160($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 156($sp) -lw $t1, 152($sp) +sw $a1, 164($sp) +lw $t1, 160($sp) sw $t1, 4($sp) label_66: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 168 +addi $sp, $sp, 176 jr $ra A2I.i2a_aux: -addi $sp, $sp, -152 +addi $sp, $sp, -160 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -5604,7 +5935,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5624,7 +5955,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 160($sp) +lw $t0, 168($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -5665,7 +5996,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5685,7 +6016,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 64($sp) -lw $t0, 160($sp) +lw $t0, 168($sp) lw $t1, 16($t0) sw $t1, 48($sp) lw $t0, 56($sp) @@ -5701,7 +6032,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5721,14 +6052,28 @@ jal Int_init sw $a1, 68($sp) lw $t1, 40($sp) sw $t1, 72($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 84($sp) move $t0, $sp lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -5740,7 +6085,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5748,34 +6093,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 120($sp) -li $t0, 10 sw $t0, 124($sp) +li $t0, 10 +sw $t0, 128($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 128($sp) +sw $a1, 132($sp) lw $t0, 72($sp) lw $t1, 16($t0) -sw $t1, 112($sp) -lw $t0, 120($sp) -lw $t1, 16($t0) sw $t1, 116($sp) -lw $a0, 112($sp) -lw $t1, 116($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $a0, 116($sp) +lw $t1, 120($sp) mul $a0, $a0, $t1 -sw $a0, 108($sp) +sw $a0, 112($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5783,32 +6128,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 132($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $t0, 104($sp) +sw $a1, 136($sp) +lw $t0, 168($sp) lw $t1, 16($t0) sw $t1, 100($sp) -lw $a0, 96($sp) -lw $t1, 100($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +lw $a0, 100($sp) +lw $t1, 104($sp) sub $a0, $a0, $t1 -sw $a0, 92($sp) +sw $a0, 96($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5816,32 +6161,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 136($sp) +sw $a1, 140($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 144($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 84($sp) +sw $a1, 88($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 80($t0) @@ -5855,19 +6214,19 @@ lw $t3, 16($t2) jal $t3 sw $a1, 76($sp) lw $t1, 76($sp) -sw $t1, 140($sp) -lw $t1, 140($sp) +sw $t1, 148($sp) +lw $t1, 148($sp) sw $t1, 4($sp) b label_68 label_67: la $t0, empty_str -sw $t0, 144($sp) +sw $t0, 152($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5875,22 +6234,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 152($sp) -lw $t1, 148($sp) +sw $a1, 160($sp) +lw $t1, 156($sp) sw $t1, 4($sp) label_68: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 164 +addi $sp, $sp, 172 jr $ra Main_init: addi $sp, $sp, -28 @@ -5908,7 +6267,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5969,7 +6328,7 @@ lw $ra, 0($sp) addi $sp, $sp, 36 jr $ra Main.menu: -addi $sp, $sp, -356 +addi $sp, $sp, -464 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_15 @@ -5979,7 +6338,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5997,45 +6356,73 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 360($sp) +lw $t0, 468($sp) lw $t1, 20($t0) -sw $t1, 304($sp) +sw $t1, 392($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 32($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 20($sp) +sw $a1, 24($sp) la $t0, s_16 -sw $t0, 32($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6043,38 +6430,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 40($sp) +sw $a1, 48($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 28($sp) +sw $a1, 36($sp) la $t0, s_17 -sw $t0, 48($sp) +sw $t0, 60($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6082,55 +6483,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 56($sp) -move $t0, $sp -lw $t1, 52($t0) +sw $a1, 68($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 72($sp) +move $t0, $sp +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 72($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 44($sp) -lw $t0, 360($sp) +sw $a1, 56($sp) +lw $t0, 468($sp) lw $t1, 20($t0) -sw $t1, 304($sp) +sw $t1, 392($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 60($sp) +sw $a1, 76($sp) la $t0, s_18 -sw $t0, 72($sp) +sw $t0, 92($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6138,38 +6567,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 76($sp) +sw $t0, 96($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 80($sp) +sw $a1, 100($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 68($sp) +sw $a1, 88($sp) la $t0, s_19 -sw $t0, 88($sp) +sw $t0, 112($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6177,55 +6620,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 92($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 96($sp) +sw $a1, 120($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 84($sp) -lw $t0, 360($sp) +sw $a1, 108($sp) +lw $t0, 468($sp) lw $t1, 20($t0) -sw $t1, 304($sp) +sw $t1, 392($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 136($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 136($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 100($sp) +sw $a1, 128($sp) la $t0, s_20 -sw $t0, 112($sp) +sw $t0, 144($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6233,38 +6704,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 116($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 120($sp) +sw $a1, 152($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 108($sp) +sw $a1, 140($sp) la $t0, s_21 -sw $t0, 128($sp) +sw $t0, 164($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6272,55 +6757,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 132($sp) +sw $t0, 168($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 136($sp) +sw $a1, 172($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 176($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 124($sp) -lw $t0, 360($sp) +sw $a1, 160($sp) +lw $t0, 468($sp) lw $t1, 20($t0) -sw $t1, 304($sp) +sw $t1, 392($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 188($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 188($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 140($sp) +sw $a1, 180($sp) la $t0, s_22 -sw $t0, 152($sp) +sw $t0, 196($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6328,38 +6841,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 156($sp) +sw $t0, 200($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 160($sp) +sw $a1, 204($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 208($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 208($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 148($sp) +sw $a1, 192($sp) la $t0, s_23 -sw $t0, 168($sp) +sw $t0, 216($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6367,55 +6894,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 172($sp) +sw $t0, 220($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 176($sp) +sw $a1, 224($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 228($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 164($sp) -lw $t0, 360($sp) +sw $a1, 212($sp) +lw $t0, 468($sp) lw $t1, 20($t0) -sw $t1, 304($sp) +sw $t1, 392($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 240($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 240($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 180($sp) +sw $a1, 232($sp) la $t0, s_24 -sw $t0, 192($sp) +sw $t0, 248($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6423,38 +6978,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 196($sp) +sw $t0, 252($sp) move $t0, $sp -lw $t1, 192($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 200($sp) +sw $a1, 256($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 260($sp) move $t0, $sp -lw $t1, 196($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 260($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 188($sp) +sw $a1, 244($sp) la $t0, s_25 -sw $t0, 208($sp) +sw $t0, 268($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6462,55 +7031,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 212($sp) +sw $t0, 272($sp) move $t0, $sp -lw $t1, 208($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 212($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 216($sp) +sw $a1, 276($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 280($sp) move $t0, $sp -lw $t1, 212($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 280($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 204($sp) -lw $t0, 360($sp) +sw $a1, 264($sp) +lw $t0, 468($sp) lw $t1, 20($t0) -sw $t1, 304($sp) +sw $t1, 392($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 292($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 292($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 220($sp) +sw $a1, 284($sp) la $t0, s_26 -sw $t0, 232($sp) +sw $t0, 300($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6518,38 +7115,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 236($sp) +sw $t0, 304($sp) move $t0, $sp -lw $t1, 232($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 240($sp) +sw $a1, 308($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 312($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 312($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 228($sp) +sw $a1, 296($sp) la $t0, s_27 -sw $t0, 248($sp) +sw $t0, 320($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6557,55 +7168,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 252($sp) +sw $t0, 324($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 324($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 256($sp) +sw $a1, 328($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 332($sp) move $t0, $sp -lw $t1, 252($t0) +lw $t1, 324($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 244($sp) -lw $t0, 360($sp) +sw $a1, 316($sp) +lw $t0, 468($sp) lw $t1, 20($t0) -sw $t1, 304($sp) +sw $t1, 392($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 344($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 344($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 260($sp) +sw $a1, 336($sp) la $t0, s_28 -sw $t0, 272($sp) +sw $t0, 352($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6613,94 +7252,136 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 276($sp) +sw $t0, 356($sp) move $t0, $sp -lw $t1, 272($t0) +lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 276($t0) +lw $t1, 356($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 280($sp) +sw $a1, 360($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 364($sp) move $t0, $sp -lw $t1, 276($t0) +lw $t1, 356($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 364($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 268($sp) +sw $a1, 348($sp) la $t0, s_29 -sw $t0, 288($sp) +sw $t0, 372($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 +sw $t1, 0($t0) +la $t1, String_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 376($sp) +move $t0, $sp +lw $t1, 372($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 376($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 380($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 sw $t1, 0($t0) -la $t1, String_name +la $t1, Main_name sw $t1, 4($t0) -li $t1, 5 +li $t1, 8 sw $t1, 8($t0) -la $t1, String_methods +la $t1, Main_methods sw $t1, 12($t0) -sw $t0, 292($sp) -move $t0, $sp -lw $t1, 288($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 292($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 296($sp) +sw $t0, 384($sp) move $t0, $sp -lw $t1, 292($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 384($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 284($sp) -lw $t0, 360($sp) +sw $a1, 368($sp) +lw $t0, 468($sp) lw $t1, 20($t0) -sw $t1, 304($sp) +sw $t1, 392($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 396($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 396($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 300($sp) +sw $a1, 388($sp) la $t0, s_30 -sw $t0, 312($sp) +sw $t0, 404($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6708,38 +7389,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 316($sp) +sw $t0, 408($sp) move $t0, $sp -lw $t1, 312($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 320($sp) +sw $a1, 412($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 416($sp) move $t0, $sp -lw $t1, 316($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 416($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 308($sp) +sw $a1, 400($sp) la $t0, s_31 -sw $t0, 328($sp) +sw $t0, 424($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6747,38 +7442,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 332($sp) +sw $t0, 428($sp) move $t0, $sp -lw $t1, 328($t0) +lw $t1, 424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 336($sp) +sw $a1, 432($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 436($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 324($sp) +sw $a1, 420($sp) la $t0, s_32 -sw $t0, 344($sp) +sw $t0, 444($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6786,47 +7495,75 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 348($sp) +sw $t0, 448($sp) move $t0, $sp -lw $t1, 344($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 348($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 352($sp) +sw $a1, 452($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 456($sp) move $t0, $sp -lw $t1, 348($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 456($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 340($sp) +sw $a1, 440($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 464($sp) move $t0, $sp -lw $t1, 360($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 464($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 356($sp) -lw $a1, 356($sp) +sw $a1, 460($sp) +lw $a1, 460($sp) lw $ra, 0($sp) -addi $sp, $sp, 364 +addi $sp, $sp, 472 jr $ra Main.prompt: -addi $sp, $sp, -36 +addi $sp, $sp, -48 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_33 @@ -6836,7 +7573,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6854,14 +7591,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -6869,13 +7620,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) la $t0, s_34 -sw $t0, 24($sp) +sw $t0, 28($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6883,21 +7634,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 28($sp) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 32($sp) +sw $a1, 36($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 40($t0) @@ -6906,24 +7671,38 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 20($sp) +sw $a1, 24($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 36($sp) -lw $a1, 36($sp) +sw $a1, 44($sp) +lw $a1, 44($sp) lw $ra, 0($sp) -addi $sp, $sp, 44 +addi $sp, $sp, 56 jr $ra Main.get_int: -addi $sp, $sp, -32 +addi $sp, $sp, -36 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -6931,7 +7710,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 10 +li $t1, 7 sw $t1, 0($t0) la $t1, A2I_name sw $t1, 4($t0) @@ -6948,11 +7727,25 @@ jal A2I_init sw $a1, 8($sp) lw $t1, 4($sp) sw $t1, 12($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -6960,9 +7753,9 @@ lw $t3, 32($t2) jal $t3 sw $a1, 16($sp) lw $t1, 16($sp) -sw $t1, 20($sp) +sw $t1, 24($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -6974,27 +7767,27 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 24($sp) -lw $t1, 24($sp) -sw $t1, 28($sp) +sw $a1, 28($sp) lw $t1, 28($sp) sw $t1, 32($sp) -lw $a1, 32($sp) +lw $t1, 32($sp) +sw $t1, 36($sp) +lw $a1, 36($sp) lw $ra, 0($sp) -addi $sp, $sp, 40 +addi $sp, $sp, 44 jr $ra Main.is_even: -addi $sp, $sp, -196 +addi $sp, $sp, -204 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t1, 204($sp) +lw $t1, 212($sp) sw $t1, 4($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7055,7 +7848,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7116,7 +7909,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7177,7 +7970,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7212,7 +8005,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7230,14 +8023,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 148($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 152($sp) move $t0, $sp lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -7261,19 +8068,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 152($sp) -li $t0, 0 sw $t0, 156($sp) +li $t0, 0 +sw $t0, 160($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 160($sp) -lw $t1, 152($sp) +sw $a1, 164($sp) +lw $t1, 156($sp) sw $t1, 80($sp) label_72: lw $t1, 80($sp) @@ -7293,19 +8100,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 164($sp) -li $t0, 1 sw $t0, 168($sp) +li $t0, 1 +sw $t0, 172($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 172($sp) -lw $t1, 164($sp) +sw $a1, 176($sp) +lw $t1, 168($sp) sw $t1, 44($sp) label_73: lw $t1, 44($sp) @@ -7314,16 +8121,16 @@ b label_74 label_69: lw $t0, 4($sp) lw $t1, 16($t0) -sw $t1, 188($sp) -lw $t1, 188($sp) +sw $t1, 192($sp) +lw $t1, 192($sp) neg $a0, $t1 -sw $a0, 184($sp) +sw $a0, 188($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7331,21 +8138,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 180($sp) +sw $t0, 184($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 192($sp) +sw $a1, 196($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 200($sp) move $t0, $sp -lw $t1, 180($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 200($t0) @@ -7354,29 +8175,29 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 176($sp) -lw $t1, 176($sp) +sw $a1, 180($sp) +lw $t1, 180($sp) sw $t1, 8($sp) label_74: lw $t1, 8($sp) -sw $t1, 196($sp) -lw $a1, 196($sp) +sw $t1, 204($sp) +lw $a1, 204($sp) lw $ra, 0($sp) -addi $sp, $sp, 208 +addi $sp, $sp, 216 jr $ra Main.class_type: -addi $sp, $sp, -124 +addi $sp, $sp, -148 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 132($sp) +lw $t0, 156($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_76 b case_void_error label_76: -blt $t1 0 label_77 -bgt $t1 11 label_77 -lw $t1, 132($sp) +blt $t1 10 label_77 +bgt $t1 10 label_77 +lw $t1, 156($sp) sw $t1, 8($sp) la $t0, s_35 sw $t0, 16($sp) @@ -7385,7 +8206,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7403,14 +8224,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 24($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 28($sp) move $t0, $sp lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 28($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -7422,17 +8257,17 @@ sw $t1, 4($sp) b label_75 label_77: blt $t1 9 label_78 -bgt $t1 9 label_78 -lw $t1, 132($sp) -sw $t1, 28($sp) +bgt $t1 10 label_78 +lw $t1, 156($sp) +sw $t1, 32($sp) la $t0, s_36 -sw $t0, 36($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7440,46 +8275,60 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 40($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 44($sp) +sw $a1, 48($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 32($sp) -lw $t1, 32($sp) +sw $a1, 36($sp) +lw $t1, 36($sp) sw $t1, 4($sp) b label_75 label_78: blt $t1 8 label_79 bgt $t1 8 label_79 -lw $t1, 132($sp) -sw $t1, 48($sp) +lw $t1, 156($sp) +sw $t1, 56($sp) la $t0, s_37 -sw $t0, 56($sp) +sw $t0, 64($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7487,46 +8336,60 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 60($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 64($sp) +sw $a1, 72($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 52($sp) -lw $t1, 52($sp) +sw $a1, 60($sp) +lw $t1, 60($sp) sw $t1, 4($sp) b label_75 label_79: blt $t1 7 label_80 -bgt $t1 7 label_80 -lw $t1, 132($sp) -sw $t1, 68($sp) +bgt $t1 10 label_80 +lw $t1, 156($sp) +sw $t1, 80($sp) la $t0, s_38 -sw $t0, 76($sp) +sw $t0, 88($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7534,93 +8397,121 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 84($sp) +sw $a1, 96($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 100($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 72($sp) -lw $t1, 72($sp) +sw $a1, 84($sp) +lw $t1, 84($sp) sw $t1, 4($sp) b label_75 label_80: blt $t1 6 label_81 -bgt $t1 6 label_81 -lw $t1, 132($sp) -sw $t1, 88($sp) +bgt $t1 10 label_81 +lw $t1, 156($sp) +sw $t1, 104($sp) la $t0, s_39 -sw $t0, 96($sp) +sw $t0, 112($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) li $t1, 5 sw $t1, 8($t0) -la $t1, String_methods +la $t1, String_methods +sw $t1, 12($t0) +sw $t0, 116($sp) +move $t0, $sp +lw $t1, 112($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 116($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 120($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods sw $t1, 12($t0) -sw $t0, 100($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 104($sp) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 92($sp) -lw $t1, 92($sp) +sw $a1, 108($sp) +lw $t1, 108($sp) sw $t1, 4($sp) b label_75 label_81: -blt $t1 5 label_82 -bgt $t1 5 label_82 -lw $t1, 132($sp) -sw $t1, 108($sp) +blt $t1 0 label_82 +bgt $t1 10 label_82 +lw $t1, 156($sp) +sw $t1, 128($sp) la $t0, s_40 -sw $t0, 116($sp) +sw $t0, 136($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7628,31 +8519,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 120($sp) +sw $t0, 140($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 124($sp) +sw $a1, 144($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 120($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 148($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 112($sp) -lw $t1, 112($sp) +sw $a1, 132($sp) +lw $t1, 132($sp) sw $t1, 4($sp) b label_75 label_82: @@ -7660,10 +8565,10 @@ b case_no_match_error label_75: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 136 +addi $sp, $sp, 160 jr $ra Main.print: -addi $sp, $sp, -44 +addi $sp, $sp, -52 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -7671,7 +8576,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 10 +li $t1, 7 sw $t1, 0($t0) la $t1, A2I_name sw $t1, 4($t0) @@ -7689,10 +8594,10 @@ sw $a1, 8($sp) lw $t1, 4($sp) sw $t1, 12($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 60($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -7713,14 +8618,28 @@ lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 20($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 28($sp) move $t0, $sp lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 28($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -7728,13 +8647,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 16($sp) la $t0, s_41 -sw $t0, 32($sp) +sw $t0, 36($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7742,21 +8661,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 40($sp) +sw $a1, 44($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 48($t0) @@ -7765,15 +8698,15 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 28($sp) -lw $t1, 28($sp) -sw $t1, 44($sp) -lw $a1, 44($sp) +sw $a1, 32($sp) +lw $t1, 32($sp) +sw $t1, 52($sp) +lw $a1, 52($sp) lw $ra, 0($sp) -addi $sp, $sp, 56 +addi $sp, $sp, 64 jr $ra Main.main: -addi $sp, $sp, -1136 +addi $sp, $sp, -1232 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -7781,7 +8714,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A_name sw $t1, 4($t0) @@ -7796,11 +8729,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init sw $a1, 8($sp) -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 4($sp) sw $t1, 20($t0) label_83: -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 28($t0) sw $t1, 20($sp) lw $t0, 20($sp) @@ -7815,7 +8748,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7833,76 +8766,118 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 36($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 40($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 24($sp) -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 40($sp) -lw $t0, 1140($sp) +sw $a1, 44($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 56($sp) +sw $a1, 64($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 72($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 52($sp) -lw $t0, 52($sp) +sw $a1, 60($sp) +lw $t0, 60($sp) lw $a0, 16($t0) bnez $a0, label_86 la $t0, s_43 -sw $t0, 68($sp) +sw $t0, 80($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7910,42 +8885,56 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 76($sp) +sw $a1, 88($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 92($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 64($sp) -lw $t1, 64($sp) -sw $t1, 48($sp) +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 56($sp) b label_87 label_86: la $t0, s_44 -sw $t0, 84($sp) +sw $t0, 100($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7953,75 +8942,117 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) +sw $a1, 108($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 112($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 112($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 80($sp) -lw $t1, 80($sp) -sw $t1, 48($sp) +sw $a1, 96($sp) +lw $t1, 96($sp) +sw $t1, 56($sp) label_87: -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 96($sp) +sw $a1, 116($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 132($sp) move $t0, $sp -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 104($sp) -lw $t0, 1140($sp) -lw $t1, 104($sp) +sw $a1, 128($sp) +lw $t0, 1236($sp) +lw $t1, 128($sp) sw $t1, 16($t0) -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_45 -sw $t0, 136($sp) +sw $t0, 164($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8029,25 +9060,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 140($sp) +sw $t0, 168($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 144($sp) +sw $a1, 172($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 120($sp) +sw $a1, 148($sp) li $a0, 20 li $v0, 9 syscall @@ -8061,30 +9092,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 116($sp) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 120($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 148($sp) -lw $t0, 116($sp) +sw $a1, 176($sp) +lw $t0, 144($sp) lw $a0, 16($t0) bnez $a0, label_88 -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_46 -sw $t0, 176($sp) +sw $t0, 204($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8092,25 +9123,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 180($sp) +sw $t0, 208($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 184($sp) +sw $a1, 212($sp) move $t0, $sp -lw $t1, 180($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 160($sp) +sw $a1, 188($sp) li $a0, 20 li $v0, 9 syscall @@ -8124,30 +9155,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 156($sp) +sw $t0, 184($sp) move $t0, $sp -lw $t1, 160($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 188($sp) -lw $t0, 156($sp) +sw $a1, 216($sp) +lw $t0, 184($sp) lw $a0, 16($t0) bnez $a0, label_89 -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_47 -sw $t0, 216($sp) +sw $t0, 244($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8155,25 +9186,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 220($sp) +sw $t0, 248($sp) move $t0, $sp -lw $t1, 216($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 224($sp) +sw $a1, 252($sp) move $t0, $sp -lw $t1, 220($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 200($sp) +sw $a1, 228($sp) li $a0, 20 li $v0, 9 syscall @@ -8187,30 +9218,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 196($sp) +sw $t0, 224($sp) move $t0, $sp -lw $t1, 200($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 228($sp) -lw $t0, 196($sp) +sw $a1, 256($sp) +lw $t0, 224($sp) lw $a0, 16($t0) bnez $a0, label_90 -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_48 -sw $t0, 256($sp) +sw $t0, 284($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8218,25 +9249,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 260($sp) +sw $t0, 288($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 264($sp) +sw $a1, 292($sp) move $t0, $sp -lw $t1, 260($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 240($sp) +sw $a1, 268($sp) li $a0, 20 li $v0, 9 syscall @@ -8250,30 +9281,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 236($sp) +sw $t0, 264($sp) move $t0, $sp -lw $t1, 240($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 268($sp) -lw $t0, 236($sp) +sw $a1, 296($sp) +lw $t0, 264($sp) lw $a0, 16($t0) bnez $a0, label_91 -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_49 -sw $t0, 296($sp) +sw $t0, 324($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8281,25 +9312,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 300($sp) +sw $t0, 328($sp) move $t0, $sp -lw $t1, 296($t0) +lw $t1, 324($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 300($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 304($sp) +sw $a1, 332($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 280($sp) +sw $a1, 308($sp) li $a0, 20 li $v0, 9 syscall @@ -8313,30 +9344,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 276($sp) +sw $t0, 304($sp) move $t0, $sp -lw $t1, 280($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 276($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 308($sp) -lw $t0, 276($sp) +sw $a1, 336($sp) +lw $t0, 304($sp) lw $a0, 16($t0) bnez $a0, label_92 -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_50 -sw $t0, 336($sp) +sw $t0, 364($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8344,25 +9375,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 340($sp) +sw $t0, 368($sp) move $t0, $sp -lw $t1, 336($t0) +lw $t1, 364($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 340($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 344($sp) +sw $a1, 372($sp) move $t0, $sp -lw $t1, 340($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 320($sp) +sw $a1, 348($sp) li $a0, 20 li $v0, 9 syscall @@ -8376,30 +9407,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 316($sp) +sw $t0, 344($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 348($sp) -lw $t0, 316($sp) +sw $a1, 376($sp) +lw $t0, 344($sp) lw $a0, 16($t0) bnez $a0, label_93 -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_51 -sw $t0, 376($sp) +sw $t0, 404($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8407,25 +9438,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 380($sp) +sw $t0, 408($sp) move $t0, $sp -lw $t1, 376($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 380($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 384($sp) +sw $a1, 412($sp) move $t0, $sp -lw $t1, 380($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 360($sp) +sw $a1, 388($sp) li $a0, 20 li $v0, 9 syscall @@ -8439,30 +9470,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 356($sp) +sw $t0, 384($sp) move $t0, $sp -lw $t1, 360($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 356($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 388($sp) -lw $t0, 356($sp) +sw $a1, 416($sp) +lw $t0, 384($sp) lw $a0, 16($t0) bnez $a0, label_94 -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_52 -sw $t0, 416($sp) +sw $t0, 444($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8470,25 +9501,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 420($sp) +sw $t0, 448($sp) move $t0, $sp -lw $t1, 416($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 420($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 424($sp) +sw $a1, 452($sp) move $t0, $sp -lw $t1, 420($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 400($sp) +sw $a1, 428($sp) li $a0, 20 li $v0, 9 syscall @@ -8502,30 +9533,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 396($sp) +sw $t0, 424($sp) move $t0, $sp -lw $t1, 400($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 396($t0) +lw $t1, 424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 428($sp) -lw $t0, 396($sp) +sw $a1, 456($sp) +lw $t0, 424($sp) lw $a0, 16($t0) bnez $a0, label_95 -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_53 -sw $t0, 456($sp) +sw $t0, 484($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8533,25 +9564,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 460($sp) +sw $t0, 488($sp) move $t0, $sp -lw $t1, 456($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 460($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 464($sp) +sw $a1, 492($sp) move $t0, $sp -lw $t1, 460($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 440($sp) +sw $a1, 468($sp) li $a0, 20 li $v0, 9 syscall @@ -8565,30 +9596,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 436($sp) +sw $t0, 464($sp) move $t0, $sp -lw $t1, 440($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 436($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 468($sp) -lw $t0, 436($sp) +sw $a1, 496($sp) +lw $t0, 464($sp) lw $a0, 16($t0) bnez $a0, label_96 -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 16($t0) -sw $t1, 492($sp) +sw $t1, 520($sp) la $t0, s_54 -sw $t0, 496($sp) +sw $t0, 524($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8596,25 +9627,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 500($sp) +sw $t0, 528($sp) move $t0, $sp -lw $t1, 496($t0) +lw $t1, 524($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 500($t0) +lw $t1, 528($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 504($sp) +sw $a1, 532($sp) move $t0, $sp -lw $t1, 500($t0) +lw $t1, 528($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 480($sp) +sw $a1, 508($sp) li $a0, 20 li $v0, 9 syscall @@ -8628,17 +9659,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 476($sp) +sw $t0, 504($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 476($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 508($sp) -lw $t0, 476($sp) +sw $a1, 536($sp) +lw $t0, 504($sp) lw $a0, 16($t0) bnez $a0, label_97 li $a0, 20 @@ -8646,7 +9677,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A_name sw $t1, 4($t0) @@ -8654,46 +9685,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 516($sp) +sw $t0, 544($sp) move $t0, $sp -lw $t1, 516($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 520($sp) -lw $t0, 1140($sp) +sw $a1, 548($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 524($sp) +sw $a1, 552($sp) move $t0, $sp -lw $t1, 524($t0) +lw $t1, 552($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 516($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 516($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 512($sp) -lw $t0, 1140($sp) -lw $t1, 512($sp) +sw $a1, 540($sp) +lw $t0, 1236($sp) +lw $t1, 540($sp) sw $t1, 20($t0) -lw $t1, 512($sp) -sw $t1, 472($sp) +lw $t1, 540($sp) +sw $t1, 500($sp) b label_98 label_97: li $a0, 20 @@ -8709,26 +9740,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 536($sp) +sw $t0, 564($sp) li $t0, 0 -sw $t0, 540($sp) +sw $t0, 568($sp) move $t0, $sp -lw $t1, 540($t0) +lw $t1, 568($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 536($t0) +lw $t1, 564($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 544($sp) -lw $t0, 1140($sp) -lw $t1, 536($sp) +sw $a1, 572($sp) +lw $t0, 1236($sp) +lw $t1, 564($sp) sw $t1, 28($t0) -lw $t1, 536($sp) -sw $t1, 472($sp) +lw $t1, 564($sp) +sw $t1, 500($sp) label_98: -lw $t1, 472($sp) -sw $t1, 432($sp) +lw $t1, 500($sp) +sw $t1, 460($sp) b label_99 label_96: li $a0, 20 @@ -8736,7 +9767,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A_name sw $t1, 4($t0) @@ -8744,31 +9775,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 552($sp) +sw $t0, 580($sp) move $t0, $sp -lw $t1, 552($t0) +lw $t1, 580($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 556($sp) -lw $t0, 1140($sp) -lw $t1, 552($sp) +sw $a1, 584($sp) +lw $t0, 1236($sp) +lw $t1, 580($sp) sw $t1, 20($t0) -lw $t1, 552($sp) -sw $t1, 432($sp) +lw $t1, 580($sp) +sw $t1, 460($sp) label_99: -lw $t1, 432($sp) -sw $t1, 392($sp) +lw $t1, 460($sp) +sw $t1, 420($sp) b label_100 label_95: la $t1, void -sw $t1, 564($sp) +sw $t1, 592($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 9 +li $t1, 10 sw $t1, 0($t0) la $t1, E_name sw $t1, 4($t0) @@ -8776,74 +9807,74 @@ li $t1, 5 sw $t1, 8($t0) la $t1, E_methods sw $t1, 12($t0) -sw $t0, 572($sp) +sw $t0, 600($sp) move $t0, $sp -lw $t1, 572($t0) +lw $t1, 600($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal E_init -sw $a1, 576($sp) -lw $t0, 1140($sp) +sw $a1, 604($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 580($sp) +sw $a1, 608($sp) move $t0, $sp -lw $t1, 580($t0) +lw $t1, 608($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 572($t0) +lw $t1, 600($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 572($t0) +lw $t1, 600($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 568($sp) -lw $t1, 568($sp) -sw $t1, 564($sp) -lw $t0, 1140($sp) +sw $a1, 596($sp) +lw $t1, 596($sp) +sw $t1, 592($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 608($sp) +sw $a1, 636($sp) move $t0, $sp -lw $t1, 564($t0) +lw $t1, 592($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 564($t0) +lw $t1, 592($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 632($sp) +sw $a1, 660($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8851,34 +9882,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 636($sp) +sw $t0, 664($sp) li $t0, 8 -sw $t0, 640($sp) +sw $t0, 668($sp) move $t0, $sp -lw $t1, 640($t0) +lw $t1, 668($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 636($t0) +lw $t1, 664($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 644($sp) -lw $t0, 632($sp) +sw $a1, 672($sp) +lw $t0, 660($sp) lw $t1, 16($t0) -sw $t1, 624($sp) -lw $t0, 636($sp) +sw $t1, 652($sp) +lw $t0, 664($sp) lw $t1, 16($t0) -sw $t1, 628($sp) -lw $a0, 624($sp) -lw $t1, 628($sp) +sw $t1, 656($sp) +lw $a0, 652($sp) +lw $t1, 656($sp) mul $a0, $a0, $t1 -sw $a0, 620($sp) +sw $a0, 648($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8886,32 +9917,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 616($sp) +sw $t0, 644($sp) move $t0, $sp -lw $t1, 620($t0) +lw $t1, 648($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 616($t0) +lw $t1, 644($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 648($sp) -lw $t0, 608($sp) +sw $a1, 676($sp) +lw $t0, 636($sp) lw $t1, 16($t0) -sw $t1, 600($sp) -lw $t0, 616($sp) +sw $t1, 628($sp) +lw $t0, 644($sp) lw $t1, 16($t0) -sw $t1, 604($sp) -lw $a0, 600($sp) -lw $t1, 604($sp) +sw $t1, 632($sp) +lw $a0, 628($sp) +lw $t1, 632($sp) sub $a0, $a0, $t1 -sw $a0, 596($sp) +sw $a0, 624($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8919,26 +9950,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 592($sp) +sw $t0, 620($sp) move $t0, $sp -lw $t1, 596($t0) +lw $t1, 624($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 592($t0) +lw $t1, 620($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 652($sp) -lw $t1, 592($sp) -sw $t1, 656($sp) +sw $a1, 680($sp) +lw $t1, 620($sp) +sw $t1, 684($sp) la $t0, s_42 -sw $t0, 664($sp) +sw $t0, 692($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8946,55 +9977,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 668($sp) +sw $t0, 696($sp) move $t0, $sp -lw $t1, 664($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 668($t0) +lw $t1, 696($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 672($sp) +sw $a1, 700($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 704($sp) move $t0, $sp -lw $t1, 668($t0) +lw $t1, 696($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 704($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 660($sp) -lw $t0, 1140($sp) +sw $a1, 688($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 716($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 716($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 676($sp) +sw $a1, 708($sp) la $t0, s_55 -sw $t0, 688($sp) +sw $t0, 724($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9002,52 +10061,80 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 692($sp) +sw $t0, 728($sp) move $t0, $sp -lw $t1, 688($t0) +lw $t1, 724($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 692($t0) +lw $t1, 728($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 696($sp) +sw $a1, 732($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 736($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 728($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 736($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 684($sp) +sw $a1, 720($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 744($sp) move $t0, $sp -lw $t1, 564($t0) +lw $t1, 592($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 744($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 700($sp) +sw $a1, 740($sp) la $t0, s_56 -sw $t0, 708($sp) +sw $t0, 752($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9055,36 +10142,50 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 712($sp) +sw $t0, 756($sp) move $t0, $sp -lw $t1, 708($t0) +lw $t1, 752($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 712($t0) +lw $t1, 756($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 716($sp) +sw $a1, 760($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 764($sp) move $t0, $sp -lw $t1, 712($t0) +lw $t1, 756($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 764($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 704($sp) +sw $a1, 748($sp) li $a0, 16 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 10 +li $t1, 7 sw $t1, 0($t0) la $t1, A2I_name sw $t1, 4($t0) @@ -9092,51 +10193,65 @@ li $t1, 4 sw $t1, 8($t0) la $t1, A2I_methods sw $t1, 12($t0) -sw $t0, 720($sp) +sw $t0, 768($sp) move $t0, $sp -lw $t1, 720($t0) +lw $t1, 768($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A2I_init -sw $a1, 724($sp) -lw $t1, 720($sp) -sw $t1, 728($sp) +sw $a1, 772($sp) +lw $t1, 768($sp) +sw $t1, 776($sp) move $t0, $sp -lw $t1, 656($t0) +lw $t1, 684($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 728($t0) +lw $t1, 776($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 728($t0) +lw $t1, 776($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 736($sp) +sw $a1, 784($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 788($sp) move $t0, $sp -lw $t1, 736($t0) +lw $t1, 784($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 788($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 732($sp) +sw $a1, 780($sp) la $t0, s_33 -sw $t0, 744($sp) +sw $t0, 796($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9144,44 +10259,58 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 748($sp) +sw $t0, 800($sp) move $t0, $sp -lw $t1, 744($t0) +lw $t1, 796($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 748($t0) +lw $t1, 800($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 752($sp) +sw $a1, 804($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 808($sp) move $t0, $sp -lw $t1, 748($t0) +lw $t1, 800($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 808($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 740($sp) -lw $t1, 740($sp) -sw $t1, 756($sp) -lw $t1, 756($sp) -sw $t1, 760($sp) -lw $t0, 1140($sp) -lw $t1, 564($sp) +sw $a1, 792($sp) +lw $t1, 792($sp) +sw $t1, 812($sp) +lw $t1, 812($sp) +sw $t1, 816($sp) +lw $t0, 1236($sp) +lw $t1, 592($sp) sw $t1, 20($t0) -lw $t1, 564($sp) -sw $t1, 768($sp) -lw $t1, 768($sp) -sw $t1, 392($sp) +lw $t1, 592($sp) +sw $t1, 824($sp) +lw $t1, 824($sp) +sw $t1, 420($sp) label_100: -lw $t1, 392($sp) -sw $t1, 352($sp) +lw $t1, 420($sp) +sw $t1, 380($sp) b label_101 label_94: li $a0, 20 @@ -9189,7 +10318,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 9 sw $t1, 0($t0) la $t1, D_name sw $t1, 4($t0) @@ -9197,52 +10326,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, D_methods sw $t1, 12($t0) -sw $t0, 780($sp) +sw $t0, 836($sp) move $t0, $sp -lw $t1, 780($t0) +lw $t1, 836($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal D_init -sw $a1, 784($sp) -lw $t0, 1140($sp) +sw $a1, 840($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 788($sp) +sw $a1, 844($sp) move $t0, $sp -lw $t1, 788($t0) +lw $t1, 844($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 780($t0) +lw $t1, 836($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 780($t0) +lw $t1, 836($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 776($sp) -lw $t0, 776($sp) +sw $a1, 832($sp) +lw $t0, 832($sp) lw $a0, 16($t0) bnez $a0, label_102 la $t0, s_42 -sw $t0, 800($sp) +sw $t0, 856($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9250,55 +10379,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 804($sp) +sw $t0, 860($sp) move $t0, $sp -lw $t1, 800($t0) +lw $t1, 856($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 804($t0) +lw $t1, 860($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 808($sp) +sw $a1, 864($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 868($sp) move $t0, $sp -lw $t1, 804($t0) +lw $t1, 860($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 868($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 796($sp) -lw $t0, 1140($sp) +sw $a1, 852($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 880($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 880($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 812($sp) +sw $a1, 872($sp) la $t0, s_57 -sw $t0, 824($sp) +sw $t0, 888($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9306,42 +10463,56 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 828($sp) +sw $t0, 892($sp) move $t0, $sp -lw $t1, 824($t0) +lw $t1, 888($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 828($t0) +lw $t1, 892($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 832($sp) +sw $a1, 896($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 900($sp) move $t0, $sp -lw $t1, 828($t0) +lw $t1, 892($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 900($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 820($sp) -lw $t1, 820($sp) -sw $t1, 772($sp) +sw $a1, 884($sp) +lw $t1, 884($sp) +sw $t1, 828($sp) b label_103 label_102: la $t0, s_42 -sw $t0, 840($sp) +sw $t0, 908($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9349,55 +10520,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 844($sp) +sw $t0, 912($sp) move $t0, $sp -lw $t1, 840($t0) +lw $t1, 908($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 844($t0) +lw $t1, 912($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 848($sp) +sw $a1, 916($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 920($sp) move $t0, $sp -lw $t1, 844($t0) +lw $t1, 912($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 920($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 836($sp) -lw $t0, 1140($sp) +sw $a1, 904($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 932($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 932($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 852($sp) +sw $a1, 924($sp) la $t0, s_58 -sw $t0, 864($sp) +sw $t0, 940($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9405,38 +10604,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 868($sp) +sw $t0, 944($sp) move $t0, $sp -lw $t1, 864($t0) +lw $t1, 940($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 868($t0) +lw $t1, 944($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 872($sp) +sw $a1, 948($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 952($sp) move $t0, $sp -lw $t1, 868($t0) +lw $t1, 944($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 952($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 860($sp) -lw $t1, 860($sp) -sw $t1, 772($sp) +sw $a1, 936($sp) +lw $t1, 936($sp) +sw $t1, 828($sp) label_103: -lw $t1, 772($sp) -sw $t1, 352($sp) +lw $t1, 828($sp) +sw $t1, 380($sp) label_101: -lw $t1, 352($sp) -sw $t1, 312($sp) +lw $t1, 380($sp) +sw $t1, 340($sp) b label_104 label_93: li $a0, 20 @@ -9444,7 +10657,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 8 sw $t1, 0($t0) la $t1, C_name sw $t1, 4($t0) @@ -9452,33 +10665,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, C_methods sw $t1, 12($t0) -sw $t0, 880($sp) +sw $t0, 960($sp) move $t0, $sp -lw $t1, 880($t0) +lw $t1, 960($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal C_init -sw $a1, 884($sp) -lw $t0, 1140($sp) +sw $a1, 964($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 888($sp) +sw $a1, 968($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 8 sw $t1, 0($t0) la $t1, C_name sw $t1, 4($t0) @@ -9486,29 +10699,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, C_methods sw $t1, 12($t0) -sw $t0, 896($sp) +sw $t0, 976($sp) move $t0, $sp -lw $t1, 888($t0) +lw $t1, 968($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 880($t0) +lw $t1, 960($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 896($t0) +lw $t1, 976($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 876($sp) -lw $t0, 1140($sp) -lw $t1, 876($sp) +sw $a1, 956($sp) +lw $t0, 1236($sp) +lw $t1, 956($sp) sw $t1, 20($t0) -lw $t1, 876($sp) -sw $t1, 312($sp) +lw $t1, 956($sp) +sw $t1, 340($sp) label_104: -lw $t1, 312($sp) -sw $t1, 272($sp) +lw $t1, 340($sp) +sw $t1, 300($sp) b label_105 label_92: li $a0, 20 @@ -9516,7 +10729,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 8 sw $t1, 0($t0) la $t1, C_name sw $t1, 4($t0) @@ -9524,33 +10737,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, C_methods sw $t1, 12($t0) -sw $t0, 908($sp) +sw $t0, 988($sp) move $t0, $sp -lw $t1, 908($t0) +lw $t1, 988($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal C_init -sw $a1, 912($sp) -lw $t0, 1140($sp) +sw $a1, 992($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 916($sp) +sw $a1, 996($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 7 sw $t1, 0($t0) la $t1, B_name sw $t1, 4($t0) @@ -9558,29 +10771,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, B_methods sw $t1, 12($t0) -sw $t0, 924($sp) +sw $t0, 1004($sp) move $t0, $sp -lw $t1, 916($t0) +lw $t1, 996($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 908($t0) +lw $t1, 988($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 924($t0) +lw $t1, 1004($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 904($sp) -lw $t0, 1140($sp) -lw $t1, 904($sp) +sw $a1, 984($sp) +lw $t0, 1236($sp) +lw $t1, 984($sp) sw $t1, 20($t0) -lw $t1, 904($sp) -sw $t1, 272($sp) +lw $t1, 984($sp) +sw $t1, 300($sp) label_105: -lw $t1, 272($sp) -sw $t1, 232($sp) +lw $t1, 300($sp) +sw $t1, 260($sp) b label_106 label_91: li $a0, 20 @@ -9588,7 +10801,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 8 sw $t1, 0($t0) la $t1, C_name sw $t1, 4($t0) @@ -9596,33 +10809,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, C_methods sw $t1, 12($t0) -sw $t0, 936($sp) +sw $t0, 1016($sp) move $t0, $sp -lw $t1, 936($t0) +lw $t1, 1016($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal C_init -sw $a1, 940($sp) -lw $t0, 1140($sp) +sw $a1, 1020($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 944($sp) +sw $a1, 1024($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A_name sw $t1, 4($t0) @@ -9630,29 +10843,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 952($sp) +sw $t0, 1032($sp) move $t0, $sp -lw $t1, 944($t0) +lw $t1, 1024($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 936($t0) +lw $t1, 1016($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 952($t0) +lw $t1, 1032($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 932($sp) -lw $t0, 1140($sp) -lw $t1, 932($sp) +sw $a1, 1012($sp) +lw $t0, 1236($sp) +lw $t1, 1012($sp) sw $t1, 20($t0) -lw $t1, 932($sp) -sw $t1, 232($sp) +lw $t1, 1012($sp) +sw $t1, 260($sp) label_106: -lw $t1, 232($sp) -sw $t1, 192($sp) +lw $t1, 260($sp) +sw $t1, 220($sp) b label_107 label_90: li $a0, 20 @@ -9660,7 +10873,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A_name sw $t1, 4($t0) @@ -9668,47 +10881,61 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 964($sp) +sw $t0, 1044($sp) move $t0, $sp -lw $t1, 964($t0) +lw $t1, 1044($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 968($sp) +sw $a1, 1048($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 1056($sp) move $t0, $sp -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1056($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 972($sp) +sw $a1, 1052($sp) move $t0, $sp -lw $t1, 972($t0) +lw $t1, 1052($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 964($t0) +lw $t1, 1044($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 964($t0) +lw $t1, 1044($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 960($sp) -lw $t0, 1140($sp) -lw $t1, 960($sp) +sw $a1, 1040($sp) +lw $t0, 1236($sp) +lw $t1, 1040($sp) sw $t1, 24($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 9 sw $t1, 0($t0) la $t1, D_name sw $t1, 4($t0) @@ -9716,239 +10943,267 @@ li $t1, 5 sw $t1, 8($t0) la $t1, D_methods sw $t1, 12($t0) -sw $t0, 984($sp) +sw $t0, 1068($sp) move $t0, $sp -lw $t1, 984($t0) +lw $t1, 1068($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal D_init -sw $a1, 988($sp) -lw $t0, 1140($sp) +sw $a1, 1072($sp) +lw $t0, 1236($sp) lw $t1, 24($t0) -sw $t1, 1124($sp) +sw $t1, 1220($sp) move $t0, $sp -lw $t1, 1124($t0) +lw $t1, 1220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1124($t0) +lw $t1, 1220($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 992($sp) -lw $t0, 1140($sp) +sw $a1, 1076($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1000($sp) +sw $a1, 1084($sp) move $t0, $sp -lw $t1, 992($t0) +lw $t1, 1076($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1000($t0) +lw $t1, 1084($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 984($t0) +lw $t1, 1068($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 984($t0) +lw $t1, 1068($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 980($sp) -lw $t0, 1140($sp) -lw $t1, 980($sp) +sw $a1, 1064($sp) +lw $t0, 1236($sp) +lw $t1, 1064($sp) sw $t1, 20($t0) -lw $t1, 980($sp) -sw $t1, 192($sp) +lw $t1, 1064($sp) +sw $t1, 220($sp) label_107: -lw $t1, 192($sp) -sw $t1, 152($sp) +lw $t1, 220($sp) +sw $t1, 180($sp) b label_108 label_89: -lw $t0, 1140($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) -lw $t0, 1132($sp) +sw $t1, 1228($sp) +lw $t0, 1228($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_110 b case_void_error label_110: -blt $t1 0 label_111 -bgt $t1 11 label_111 -lw $t1, 1132($sp) -sw $t1, 1020($sp) -la $t0, s_35 -sw $t0, 1028($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 1032($sp) +blt $t1 8 label_111 +bgt $t1 8 label_111 +lw $t1, 1228($sp) +sw $t1, 1104($sp) move $t0, $sp -lw $t1, 1028($t0) +lw $t1, 1104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1032($t0) +lw $t1, 1104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 1112($sp) +move $t0, $sp +lw $t1, 1112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal String_init -sw $a1, 1036($sp) -move $t0, $sp -lw $t1, 1032($t0) +lw $t1, 1104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1104($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 1108($sp) +lw $t0, 1236($sp) +lw $t1, 1108($sp) +sw $t1, 20($t0) +lw $t1, 1108($sp) +sw $t1, 1096($sp) +b label_109 +label_111: +blt $t1 6 label_112 +bgt $t1 10 label_112 +lw $t1, 1228($sp) +sw $t1, 1120($sp) +move $t0, $sp +lw $t1, 1120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1120($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1024($sp) +sw $a1, 1128($sp) move $t0, $sp -lw $t1, 1140($t0) +lw $t1, 1128($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1120($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) -lw $t3, 0($t2) +lw $t3, 28($t2) jal $t3 -sw $a1, 1040($sp) +sw $a1, 1124($sp) +lw $t0, 1236($sp) +lw $t1, 1124($sp) +sw $t1, 20($t0) +lw $t1, 1124($sp) +sw $t1, 1096($sp) +b label_109 +label_112: +blt $t1 0 label_113 +bgt $t1 10 label_113 +lw $t1, 1228($sp) +sw $t1, 1136($sp) +la $t0, s_40 +sw $t0, 1144($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 1 sw $t1, 0($t0) -la $t1, Int_name +la $t1, String_name sw $t1, 4($t0) li $t1, 5 sw $t1, 8($t0) -la $t1, Int_methods +la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1044($sp) -li $t0, 0 -sw $t0, 1048($sp) +sw $t0, 1148($sp) move $t0, $sp -lw $t1, 1048($t0) +lw $t1, 1144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1044($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 1052($sp) -lw $t1, 1044($sp) -sw $t1, 1012($sp) -b label_109 -label_111: -blt $t1 7 label_112 -bgt $t1 7 label_112 -lw $t1, 1132($sp) -sw $t1, 1056($sp) -move $t0, $sp -lw $t1, 1056($t0) +lw $t1, 1148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1056($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1064($sp) +jal String_init +sw $a1, 1152($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 1156($sp) move $t0, $sp -lw $t1, 1064($t0) +lw $t1, 1148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1056($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1056($t0) +lw $t1, 1156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) -lw $t3, 40($t2) +lw $t3, 12($t2) jal $t3 -sw $a1, 1060($sp) -lw $t0, 1140($sp) -lw $t1, 1060($sp) -sw $t1, 20($t0) -lw $t1, 1060($sp) -sw $t1, 1012($sp) -b label_109 -label_112: -blt $t1 5 label_113 -bgt $t1 5 label_113 -lw $t1, 1132($sp) -sw $t1, 1072($sp) +sw $a1, 1140($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 1164($sp) move $t0, $sp -lw $t1, 1072($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1072($t0) +lw $t1, 1164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) -lw $t3, 12($t2) +lw $t3, 0($t2) jal $t3 -sw $a1, 1080($sp) +sw $a1, 1160($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 2 +sw $t1, 0($t0) +la $t1, Int_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Int_methods +sw $t1, 12($t0) +sw $t0, 1168($sp) +li $t0, 0 +sw $t0, 1172($sp) move $t0, $sp -lw $t1, 1080($t0) +lw $t1, 1172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1072($t0) +lw $t1, 1168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1072($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 1076($sp) -lw $t0, 1140($sp) -lw $t1, 1076($sp) -sw $t1, 20($t0) -lw $t1, 1076($sp) -sw $t1, 1012($sp) +jal Int_init +sw $a1, 1176($sp) +lw $t1, 1168($sp) +sw $t1, 1096($sp) b label_109 label_113: b case_no_match_error label_109: -lw $t1, 1012($sp) -sw $t1, 152($sp) +lw $t1, 1096($sp) +sw $t1, 180($sp) label_108: -lw $t1, 152($sp) -sw $t1, 112($sp) +lw $t1, 180($sp) +sw $t1, 140($sp) b label_114 label_88: li $a0, 20 @@ -9956,7 +11211,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A_name sw $t1, 4($t0) @@ -9964,47 +11219,61 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 1092($sp) +sw $t0, 1184($sp) move $t0, $sp -lw $t1, 1092($t0) +lw $t1, 1184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 1096($sp) +sw $a1, 1188($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 1196($sp) move $t0, $sp -lw $t1, 1140($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1140($t0) +lw $t1, 1196($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 1100($sp) +sw $a1, 1192($sp) move $t0, $sp -lw $t1, 1100($t0) +lw $t1, 1192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1092($t0) +lw $t1, 1184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1092($t0) +lw $t1, 1184($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 1088($sp) -lw $t0, 1140($sp) -lw $t1, 1088($sp) +sw $a1, 1180($sp) +lw $t0, 1236($sp) +lw $t1, 1180($sp) sw $t1, 24($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 7 sw $t1, 0($t0) la $t1, B_name sw $t1, 4($t0) @@ -10012,67 +11281,67 @@ li $t1, 5 sw $t1, 8($t0) la $t1, B_methods sw $t1, 12($t0) -sw $t0, 1112($sp) +sw $t0, 1208($sp) move $t0, $sp -lw $t1, 1112($t0) +lw $t1, 1208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal B_init -sw $a1, 1116($sp) -lw $t0, 1140($sp) +sw $a1, 1212($sp) +lw $t0, 1236($sp) lw $t1, 24($t0) -sw $t1, 1124($sp) +sw $t1, 1220($sp) move $t0, $sp -lw $t1, 1124($t0) +lw $t1, 1220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1124($t0) +lw $t1, 1220($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1120($sp) -lw $t0, 1140($sp) +sw $a1, 1216($sp) +lw $t0, 1236($sp) lw $t1, 20($t0) -sw $t1, 1132($sp) +sw $t1, 1228($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1132($t0) +lw $t1, 1228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1128($sp) +sw $a1, 1224($sp) move $t0, $sp -lw $t1, 1120($t0) +lw $t1, 1216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1128($t0) +lw $t1, 1224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1112($t0) +lw $t1, 1208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1112($t0) +lw $t1, 1208($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 1108($sp) -lw $t0, 1140($sp) -lw $t1, 1108($sp) +sw $a1, 1204($sp) +lw $t0, 1236($sp) +lw $t1, 1204($sp) sw $t1, 20($t0) -lw $t1, 1108($sp) -sw $t1, 112($sp) +lw $t1, 1204($sp) +sw $t1, 140($sp) label_114: b label_83 label_85: lw $a1, 16($sp) lw $ra, 0($sp) -addi $sp, $sp, 1144 +addi $sp, $sp, 1240 jr $ra \ No newline at end of file diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index e8bd3998..fa631b78 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -125,7 +125,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 5 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) @@ -195,7 +195,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -311,7 +311,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -345,7 +345,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -398,7 +398,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -480,7 +480,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -550,7 +550,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -639,7 +639,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra A2I.c2i: -addi $sp, $sp, -496 +addi $sp, $sp, -500 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -649,7 +649,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -671,7 +671,7 @@ move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -709,7 +709,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -731,7 +731,7 @@ move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -769,7 +769,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -791,7 +791,7 @@ move $t0, $sp lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -829,7 +829,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -851,7 +851,7 @@ move $t0, $sp lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -889,7 +889,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -911,7 +911,7 @@ move $t0, $sp lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -949,7 +949,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -971,7 +971,7 @@ move $t0, $sp lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1009,7 +1009,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1031,7 +1031,7 @@ move $t0, $sp lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1069,7 +1069,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1091,7 +1091,7 @@ move $t0, $sp lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1129,7 +1129,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1151,7 +1151,7 @@ move $t0, $sp lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1189,7 +1189,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1211,7 +1211,7 @@ move $t0, $sp lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1242,11 +1242,25 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_10 +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 368($sp) move $t0, $sp -lw $t1, 500($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 500($t0) +lw $t1, 368($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1258,7 +1272,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1266,19 +1280,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 368($sp) -li $t0, 0 sw $t0, 372($sp) +li $t0, 0 +sw $t0, 376($sp) move $t0, $sp -lw $t1, 372($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 376($sp) -lw $t1, 368($sp) +sw $a1, 380($sp) +lw $t1, 372($sp) sw $t1, 328($sp) b label_11 label_10: @@ -1287,7 +1301,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1295,19 +1309,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 380($sp) -li $t0, 9 sw $t0, 384($sp) +li $t0, 9 +sw $t0, 388($sp) move $t0, $sp -lw $t1, 384($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 380($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 388($sp) -lw $t1, 380($sp) +sw $a1, 392($sp) +lw $t1, 384($sp) sw $t1, 328($sp) label_11: lw $t1, 328($sp) @@ -1319,7 +1333,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1327,19 +1341,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 392($sp) -li $t0, 8 sw $t0, 396($sp) +li $t0, 8 +sw $t0, 400($sp) move $t0, $sp -lw $t1, 396($t0) +lw $t1, 400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 392($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 400($sp) -lw $t1, 392($sp) +sw $a1, 404($sp) +lw $t1, 396($sp) sw $t1, 292($sp) label_12: lw $t1, 292($sp) @@ -1351,7 +1365,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1359,19 +1373,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 404($sp) -li $t0, 7 sw $t0, 408($sp) +li $t0, 7 +sw $t0, 412($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 404($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 412($sp) -lw $t1, 404($sp) +sw $a1, 416($sp) +lw $t1, 408($sp) sw $t1, 256($sp) label_13: lw $t1, 256($sp) @@ -1383,7 +1397,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1391,19 +1405,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 416($sp) -li $t0, 6 sw $t0, 420($sp) +li $t0, 6 +sw $t0, 424($sp) move $t0, $sp -lw $t1, 420($t0) +lw $t1, 424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 416($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 424($sp) -lw $t1, 416($sp) +sw $a1, 428($sp) +lw $t1, 420($sp) sw $t1, 220($sp) label_14: lw $t1, 220($sp) @@ -1415,7 +1429,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1423,19 +1437,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 428($sp) -li $t0, 5 sw $t0, 432($sp) +li $t0, 5 +sw $t0, 436($sp) move $t0, $sp -lw $t1, 432($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 428($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 436($sp) -lw $t1, 428($sp) +sw $a1, 440($sp) +lw $t1, 432($sp) sw $t1, 184($sp) label_15: lw $t1, 184($sp) @@ -1447,7 +1461,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1455,19 +1469,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 440($sp) -li $t0, 4 sw $t0, 444($sp) +li $t0, 4 +sw $t0, 448($sp) move $t0, $sp -lw $t1, 444($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 440($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 448($sp) -lw $t1, 440($sp) +sw $a1, 452($sp) +lw $t1, 444($sp) sw $t1, 148($sp) label_16: lw $t1, 148($sp) @@ -1479,7 +1493,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1487,19 +1501,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 452($sp) -li $t0, 3 sw $t0, 456($sp) +li $t0, 3 +sw $t0, 460($sp) move $t0, $sp -lw $t1, 456($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 452($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 460($sp) -lw $t1, 452($sp) +sw $a1, 464($sp) +lw $t1, 456($sp) sw $t1, 112($sp) label_17: lw $t1, 112($sp) @@ -1511,7 +1525,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1519,19 +1533,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 464($sp) -li $t0, 2 sw $t0, 468($sp) +li $t0, 2 +sw $t0, 472($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 464($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 472($sp) -lw $t1, 464($sp) +sw $a1, 476($sp) +lw $t1, 468($sp) sw $t1, 76($sp) label_18: lw $t1, 76($sp) @@ -1543,7 +1557,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1551,19 +1565,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 476($sp) -li $t0, 1 sw $t0, 480($sp) +li $t0, 1 +sw $t0, 484($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 476($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 484($sp) -lw $t1, 476($sp) +sw $a1, 488($sp) +lw $t1, 480($sp) sw $t1, 40($sp) label_19: lw $t1, 40($sp) @@ -1575,7 +1589,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1583,27 +1597,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 488($sp) -li $t0, 0 sw $t0, 492($sp) +li $t0, 0 +sw $t0, 496($sp) move $t0, $sp -lw $t1, 492($t0) +lw $t1, 496($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 488($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 496($sp) -lw $t1, 488($sp) +sw $a1, 500($sp) +lw $t1, 492($sp) sw $t1, 4($sp) label_20: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 508 +addi $sp, $sp, 512 jr $ra A2I.i2c: -addi $sp, $sp, -496 +addi $sp, $sp, -500 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -1611,7 +1625,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1631,7 +1645,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -1672,7 +1686,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1692,7 +1706,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 68($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $t0, 60($sp) @@ -1733,7 +1747,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1753,7 +1767,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 104($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 88($sp) lw $t0, 96($sp) @@ -1794,7 +1808,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1814,7 +1828,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 124($sp) lw $t0, 132($sp) @@ -1855,7 +1869,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1875,7 +1889,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 176($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 160($sp) lw $t0, 168($sp) @@ -1916,7 +1930,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1936,7 +1950,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 212($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 196($sp) lw $t0, 204($sp) @@ -1977,7 +1991,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1997,7 +2011,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 248($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 232($sp) lw $t0, 240($sp) @@ -2038,7 +2052,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2058,7 +2072,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 284($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 268($sp) lw $t0, 276($sp) @@ -2099,7 +2113,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2119,7 +2133,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 320($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 304($sp) lw $t0, 312($sp) @@ -2160,7 +2174,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2180,7 +2194,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 356($sp) -lw $t0, 504($sp) +lw $t0, 508($sp) lw $t1, 16($t0) sw $t1, 340($sp) lw $t0, 348($sp) @@ -2216,11 +2230,25 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_30 +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 368($sp) move $t0, $sp -lw $t1, 500($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 500($t0) +lw $t1, 368($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2228,13 +2256,13 @@ lw $t3, 0($t2) jal $t3 sw $a1, 364($sp) la $t0, empty_str -sw $t0, 368($sp) +sw $t0, 372($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2242,28 +2270,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 372($sp) +sw $t0, 376($sp) move $t0, $sp -lw $t1, 368($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 372($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 376($sp) -lw $t1, 372($sp) +sw $a1, 380($sp) +lw $t1, 376($sp) sw $t1, 328($sp) b label_31 label_30: la $t0, s_12 -sw $t0, 380($sp) +sw $t0, 384($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2271,17 +2299,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 384($sp) +sw $t0, 388($sp) move $t0, $sp -lw $t1, 380($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 388($sp) -lw $t1, 384($sp) +sw $a1, 392($sp) +lw $t1, 388($sp) sw $t1, 328($sp) label_31: lw $t1, 328($sp) @@ -2289,13 +2317,13 @@ sw $t1, 292($sp) b label_32 label_29: la $t0, s_11 -sw $t0, 392($sp) +sw $t0, 396($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2303,17 +2331,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 396($sp) +sw $t0, 400($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 396($t0) +lw $t1, 400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 400($sp) -lw $t1, 396($sp) +sw $a1, 404($sp) +lw $t1, 400($sp) sw $t1, 292($sp) label_32: lw $t1, 292($sp) @@ -2321,13 +2349,13 @@ sw $t1, 256($sp) b label_33 label_28: la $t0, s_10 -sw $t0, 404($sp) +sw $t0, 408($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2335,17 +2363,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 408($sp) +sw $t0, 412($sp) move $t0, $sp -lw $t1, 404($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 412($sp) -lw $t1, 408($sp) +sw $a1, 416($sp) +lw $t1, 412($sp) sw $t1, 256($sp) label_33: lw $t1, 256($sp) @@ -2353,13 +2381,13 @@ sw $t1, 220($sp) b label_34 label_27: la $t0, s_9 -sw $t0, 416($sp) +sw $t0, 420($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2367,17 +2395,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 420($sp) +sw $t0, 424($sp) move $t0, $sp -lw $t1, 416($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 420($t0) +lw $t1, 424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 424($sp) -lw $t1, 420($sp) +sw $a1, 428($sp) +lw $t1, 424($sp) sw $t1, 220($sp) label_34: lw $t1, 220($sp) @@ -2385,13 +2413,13 @@ sw $t1, 184($sp) b label_35 label_26: la $t0, s_8 -sw $t0, 428($sp) +sw $t0, 432($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2399,17 +2427,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 432($sp) +sw $t0, 436($sp) move $t0, $sp -lw $t1, 428($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 432($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 436($sp) -lw $t1, 432($sp) +sw $a1, 440($sp) +lw $t1, 436($sp) sw $t1, 184($sp) label_35: lw $t1, 184($sp) @@ -2417,13 +2445,13 @@ sw $t1, 148($sp) b label_36 label_25: la $t0, s_7 -sw $t0, 440($sp) +sw $t0, 444($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2431,17 +2459,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 444($sp) +sw $t0, 448($sp) move $t0, $sp -lw $t1, 440($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 444($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 448($sp) -lw $t1, 444($sp) +sw $a1, 452($sp) +lw $t1, 448($sp) sw $t1, 148($sp) label_36: lw $t1, 148($sp) @@ -2449,13 +2477,13 @@ sw $t1, 112($sp) b label_37 label_24: la $t0, s_6 -sw $t0, 452($sp) +sw $t0, 456($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2463,17 +2491,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 456($sp) +sw $t0, 460($sp) move $t0, $sp -lw $t1, 452($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 460($sp) -lw $t1, 456($sp) +sw $a1, 464($sp) +lw $t1, 460($sp) sw $t1, 112($sp) label_37: lw $t1, 112($sp) @@ -2481,13 +2509,13 @@ sw $t1, 76($sp) b label_38 label_23: la $t0, s_5 -sw $t0, 464($sp) +sw $t0, 468($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2495,17 +2523,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 468($sp) +sw $t0, 472($sp) move $t0, $sp -lw $t1, 464($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 472($sp) -lw $t1, 468($sp) +sw $a1, 476($sp) +lw $t1, 472($sp) sw $t1, 76($sp) label_38: lw $t1, 76($sp) @@ -2513,13 +2541,13 @@ sw $t1, 40($sp) b label_39 label_22: la $t0, s_4 -sw $t0, 476($sp) +sw $t0, 480($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2527,17 +2555,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 480($sp) +sw $t0, 484($sp) move $t0, $sp -lw $t1, 476($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 480($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 484($sp) -lw $t1, 480($sp) +sw $a1, 488($sp) +lw $t1, 484($sp) sw $t1, 40($sp) label_39: lw $t1, 40($sp) @@ -2545,13 +2573,13 @@ sw $t1, 4($sp) b label_40 label_21: la $t0, s_3 -sw $t0, 488($sp) +sw $t0, 492($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2559,32 +2587,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 492($sp) +sw $t0, 496($sp) move $t0, $sp -lw $t1, 488($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 496($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 496($sp) -lw $t1, 492($sp) +sw $a1, 500($sp) +lw $t1, 496($sp) sw $t1, 4($sp) label_40: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 508 +addi $sp, $sp, 512 jr $ra A2I.a2i: -addi $sp, $sp, -312 +addi $sp, $sp, -324 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2596,7 +2624,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2657,7 +2685,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2682,7 +2710,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2709,10 +2737,10 @@ sw $t1, 0($sp) lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2726,7 +2754,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2784,7 +2812,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2809,7 +2837,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2836,10 +2864,10 @@ sw $t1, 0($sp) lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2853,7 +2881,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2906,14 +2934,28 @@ sw $a1, 168($sp) lw $t0, 112($sp) lw $a0, 16($t0) bnez $a0, label_43 -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 332($t0) +addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2925,22 +2967,22 @@ sw $t1, 108($sp) b label_44 label_43: move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 200($sp) +sw $a1, 204($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2948,34 +2990,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 204($sp) -li $t0, 1 sw $t0, 208($sp) +li $t0, 1 +sw $t0, 212($sp) move $t0, $sp -lw $t1, 208($t0) +lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 204($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 212($sp) -lw $t0, 200($sp) -lw $t1, 16($t0) -sw $t1, 192($sp) +sw $a1, 216($sp) lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 196($sp) -lw $a0, 192($sp) -lw $t1, 196($sp) +lw $t0, 208($sp) +lw $t1, 16($t0) +sw $t1, 200($sp) +lw $a0, 196($sp) +lw $t1, 200($sp) sub $a0, $a0, $t1 -sw $a0, 188($sp) +sw $a0, 192($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2983,22 +3025,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 184($sp) +sw $t0, 188($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 216($sp) +sw $a1, 220($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3006,50 +3048,64 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 220($sp) -li $t0, 1 sw $t0, 224($sp) +li $t0, 1 +sw $t0, 228($sp) move $t0, $sp -lw $t1, 224($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 228($sp) +sw $a1, 232($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 180($sp) +sw $a1, 184($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 180($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 236($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 176($sp) -lw $t1, 176($sp) +sw $a1, 180($sp) +lw $t1, 180($sp) sw $t1, 108($sp) label_44: lw $t1, 108($sp) @@ -3057,22 +3113,22 @@ sw $t1, 44($sp) b label_45 label_42: move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 268($sp) +sw $a1, 276($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3080,34 +3136,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 272($sp) +sw $t0, 280($sp) li $t0, 1 -sw $t0, 276($sp) +sw $t0, 284($sp) move $t0, $sp -lw $t1, 276($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 272($t0) +lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 280($sp) -lw $t0, 268($sp) +sw $a1, 288($sp) +lw $t0, 276($sp) lw $t1, 16($t0) -sw $t1, 260($sp) -lw $t0, 272($sp) +sw $t1, 268($sp) +lw $t0, 280($sp) lw $t1, 16($t0) -sw $t1, 264($sp) -lw $a0, 260($sp) -lw $t1, 264($sp) +sw $t1, 272($sp) +lw $a0, 268($sp) +lw $t1, 272($sp) sub $a0, $a0, $t1 -sw $a0, 256($sp) +sw $a0, 264($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3115,22 +3171,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 252($sp) +sw $t0, 260($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 284($sp) +sw $a1, 292($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3138,61 +3194,75 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 296($sp) li $t0, 1 -sw $t0, 292($sp) +sw $t0, 300($sp) move $t0, $sp -lw $t1, 292($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 296($sp) +sw $a1, 304($sp) move $t0, $sp -lw $t1, 252($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 248($sp) +sw $a1, 256($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 308($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 308($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 244($sp) -lw $t0, 244($sp) +sw $a1, 252($sp) +lw $t0, 252($sp) lw $t1, 16($t0) -sw $t1, 240($sp) -lw $t1, 240($sp) +sw $t1, 248($sp) +lw $t1, 248($sp) neg $a0, $t1 -sw $a0, 236($sp) +sw $a0, 244($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3200,17 +3270,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 232($sp) +sw $t0, 240($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 232($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 300($sp) -lw $t1, 232($sp) +sw $a1, 312($sp) +lw $t1, 240($sp) sw $t1, 44($sp) label_45: lw $t1, 44($sp) @@ -3222,7 +3292,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3230,27 +3300,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 304($sp) +sw $t0, 316($sp) li $t0, 0 -sw $t0, 308($sp) +sw $t0, 320($sp) move $t0, $sp -lw $t1, 308($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 304($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 312($sp) -lw $t1, 304($sp) +sw $a1, 324($sp) +lw $t1, 316($sp) sw $t1, 4($sp) label_46: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 324 +addi $sp, $sp, 336 jr $ra A2I.a2i_aux: -addi $sp, $sp, -188 +addi $sp, $sp, -192 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -3258,7 +3328,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3281,10 +3351,10 @@ sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) move $t0, $sp -lw $t1, 196($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 200($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3298,7 +3368,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3364,7 +3434,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3399,7 +3469,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3422,7 +3492,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3449,24 +3519,38 @@ sw $t1, 0($sp) lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 200($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 120($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 136($sp) move $t0, $sp lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 136($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3488,7 +3572,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3505,7 +3589,7 @@ lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 136($sp) +sw $a1, 140($sp) lw $t1, 68($sp) sw $t1, 16($sp) li $a0, 20 @@ -3513,7 +3597,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3521,34 +3605,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 160($sp) -li $t0, 1 sw $t0, 164($sp) +li $t0, 1 +sw $t0, 168($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 168($sp) +sw $a1, 172($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 152($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) sw $t1, 156($sp) -lw $a0, 152($sp) -lw $t1, 156($sp) +lw $t0, 164($sp) +lw $t1, 16($t0) +sw $t1, 160($sp) +lw $a0, 156($sp) +lw $t1, 160($sp) add $a0, $a0, $t1 -sw $a0, 148($sp) +sw $a0, 152($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3556,32 +3640,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 144($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 172($sp) -lw $t1, 144($sp) +sw $a1, 176($sp) +lw $t1, 148($sp) sw $t1, 40($sp) b label_47 label_49: lw $t1, 44($sp) -sw $t1, 180($sp) -lw $t1, 180($sp) sw $t1, 184($sp) -lw $t1, 16($sp) +lw $t1, 184($sp) sw $t1, 188($sp) -lw $a1, 188($sp) +lw $t1, 16($sp) +sw $t1, 192($sp) +lw $a1, 192($sp) lw $ra, 0($sp) -addi $sp, $sp, 200 +addi $sp, $sp, 204 jr $ra A2I.i2a: -addi $sp, $sp, -156 +addi $sp, $sp, -164 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -3589,7 +3673,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3609,7 +3693,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 164($sp) +lw $t0, 172($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -3650,7 +3734,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3673,7 +3757,7 @@ sw $a1, 68($sp) lw $t0, 60($sp) lw $t1, 16($t0) sw $t1, 52($sp) -lw $t0, 164($sp) +lw $t0, 172($sp) lw $t1, 16($t0) sw $t1, 56($sp) lw $a0, 52($sp) @@ -3713,7 +3797,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3736,7 +3820,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3767,7 +3851,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3785,7 +3869,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 136($sp) -lw $t0, 164($sp) +lw $t0, 172($sp) lw $t1, 16($t0) sw $t1, 104($sp) lw $t0, 112($sp) @@ -3800,7 +3884,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3818,14 +3902,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 144($sp) move $t0, $sp lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 144($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3850,21 +3948,35 @@ lw $t1, 76($sp) sw $t1, 40($sp) b label_52 label_51: +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 144($sp) -lw $t1, 144($sp) +sw $a1, 148($sp) +lw $t1, 148($sp) sw $t1, 40($sp) label_52: lw $t1, 40($sp) @@ -3872,13 +3984,13 @@ sw $t1, 4($sp) b label_53 label_50: la $t0, s_3 -sw $t0, 148($sp) +sw $t0, 156($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3886,25 +3998,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 152($sp) +sw $t0, 160($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 156($sp) -lw $t1, 152($sp) +sw $a1, 164($sp) +lw $t1, 160($sp) sw $t1, 4($sp) label_53: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 168 +addi $sp, $sp, 176 jr $ra A2I.i2a_aux: -addi $sp, $sp, -152 +addi $sp, $sp, -160 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -3912,7 +4024,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3932,7 +4044,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 160($sp) +lw $t0, 168($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -3973,7 +4085,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3993,7 +4105,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 64($sp) -lw $t0, 160($sp) +lw $t0, 168($sp) lw $t1, 16($t0) sw $t1, 48($sp) lw $t0, 56($sp) @@ -4009,7 +4121,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4029,14 +4141,28 @@ jal Int_init sw $a1, 68($sp) lw $t1, 40($sp) sw $t1, 72($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 84($sp) move $t0, $sp lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4048,7 +4174,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4056,34 +4182,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 120($sp) -li $t0, 10 sw $t0, 124($sp) +li $t0, 10 +sw $t0, 128($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 128($sp) +sw $a1, 132($sp) lw $t0, 72($sp) lw $t1, 16($t0) -sw $t1, 112($sp) -lw $t0, 120($sp) -lw $t1, 16($t0) sw $t1, 116($sp) -lw $a0, 112($sp) -lw $t1, 116($sp) +lw $t0, 124($sp) +lw $t1, 16($t0) +sw $t1, 120($sp) +lw $a0, 116($sp) +lw $t1, 120($sp) mul $a0, $a0, $t1 -sw $a0, 108($sp) +sw $a0, 112($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4091,32 +4217,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 132($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $t0, 104($sp) +sw $a1, 136($sp) +lw $t0, 168($sp) lw $t1, 16($t0) sw $t1, 100($sp) -lw $a0, 96($sp) -lw $t1, 100($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +lw $a0, 100($sp) +lw $t1, 104($sp) sub $a0, $a0, $t1 -sw $a0, 92($sp) +sw $a0, 96($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4124,32 +4250,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 136($sp) +sw $a1, 140($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, A2I_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, A2I_methods +sw $t1, 12($t0) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 144($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 84($sp) +sw $a1, 88($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 80($t0) @@ -4163,19 +4303,19 @@ lw $t3, 16($t2) jal $t3 sw $a1, 76($sp) lw $t1, 76($sp) -sw $t1, 140($sp) -lw $t1, 140($sp) +sw $t1, 148($sp) +lw $t1, 148($sp) sw $t1, 4($sp) b label_55 label_54: la $t0, empty_str -sw $t0, 144($sp) +sw $t0, 152($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4183,22 +4323,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 152($sp) -lw $t1, 148($sp) +sw $a1, 160($sp) +lw $t1, 156($sp) sw $t1, 4($sp) label_55: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 164 +addi $sp, $sp, 172 jr $ra Main_init: addi $sp, $sp, -4 @@ -4215,7 +4355,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -100 +addi $sp, $sp, -116 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -4223,7 +4363,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A2I_name sw $t1, 4($t0) @@ -4245,7 +4385,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4284,7 +4424,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A2I_name sw $t1, 4($t0) @@ -4304,7 +4444,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4340,14 +4480,28 @@ jal $t3 sw $a1, 32($sp) lw $t1, 32($sp) sw $t1, 56($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 64($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4355,13 +4509,13 @@ lw $t3, 16($t2) jal $t3 sw $a1, 60($sp) la $t0, s_16 -sw $t0, 68($sp) +sw $t0, 72($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4369,52 +4523,80 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 76($sp) +sw $a1, 80($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 64($sp) +sw $a1, 68($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 92($sp) move $t0, $sp lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 92($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 80($sp) +sw $a1, 88($sp) la $t0, s_17 -sw $t0, 88($sp) +sw $t0, 100($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4422,33 +4604,47 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 92($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 96($sp) +sw $a1, 108($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 112($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 112($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 84($sp) -lw $t1, 84($sp) -sw $t1, 100($sp) -lw $a1, 100($sp) +sw $a1, 96($sp) +lw $t1, 96($sp) +sw $t1, 116($sp) +lw $a1, 116($sp) lw $ra, 0($sp) -addi $sp, $sp, 108 +addi $sp, $sp, 124 jr $ra \ No newline at end of file diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index 95697240..a642a290 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -119,8 +119,8 @@ s_3: .asciiz "title: " s_4: .asciiz "\n" s_5: .asciiz "author: " s_6: .asciiz "periodical: " -s_7: .asciiz "- dynamic type was Book -\n" -s_8: .asciiz "- dynamic type was Article -\n" +s_7: .asciiz "- dynamic type was Article -\n" +s_8: .asciiz "- dynamic type was Book -\n" s_9: .asciiz "Aho, Sethi, and Ullman" s_10: .asciiz "Compilers, Principles, Techniques, and Tools" s_11: .asciiz "PC Magazine" @@ -172,7 +172,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 10 +li $t1, 6 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) @@ -242,7 +242,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -358,7 +358,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -392,7 +392,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -445,7 +445,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -527,7 +527,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -597,7 +597,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -687,7 +687,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -715,7 +715,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -756,7 +756,7 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Book.print: -addi $sp, $sp, -80 +addi $sp, $sp, -88 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -766,7 +766,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -784,25 +784,39 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 24($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Book_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Book_methods +sw $t1, 12($t0) +sw $t0, 28($sp) move $t0, $sp lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 28($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 12($sp) -lw $t0, 84($sp) +lw $t0, 92($sp) lw $t1, 16($t0) -sw $t1, 28($sp) +sw $t1, 32($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -816,13 +830,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 8($sp) la $t0, s_4 -sw $t0, 32($sp) +sw $t0, 36($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -830,18 +844,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 40($sp) +sw $a1, 44($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -855,13 +869,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) la $t0, s_5 -sw $t0, 56($sp) +sw $t0, 60($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -869,55 +883,69 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 60($sp) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 64($sp) +sw $a1, 68($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Book_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Book_methods +sw $t1, 12($t0) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 72($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 52($sp) -lw $t0, 84($sp) +sw $a1, 56($sp) +lw $t0, 92($sp) lw $t1, 20($t0) -sw $t1, 68($sp) +sw $t1, 76($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 56($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 48($sp) +sw $a1, 52($sp) la $t0, s_4 -sw $t0, 72($sp) +sw $t0, 80($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -925,33 +953,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 76($sp) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 80($sp) +sw $a1, 88($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 44($sp) -lw $a1, 84($sp) +sw $a1, 48($sp) +lw $a1, 92($sp) lw $ra, 0($sp) -addi $sp, $sp, 88 +addi $sp, $sp, 96 jr $ra Article_init: addi $sp, $sp, -16 @@ -969,7 +997,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -996,35 +1024,49 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Article.initArticle: -addi $sp, $sp, -8 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Article_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Article_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 12($sp) -lw $t1, 24($sp) +lw $t0, 16($sp) +lw $t1, 28($sp) sw $t1, 24($t0) -lw $a1, 12($sp) +lw $a1, 16($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 32 jr $ra Article.print: -addi $sp, $sp, -48 +addi $sp, $sp, -52 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -1042,7 +1084,7 @@ la $t1, Book_methods sw $t1, 12($t0) sw $t0, 8($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1059,7 +1101,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1077,25 +1119,39 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 32($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Article_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Article_methods +sw $t1, 12($t0) +sw $t0, 36($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 20($sp) -lw $t0, 52($sp) +lw $t0, 56($sp) lw $t1, 24($t0) -sw $t1, 36($sp) +sw $t1, 40($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -1109,13 +1165,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 16($sp) la $t0, s_4 -sw $t0, 40($sp) +sw $t0, 44($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1123,18 +1179,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 48($sp) +sw $a1, 52($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) @@ -1147,9 +1203,9 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 12($sp) -lw $a1, 52($sp) +lw $a1, 56($sp) lw $ra, 0($sp) -addi $sp, $sp, 56 +addi $sp, $sp, 60 jr $ra BookList_init: addi $sp, $sp, -4 @@ -1166,14 +1222,28 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra BookList.isNil: -addi $sp, $sp, -16 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, BookList_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, BookList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1193,21 +1263,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 8($sp) -li $t0, 1 sw $t0, 12($sp) +li $t0, 1 +sw $t0, 16($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 16($sp) -lw $a1, 8($sp) +sw $a1, 20($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 28 jr $ra BookList.cons: addi $sp, $sp, -20 @@ -1218,7 +1288,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 7 sw $t1, 0($t0) la $t1, Cons_name sw $t1, 4($t0) @@ -1259,14 +1329,28 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra BookList.car: -addi $sp, $sp, -12 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, BookList_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, BookList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1286,26 +1370,40 @@ li $t1, 6 sw $t1, 8($t0) la $t1, Book_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Book_init -sw $a1, 12($sp) -lw $a1, 8($sp) +sw $a1, 16($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 24 jr $ra BookList.cdr: -addi $sp, $sp, -12 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, BookList_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, BookList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1317,7 +1415,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 6 sw $t1, 0($t0) la $t1, BookList_name sw $t1, 4($t0) @@ -1325,23 +1423,37 @@ li $t1, 4 sw $t1, 8($t0) la $t1, BookList_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal BookList_init -sw $a1, 12($sp) -lw $a1, 8($sp) +sw $a1, 16($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 24 jr $ra BookList.print_list: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, BookList_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, BookList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1353,7 +1465,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 16 jr $ra Cons_init: addi $sp, $sp, -4 @@ -1445,10 +1557,10 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Cons.print_list: -addi $sp, $sp, -60 +addi $sp, $sp, -68 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 64($sp) +lw $t0, 72($sp) lw $t1, 16($t0) sw $t1, 12($sp) move $t0, $sp @@ -1468,8 +1580,8 @@ la $a0, void bne $t1 $a0 label_2 b case_void_error label_2: -blt $t1 5 label_3 -bgt $t1 5 label_3 +blt $t1 6 label_3 +bgt $t1 6 label_3 lw $t1, 8($sp) sw $t1, 16($sp) la $t0, s_7 @@ -1479,7 +1591,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1497,14 +1609,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 32($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 36($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1515,18 +1641,18 @@ lw $t1, 20($sp) sw $t1, 4($sp) b label_1 label_3: -blt $t1 6 label_4 +blt $t1 5 label_4 bgt $t1 6 label_4 lw $t1, 8($sp) -sw $t1, 36($sp) +sw $t1, 40($sp) la $t0, s_8 -sw $t0, 44($sp) +sw $t0, 48($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1534,53 +1660,67 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 52($sp) +sw $a1, 56($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 60($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 40($sp) -lw $t1, 40($sp) +sw $a1, 44($sp) +lw $t1, 44($sp) sw $t1, 4($sp) b label_1 label_4: b case_no_match_error label_1: -lw $t0, 64($sp) +lw $t0, 72($sp) lw $t1, 20($t0) -sw $t1, 60($sp) +sw $t1, 68($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 68($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 56($sp) -lw $a1, 56($sp) +sw $a1, 64($sp) +lw $a1, 64($sp) lw $ra, 0($sp) -addi $sp, $sp, 68 +addi $sp, $sp, 76 jr $ra Nil_init: addi $sp, $sp, -4 @@ -1710,7 +1850,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1735,7 +1875,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1799,7 +1939,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1824,7 +1964,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1849,7 +1989,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1894,7 +2034,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 9 +li $t1, 8 sw $t1, 0($t0) la $t1, Nil_name sw $t1, 4($t0) diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index d2ffb85a..bb18192b 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -186,7 +186,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -302,7 +302,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -336,7 +336,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -389,7 +389,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -471,7 +471,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -541,7 +541,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -631,7 +631,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -669,10 +669,10 @@ lw $ra, 0($sp) addi $sp, $sp, 16 jr $ra CellularAutomaton.print: -addi $sp, $sp, -24 +addi $sp, $sp, -28 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 28($sp) +lw $t0, 32($sp) lw $t1, 16($t0) sw $t1, 12($sp) la $t0, s_3 @@ -682,7 +682,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -714,11 +714,25 @@ lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 sw $a1, 8($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 28($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 28($t0) @@ -728,9 +742,9 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) -lw $a1, 28($sp) +lw $a1, 32($sp) lw $ra, 0($sp) -addi $sp, $sp, 32 +addi $sp, $sp, 36 jr $ra CellularAutomaton.num_cells: addi $sp, $sp, -8 @@ -766,7 +780,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -808,7 +822,7 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra CellularAutomaton.cell_left_neighbor: -addi $sp, $sp, -112 +addi $sp, $sp, -124 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -816,7 +830,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -836,7 +850,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 120($sp) +lw $t0, 132($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -877,7 +891,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -897,7 +911,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 68($sp) -lw $t0, 120($sp) +lw $t0, 132($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $t0, 60($sp) @@ -912,7 +926,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -930,14 +944,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 72($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 76($sp) move $t0, $sp lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -948,23 +976,37 @@ lw $t1, 40($sp) sw $t1, 4($sp) b label_2 label_1: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 96($sp) +sw $a1, 100($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -972,34 +1014,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 108($sp) li $t0, 1 -sw $t0, 104($sp) +sw $t0, 112($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 108($sp) -lw $t0, 96($sp) -lw $t1, 16($t0) -sw $t1, 88($sp) +sw $a1, 116($sp) lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 92($sp) -lw $a0, 88($sp) -lw $t1, 92($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) sub $a0, $a0, $t1 -sw $a0, 84($sp) +sw $a0, 88($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1007,46 +1049,74 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 112($sp) +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 76($sp) -lw $t1, 76($sp) +sw $a1, 80($sp) +lw $t1, 80($sp) sw $t1, 4($sp) label_2: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 124 +addi $sp, $sp, 136 jr $ra CellularAutomaton.cell_right_neighbor: -addi $sp, $sp, -112 +addi $sp, $sp, -124 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 44($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1058,7 +1128,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1066,22 +1136,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 44($sp) -li $t0, 1 sw $t0, 48($sp) +li $t0, 1 +sw $t0, 52($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 52($sp) +sw $a1, 56($sp) lw $t0, 40($sp) lw $t1, 16($t0) sw $t1, 32($sp) -lw $t0, 44($sp) +lw $t0, 48($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $a0, 32($sp) @@ -1093,7 +1163,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1110,8 +1180,8 @@ lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 56($sp) -lw $t0, 120($sp) +sw $a1, 60($sp) +lw $t0, 132($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -1143,7 +1213,7 @@ lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 60($sp) +sw $a1, 64($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_3 @@ -1152,7 +1222,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1160,34 +1230,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 84($sp) -li $t0, 1 sw $t0, 88($sp) +li $t0, 1 +sw $t0, 92($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 92($sp) -lw $t0, 120($sp) -lw $t1, 16($t0) -sw $t1, 76($sp) -lw $t0, 84($sp) +sw $a1, 96($sp) +lw $t0, 132($sp) lw $t1, 16($t0) sw $t1, 80($sp) -lw $a0, 76($sp) -lw $t1, 80($sp) +lw $t0, 88($sp) +lw $t1, 16($t0) +sw $t1, 84($sp) +lw $a0, 80($sp) +lw $t1, 84($sp) add $a0, $a0, $t1 -sw $a0, 72($sp) +sw $a0, 76($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1195,31 +1265,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 96($sp) +sw $a1, 100($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 64($sp) -lw $t1, 64($sp) +sw $a1, 68($sp) +lw $t1, 68($sp) sw $t1, 4($sp) b label_4 label_3: @@ -1228,7 +1312,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1236,51 +1320,79 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 112($sp) li $t0, 0 -sw $t0, 108($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 112($sp) +sw $a1, 120($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 100($sp) -lw $t1, 100($sp) +sw $a1, 108($sp) +lw $t1, 108($sp) sw $t1, 4($sp) label_4: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 124 +addi $sp, $sp, 136 jr $ra CellularAutomaton.cell_at_next_evolution: -addi $sp, $sp, -292 +addi $sp, $sp, -304 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 80($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1288,13 +1400,13 @@ lw $t3, 40($t2) jal $t3 sw $a1, 76($sp) la $t0, s_4 -sw $t0, 80($sp) +sw $t0, 84($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1302,18 +1414,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 88($sp) +sw $a1, 92($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 76($t0) @@ -1343,7 +1455,7 @@ lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 92($sp) +sw $a1, 96($sp) lw $t0, 60($sp) lw $a0, 16($t0) bnez $a0, label_5 @@ -1352,7 +1464,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1360,19 +1472,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 96($sp) -li $t0, 0 sw $t0, 100($sp) +li $t0, 0 +sw $t0, 104($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 104($sp) -lw $t1, 96($sp) +sw $a1, 108($sp) +lw $t1, 100($sp) sw $t1, 56($sp) b label_6 label_5: @@ -1381,7 +1493,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1389,43 +1501,57 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 108($sp) -li $t0, 1 sw $t0, 112($sp) +li $t0, 1 +sw $t0, 116($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 116($sp) -lw $t1, 108($sp) +sw $a1, 120($sp) +lw $t1, 112($sp) sw $t1, 56($sp) label_6: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 148($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 140($sp) +sw $a1, 144($sp) la $t0, s_4 -sw $t0, 144($sp) +sw $t0, 152($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1433,25 +1559,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 152($sp) +sw $a1, 160($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 128($sp) +sw $a1, 132($sp) li $a0, 20 li $v0, 9 syscall @@ -1465,17 +1591,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 156($sp) -lw $t0, 124($sp) +sw $a1, 164($sp) +lw $t0, 128($sp) lw $a0, 16($t0) bnez $a0, label_7 li $a0, 20 @@ -1483,7 +1609,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1491,20 +1617,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 160($sp) +sw $t0, 168($sp) li $t0, 0 -sw $t0, 164($sp) +sw $t0, 172($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 168($sp) -lw $t1, 160($sp) -sw $t1, 120($sp) +sw $a1, 176($sp) +lw $t1, 168($sp) +sw $t1, 124($sp) b label_8 label_7: li $a0, 20 @@ -1512,7 +1638,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1520,25 +1646,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 172($sp) +sw $t0, 180($sp) li $t0, 1 -sw $t0, 176($sp) +sw $t0, 184($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 180($sp) -lw $t1, 172($sp) -sw $t1, 120($sp) +sw $a1, 188($sp) +lw $t1, 180($sp) +sw $t1, 124($sp) label_8: lw $t0, 56($sp) lw $t1, 16($t0) sw $t1, 48($sp) -lw $t0, 120($sp) +lw $t0, 124($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $a0, 48($sp) @@ -1550,7 +1676,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1567,29 +1693,43 @@ lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 184($sp) +sw $a1, 192($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 220($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 220($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 208($sp) +sw $a1, 216($sp) la $t0, s_4 -sw $t0, 212($sp) +sw $t0, 224($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1597,25 +1737,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 216($sp) +sw $t0, 228($sp) move $t0, $sp -lw $t1, 212($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 216($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 220($sp) +sw $a1, 232($sp) move $t0, $sp -lw $t1, 216($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 196($sp) +sw $a1, 204($sp) li $a0, 20 li $v0, 9 syscall @@ -1629,17 +1769,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 192($sp) +sw $t0, 200($sp) move $t0, $sp -lw $t1, 196($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 224($sp) -lw $t0, 192($sp) +sw $a1, 236($sp) +lw $t0, 200($sp) lw $a0, 16($t0) bnez $a0, label_9 li $a0, 20 @@ -1647,7 +1787,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1655,20 +1795,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 228($sp) +sw $t0, 240($sp) li $t0, 0 -sw $t0, 232($sp) +sw $t0, 244($sp) move $t0, $sp -lw $t1, 232($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 228($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 236($sp) -lw $t1, 228($sp) -sw $t1, 188($sp) +sw $a1, 248($sp) +lw $t1, 240($sp) +sw $t1, 196($sp) b label_10 label_9: li $a0, 20 @@ -1676,7 +1816,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1684,25 +1824,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 252($sp) li $t0, 1 -sw $t0, 244($sp) +sw $t0, 256($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 248($sp) -lw $t1, 240($sp) -sw $t1, 188($sp) +sw $a1, 260($sp) +lw $t1, 252($sp) +sw $t1, 196($sp) label_10: lw $t0, 40($sp) lw $t1, 16($t0) sw $t1, 32($sp) -lw $t0, 188($sp) +lw $t0, 196($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $a0, 32($sp) @@ -1714,7 +1854,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1731,13 +1871,13 @@ lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 252($sp) +sw $a1, 264($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1745,22 +1885,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 256($sp) +sw $t0, 268($sp) li $t0, 1 -sw $t0, 260($sp) +sw $t0, 272($sp) move $t0, $sp -lw $t1, 260($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 264($sp) +sw $a1, 276($sp) lw $t0, 24($sp) lw $t1, 16($t0) sw $t1, 16($sp) -lw $t0, 256($sp) +lw $t0, 268($sp) lw $t1, 16($t0) sw $t1, 20($sp) lw $a0, 16($sp) @@ -1789,18 +1929,18 @@ lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 268($sp) +sw $a1, 280($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_11 la $t0, s_5 -sw $t0, 272($sp) +sw $t0, 284($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1808,28 +1948,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 276($sp) +sw $t0, 288($sp) move $t0, $sp -lw $t1, 272($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 276($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 280($sp) -lw $t1, 276($sp) +sw $a1, 292($sp) +lw $t1, 288($sp) sw $t1, 4($sp) b label_12 label_11: la $t0, s_4 -sw $t0, 284($sp) +sw $t0, 296($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1837,25 +1977,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 300($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 292($sp) -lw $t1, 288($sp) +sw $a1, 304($sp) +lw $t1, 300($sp) sw $t1, 4($sp) label_12: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 304 +addi $sp, $sp, 316 jr $ra CellularAutomaton.evolve: -addi $sp, $sp, -128 +addi $sp, $sp, -136 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -1863,7 +2003,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1885,11 +2025,25 @@ jal Int_init sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 24($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 24($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1897,13 +2051,13 @@ lw $t3, 36($t2) jal $t3 sw $a1, 20($sp) lw $t1, 20($sp) -sw $t1, 24($sp) +sw $t1, 28($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1911,31 +2065,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 28($sp) -la $t0, empty_str sw $t0, 32($sp) +la $t0, empty_str +sw $t0, 36($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 36($sp) -lw $t1, 28($sp) -sw $t1, 40($sp) +sw $a1, 40($sp) +lw $t1, 32($sp) +sw $t1, 44($sp) label_13: lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $a0, 60($sp) +lw $t1, 64($sp) slt $a0, $a0, $t1 -sw $a0, 52($sp) +sw $a0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -1949,57 +2103,71 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 64($sp) -lw $t0, 48($sp) +sw $a1, 68($sp) +lw $t0, 52($sp) lw $a0, 16($t0) bnez $a0, label_14 b label_15 label_14: +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 80($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 80($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 52($t2) jal $t3 -sw $a1, 72($sp) +sw $a1, 76($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 44($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 68($sp) -lw $t1, 68($sp) -sw $t1, 40($sp) +sw $a1, 72($sp) +lw $t1, 72($sp) +sw $t1, 44($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2007,34 +2175,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 104($sp) li $t0, 1 -sw $t0, 100($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 104($sp) +sw $a1, 112($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 88($sp) -lw $t0, 96($sp) +sw $t1, 96($sp) +lw $t0, 104($sp) lw $t1, 16($t0) -sw $t1, 92($sp) -lw $a0, 88($sp) -lw $t1, 92($sp) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) add $a0, $a0, $t1 -sw $a0, 84($sp) +sw $a0, 92($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2042,32 +2210,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 108($sp) -lw $t1, 80($sp) +sw $a1, 116($sp) +lw $t1, 88($sp) sw $t1, 16($sp) b label_13 label_15: -lw $t0, 132($sp) -lw $t1, 40($sp) +lw $t0, 140($sp) +lw $t1, 44($sp) sw $t1, 16($t0) -lw $t1, 132($sp) -sw $t1, 120($sp) -lw $t1, 120($sp) -sw $t1, 124($sp) -lw $t1, 124($sp) +lw $t1, 140($sp) sw $t1, 128($sp) -lw $a1, 128($sp) +lw $t1, 128($sp) +sw $t1, 132($sp) +lw $t1, 132($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) lw $ra, 0($sp) -addi $sp, $sp, 136 +addi $sp, $sp, 144 jr $ra Main_init: addi $sp, $sp, -4 @@ -2117,7 +2285,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2171,7 +2339,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2199,7 +2367,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2290,7 +2458,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2325,7 +2493,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 21b447b1..a74dd64a 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -187,7 +187,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -303,7 +303,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -337,7 +337,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -390,7 +390,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -472,7 +472,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -542,7 +542,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -631,7 +631,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -112 +addi $sp, $sp, -120 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -659,7 +659,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -684,7 +684,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -797,7 +797,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -815,14 +815,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 92($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 96($sp) move $t0, $sp lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -834,13 +848,13 @@ sw $t1, 44($sp) b label_2 label_1: la $t0, s_4 -sw $t0, 100($sp) +sw $t0, 104($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -848,21 +862,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 108($sp) +sw $a1, 112($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 116($t0) @@ -871,15 +899,15 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 96($sp) -lw $t1, 96($sp) +sw $a1, 100($sp) +lw $t1, 100($sp) sw $t1, 44($sp) label_2: lw $t1, 44($sp) -sw $t1, 112($sp) -lw $a1, 112($sp) +sw $t1, 120($sp) +lw $a1, 120($sp) lw $ra, 0($sp) -addi $sp, $sp, 120 +addi $sp, $sp, 128 jr $ra Complex_init: addi $sp, $sp, -28 @@ -897,7 +925,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -925,7 +953,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1032,18 +1060,18 @@ lw $ra, 0($sp) addi $sp, $sp, 64 jr $ra Complex.print: -addi $sp, $sp, -96 +addi $sp, $sp, -104 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 100($sp) +lw $t0, 108($sp) lw $t1, 20($t0) -sw $t1, 76($sp) +sw $t1, 80($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1063,7 +1091,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 36($sp) -lw $t0, 76($sp) +lw $t0, 80($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 28($sp) @@ -1099,17 +1127,31 @@ sw $a1, 40($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_3 -lw $t0, 100($sp) +lw $t0, 108($sp) lw $t1, 16($t0) -sw $t1, 96($sp) +sw $t1, 100($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Complex_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Complex_methods +sw $t1, 12($t0) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1117,13 +1159,13 @@ lw $t3, 16($t2) jal $t3 sw $a1, 56($sp) la $t0, s_5 -sw $t0, 64($sp) +sw $t0, 68($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1131,18 +1173,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 72($sp) +sw $a1, 76($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 56($t0) @@ -1155,11 +1197,11 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 52($sp) -lw $t0, 100($sp) +lw $t0, 108($sp) lw $t1, 20($t0) -sw $t1, 76($sp) +sw $t1, 80($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 52($t0) @@ -1173,13 +1215,13 @@ lw $t3, 16($t2) jal $t3 sw $a1, 48($sp) la $t0, s_6 -sw $t0, 80($sp) +sw $t0, 84($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1187,18 +1229,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 88($sp) +sw $a1, 92($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 48($t0) @@ -1215,29 +1257,43 @@ lw $t1, 44($sp) sw $t1, 4($sp) b label_4 label_3: -lw $t0, 100($sp) +lw $t0, 108($sp) lw $t1, 16($t0) -sw $t1, 96($sp) +sw $t1, 100($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Complex_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Complex_methods +sw $t1, 12($t0) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 92($sp) -lw $t1, 92($sp) +sw $a1, 96($sp) +lw $t1, 96($sp) sw $t1, 4($sp) label_4: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 104 +addi $sp, $sp, 112 jr $ra Complex.reflect_0: addi $sp, $sp, -88 @@ -1260,7 +1316,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1328,7 +1384,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1404,7 +1460,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1480,7 +1536,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index 25968ecc..b2724385 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -172,7 +172,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -288,7 +288,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -322,7 +322,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -375,7 +375,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -457,7 +457,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -527,7 +527,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -616,7 +616,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -44 +addi $sp, $sp, -64 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -626,7 +626,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -644,67 +644,123 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 36($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 28($sp) +sw $a1, 32($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 28($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 44($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 20($sp) +sw $a1, 24($sp) la $t0, s_4 -sw $t0, 36($sp) +sw $t0, 52($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -712,33 +768,47 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 40($sp) +sw $t0, 56($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 44($sp) +sw $a1, 60($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 32($sp) -lw $a1, 32($sp) +sw $a1, 48($sp) +lw $a1, 48($sp) lw $ra, 0($sp) -addi $sp, $sp, 52 +addi $sp, $sp, 72 jr $ra Main.fib: addi $sp, $sp, -172 @@ -749,7 +819,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -776,7 +846,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -803,7 +873,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -831,7 +901,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -933,7 +1003,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -958,7 +1028,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -993,7 +1063,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index c527c773..449cd1c2 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -234,7 +234,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 13 +li $t1, 10 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) @@ -304,7 +304,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -420,7 +420,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -454,7 +454,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -507,7 +507,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -589,7 +589,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -659,7 +659,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -749,7 +749,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 10 +li $t1, 8 sw $t1, 0($t0) la $t1, VList_name sw $t1, 4($t0) @@ -772,7 +772,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 7 sw $t1, 0($t0) la $t1, EList_name sw $t1, 4($t0) @@ -912,7 +912,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -940,7 +940,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 7 sw $t1, 0($t0) la $t1, EList_name sw $t1, 4($t0) @@ -1023,43 +1023,57 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Vertice.print: -addi $sp, $sp, -16 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 20($sp) +lw $t0, 24($sp) lw $t1, 16($t0) sw $t1, 8($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Vertice_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Vertice_methods +sw $t1, 12($t0) +sw $t0, 12($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 12($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 20($sp) +lw $t0, 24($sp) lw $t1, 20($t0) -sw $t1, 16($sp) +sw $t1, 20($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 12($sp) -lw $a1, 12($sp) +sw $a1, 16($sp) +lw $a1, 16($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 28 jr $ra Edge_init: addi $sp, $sp, -40 @@ -1077,7 +1091,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1105,7 +1119,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1133,7 +1147,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1177,7 +1191,7 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra Edge.print: -addi $sp, $sp, -72 +addi $sp, $sp, -96 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -1187,7 +1201,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1205,45 +1219,73 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Edge_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Edge_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 76($sp) +lw $t0, 100($sp) lw $t1, 16($t0) -sw $t1, 24($sp) +sw $t1, 28($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Edge_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Edge_methods +sw $t1, 12($t0) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 32($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 20($sp) +sw $a1, 24($sp) la $t0, s_4 -sw $t0, 32($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1251,55 +1293,83 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 40($sp) +sw $a1, 48($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Edge_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Edge_methods +sw $t1, 12($t0) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 28($sp) -lw $t0, 76($sp) +sw $a1, 36($sp) +lw $t0, 100($sp) lw $t1, 20($t0) -sw $t1, 48($sp) +sw $t1, 60($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Edge_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Edge_methods +sw $t1, 12($t0) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 44($sp) +sw $a1, 56($sp) la $t0, s_5 -sw $t0, 56($sp) +sw $t0, 72($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1307,50 +1377,78 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 60($sp) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 64($sp) +sw $a1, 80($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Edge_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Edge_methods +sw $t1, 12($t0) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 52($sp) -lw $t0, 76($sp) +sw $a1, 68($sp) +lw $t0, 100($sp) lw $t1, 24($t0) -sw $t1, 72($sp) +sw $t1, 92($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Edge_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Edge_methods +sw $t1, 12($t0) +sw $t0, 96($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 68($sp) -lw $a1, 68($sp) +sw $a1, 88($sp) +lw $a1, 88($sp) lw $ra, 0($sp) -addi $sp, $sp, 80 +addi $sp, $sp, 104 jr $ra EList_init: addi $sp, $sp, -4 @@ -1403,33 +1501,61 @@ lw $ra, 0($sp) addi $sp, $sp, 20 jr $ra EList.head: -addi $sp, $sp, -8 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, EList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, EList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 12($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 8($sp) -lw $a1, 8($sp) +sw $t1, 12($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 20 jr $ra EList.tail: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, EList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, EList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1439,9 +1565,9 @@ lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $a1, 8($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 16 jr $ra EList.cons: addi $sp, $sp, -12 @@ -1452,7 +1578,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 9 +li $t1, 8 sw $t1, 0($t0) la $t1, ECons_name sw $t1, 4($t0) @@ -1489,14 +1615,14 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra EList.append: -addi $sp, $sp, -24 +addi $sp, $sp, -32 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1506,11 +1632,25 @@ sw $a1, 8($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_1 +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, EList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, EList_methods +sw $t1, 12($t0) +sw $t0, 24($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 24($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1518,7 +1658,7 @@ lw $t3, 36($t2) jal $t3 sw $a1, 20($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -1531,19 +1671,33 @@ lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 sw $a1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, EList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, EList_methods +sw $t1, 12($t0) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 32($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 28($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) @@ -1560,15 +1714,15 @@ lw $t1, 12($sp) sw $t1, 4($sp) b label_2 label_1: -lw $t1, 32($sp) +lw $t1, 40($sp) sw $t1, 4($sp) label_2: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 36 +addi $sp, $sp, 44 jr $ra EList.print: -addi $sp, $sp, -16 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_6 @@ -1578,7 +1732,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1596,11 +1750,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, EList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, EList_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -1612,7 +1780,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 28 jr $ra ECons_init: addi $sp, $sp, -4 @@ -1787,33 +1955,61 @@ lw $ra, 0($sp) addi $sp, $sp, 20 jr $ra VList.head: -addi $sp, $sp, -8 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, VList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, VList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 12($sp) +lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 8($sp) -lw $a1, 8($sp) +sw $t1, 12($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 20 jr $ra VList.tail: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, VList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, VList_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1823,9 +2019,9 @@ lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $a1, 8($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 16 jr $ra VList.cons: addi $sp, $sp, -12 @@ -1836,7 +2032,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 11 +li $t1, 9 sw $t1, 0($t0) la $t1, VCons_name sw $t1, 4($t0) @@ -1873,7 +2069,7 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra VList.print: -addi $sp, $sp, -16 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_6 @@ -1883,7 +2079,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1901,11 +2097,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, VList_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, VList_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -1917,7 +2127,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 28 jr $ra VCons_init: addi $sp, $sp, -4 @@ -2057,7 +2267,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 14 +li $t1, 7 sw $t1, 0($t0) la $t1, BoolOp_name sw $t1, 4($t0) @@ -2080,7 +2290,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2107,7 +2317,7 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra Parse.read_input: -addi $sp, $sp, -152 +addi $sp, $sp, -164 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -2115,7 +2325,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, Graph_name sw $t1, 4($t0) @@ -2132,11 +2342,25 @@ jal Graph_init sw $a1, 8($sp) lw $t1, 4($sp) sw $t1, 12($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2144,19 +2368,19 @@ lw $t3, 20($t2) jal $t3 sw $a1, 16($sp) lw $t1, 16($sp) -sw $t1, 20($sp) +sw $t1, 24($sp) label_3: -lw $t0, 156($sp) +lw $t0, 168($sp) lw $t1, 16($t0) -sw $t1, 32($sp) +sw $t1, 36($sp) la $t0, empty_str -sw $t0, 64($sp) +sw $t0, 68($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2164,25 +2388,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 72($sp) +sw $a1, 76($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 52($sp) +sw $a1, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -2196,22 +2420,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 76($sp) -lw $t0, 48($sp) +sw $a1, 80($sp) +lw $t0, 52($sp) lw $t1, 16($t0) -sw $t1, 44($sp) -lw $t1, 44($sp) +sw $t1, 48($sp) +lw $t1, 48($sp) xor $a0, $t1, 1 -sw $a0, 40($sp) +sw $a0, 44($sp) li $a0, 20 li $v0, 9 syscall @@ -2225,24 +2449,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 80($sp) +sw $a1, 84($sp) la $t0, s_6 -sw $t0, 112($sp) +sw $t0, 116($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2250,25 +2474,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 116($sp) +sw $t0, 120($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 120($sp) +sw $a1, 124($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 100($sp) +sw $a1, 104($sp) li $a0, 20 li $v0, 9 syscall @@ -2282,22 +2506,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 124($sp) -lw $t0, 96($sp) +sw $a1, 128($sp) +lw $t0, 100($sp) lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t1, 92($sp) +sw $t1, 96($sp) +lw $t1, 96($sp) xor $a0, $t1, 1 -sw $a0, 88($sp) +sw $a0, 92($sp) li $a0, 20 li $v0, 9 syscall @@ -2311,54 +2535,68 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 128($sp) +sw $a1, 132($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 28($sp) -lw $t0, 28($sp) +sw $a1, 32($sp) +lw $t0, 32($sp) lw $a0, 16($t0) bnez $a0, label_4 b label_5 label_4: -move $t0, $sp -lw $t1, 20($t0) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 144($sp) +move $t0, $sp +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 144($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 136($sp) +sw $a1, 140($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -2370,32 +2608,46 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 132($sp) +sw $a1, 136($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 140($sp) -lw $t1, 140($sp) -sw $t1, 20($sp) +sw $a1, 148($sp) +lw $t1, 148($sp) +sw $t1, 24($sp) b label_3 label_5: -lw $t1, 24($sp) -sw $t1, 148($sp) +lw $t1, 28($sp) +sw $t1, 160($sp) lw $t1, 12($sp) -sw $t1, 152($sp) -lw $a1, 152($sp) +sw $t1, 164($sp) +lw $a1, 164($sp) lw $ra, 0($sp) -addi $sp, $sp, 160 +addi $sp, $sp, 172 jr $ra Parse.parse_line: -addi $sp, $sp, -136 +addi $sp, $sp, -148 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -2403,7 +2655,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 5 sw $t1, 0($t0) la $t1, Vertice_name sw $t1, 4($t0) @@ -2418,14 +2670,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Vertice_init sw $a1, 12($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2447,28 +2713,28 @@ lw $t3, 36($t2) jal $t3 sw $a1, 4($sp) lw $t1, 4($sp) -sw $t1, 20($sp) +sw $t1, 24($sp) label_6: -lw $t0, 140($sp) +lw $t0, 152($sp) lw $t1, 20($t0) -sw $t1, 100($sp) +sw $t1, 108($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 108($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 56($sp) +sw $a1, 60($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2476,28 +2742,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 64($sp) -li $t0, 0 sw $t0, 68($sp) +li $t0, 0 +sw $t0, 72($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 72($sp) -lw $t0, 56($sp) -lw $t1, 16($t0) -sw $t1, 48($sp) -lw $t0, 64($sp) +sw $a1, 76($sp) +lw $t0, 60($sp) lw $t1, 16($t0) sw $t1, 52($sp) -lw $a0, 48($sp) -lw $t1, 52($sp) +lw $t0, 68($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) +lw $a0, 52($sp) +lw $t1, 56($sp) seq $a0, $a0, $t1 -sw $a0, 44($sp) +sw $a0, 48($sp) li $a0, 20 li $v0, 9 syscall @@ -2511,22 +2777,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 40($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 76($sp) -lw $t0, 40($sp) +sw $a1, 80($sp) +lw $t0, 44($sp) lw $t1, 16($t0) -sw $t1, 36($sp) -lw $t1, 36($sp) +sw $t1, 40($sp) +lw $t1, 40($sp) xor $a0, $t1, 1 -sw $a0, 32($sp) +sw $a0, 36($sp) li $a0, 20 li $v0, 9 syscall @@ -2540,65 +2806,93 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 28($sp) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 80($sp) -lw $t0, 28($sp) +sw $a1, 84($sp) +lw $t0, 32($sp) lw $a0, 16($t0) bnez $a0, label_7 b label_8 label_7: -lw $t0, 140($sp) +lw $t0, 152($sp) lw $t1, 20($t0) -sw $t1, 100($sp) +sw $t1, 108($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 96($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 84($sp) -lw $t1, 84($sp) -sw $t1, 92($sp) -lw $t0, 140($sp) -lw $t1, 20($t0) +sw $a1, 88($sp) +lw $t1, 88($sp) sw $t1, 100($sp) +lw $t0, 152($sp) +lw $t1, 20($t0) +sw $t1, 108($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 112($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 112($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 96($sp) -lw $t1, 96($sp) -sw $t1, 104($sp) +sw $a1, 104($sp) +lw $t1, 104($sp) +sw $t1, 116($sp) li $a0, 28 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 6 sw $t1, 0($t0) la $t1, Edge_name sw $t1, 4($t0) @@ -2606,72 +2900,72 @@ li $t1, 7 sw $t1, 8($t0) la $t1, Edge_methods sw $t1, 12($t0) -sw $t0, 116($sp) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Edge_init -sw $a1, 120($sp) +sw $a1, 132($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 124($sp) +sw $a1, 136($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 112($sp) +sw $a1, 124($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 108($sp) -lw $t1, 108($sp) -sw $t1, 128($sp) -lw $t1, 128($sp) -sw $t1, 132($sp) +sw $a1, 120($sp) +lw $t1, 120($sp) +sw $t1, 140($sp) +lw $t1, 140($sp) +sw $t1, 144($sp) b label_6 label_8: -lw $t1, 20($sp) -sw $t1, 136($sp) -lw $a1, 136($sp) +lw $t1, 24($sp) +sw $t1, 148($sp) +lw $a1, 148($sp) lw $ra, 0($sp) -addi $sp, $sp, 148 +addi $sp, $sp, 160 jr $ra Parse.c2i: -addi $sp, $sp, -496 +addi $sp, $sp, -500 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_7 @@ -2681,7 +2975,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2703,7 +2997,7 @@ move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2741,7 +3035,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2763,7 +3057,7 @@ move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2801,7 +3095,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2823,7 +3117,7 @@ move $t0, $sp lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2861,7 +3155,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2883,7 +3177,7 @@ move $t0, $sp lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2921,7 +3215,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2943,7 +3237,7 @@ move $t0, $sp lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2981,7 +3275,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3003,7 +3297,7 @@ move $t0, $sp lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3041,7 +3335,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3063,7 +3357,7 @@ move $t0, $sp lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3101,7 +3395,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3123,7 +3417,7 @@ move $t0, $sp lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3161,7 +3455,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3183,7 +3477,7 @@ move $t0, $sp lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3221,7 +3515,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3243,7 +3537,7 @@ move $t0, $sp lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3274,11 +3568,25 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_18 +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 368($sp) move $t0, $sp -lw $t1, 500($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 500($t0) +lw $t1, 368($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3290,7 +3598,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3298,19 +3606,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 368($sp) -li $t0, 0 sw $t0, 372($sp) +li $t0, 0 +sw $t0, 376($sp) move $t0, $sp -lw $t1, 372($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 376($sp) -lw $t1, 368($sp) +sw $a1, 380($sp) +lw $t1, 372($sp) sw $t1, 328($sp) b label_19 label_18: @@ -3319,7 +3627,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3327,19 +3635,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 380($sp) -li $t0, 9 sw $t0, 384($sp) +li $t0, 9 +sw $t0, 388($sp) move $t0, $sp -lw $t1, 384($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 380($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 388($sp) -lw $t1, 380($sp) +sw $a1, 392($sp) +lw $t1, 384($sp) sw $t1, 328($sp) label_19: lw $t1, 328($sp) @@ -3351,7 +3659,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3359,19 +3667,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 392($sp) -li $t0, 8 sw $t0, 396($sp) +li $t0, 8 +sw $t0, 400($sp) move $t0, $sp -lw $t1, 396($t0) +lw $t1, 400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 392($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 400($sp) -lw $t1, 392($sp) +sw $a1, 404($sp) +lw $t1, 396($sp) sw $t1, 292($sp) label_20: lw $t1, 292($sp) @@ -3383,7 +3691,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3391,19 +3699,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 404($sp) -li $t0, 7 sw $t0, 408($sp) +li $t0, 7 +sw $t0, 412($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 404($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 412($sp) -lw $t1, 404($sp) +sw $a1, 416($sp) +lw $t1, 408($sp) sw $t1, 256($sp) label_21: lw $t1, 256($sp) @@ -3415,7 +3723,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3423,19 +3731,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 416($sp) -li $t0, 6 sw $t0, 420($sp) +li $t0, 6 +sw $t0, 424($sp) move $t0, $sp -lw $t1, 420($t0) +lw $t1, 424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 416($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 424($sp) -lw $t1, 416($sp) +sw $a1, 428($sp) +lw $t1, 420($sp) sw $t1, 220($sp) label_22: lw $t1, 220($sp) @@ -3447,7 +3755,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3455,19 +3763,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 428($sp) -li $t0, 5 sw $t0, 432($sp) +li $t0, 5 +sw $t0, 436($sp) move $t0, $sp -lw $t1, 432($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 428($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 436($sp) -lw $t1, 428($sp) +sw $a1, 440($sp) +lw $t1, 432($sp) sw $t1, 184($sp) label_23: lw $t1, 184($sp) @@ -3479,7 +3787,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3487,19 +3795,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 440($sp) -li $t0, 4 sw $t0, 444($sp) +li $t0, 4 +sw $t0, 448($sp) move $t0, $sp -lw $t1, 444($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 440($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 448($sp) -lw $t1, 440($sp) +sw $a1, 452($sp) +lw $t1, 444($sp) sw $t1, 148($sp) label_24: lw $t1, 148($sp) @@ -3511,7 +3819,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3519,19 +3827,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 452($sp) -li $t0, 3 sw $t0, 456($sp) +li $t0, 3 +sw $t0, 460($sp) move $t0, $sp -lw $t1, 456($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 452($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 460($sp) -lw $t1, 452($sp) +sw $a1, 464($sp) +lw $t1, 456($sp) sw $t1, 112($sp) label_25: lw $t1, 112($sp) @@ -3543,7 +3851,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3551,19 +3859,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 464($sp) -li $t0, 2 sw $t0, 468($sp) +li $t0, 2 +sw $t0, 472($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 464($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 472($sp) -lw $t1, 464($sp) +sw $a1, 476($sp) +lw $t1, 468($sp) sw $t1, 76($sp) label_26: lw $t1, 76($sp) @@ -3575,7 +3883,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3583,19 +3891,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 476($sp) -li $t0, 1 sw $t0, 480($sp) +li $t0, 1 +sw $t0, 484($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 476($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 484($sp) -lw $t1, 476($sp) +sw $a1, 488($sp) +lw $t1, 480($sp) sw $t1, 40($sp) label_27: lw $t1, 40($sp) @@ -3607,7 +3915,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3615,34 +3923,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 488($sp) -li $t0, 0 sw $t0, 492($sp) +li $t0, 0 +sw $t0, 496($sp) move $t0, $sp -lw $t1, 492($t0) +lw $t1, 496($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 488($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 496($sp) -lw $t1, 488($sp) +sw $a1, 500($sp) +lw $t1, 492($sp) sw $t1, 4($sp) label_28: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 508 +addi $sp, $sp, 512 jr $ra Parse.a2i: -addi $sp, $sp, -312 +addi $sp, $sp, -324 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3654,7 +3962,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3715,7 +4023,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3740,7 +4048,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3767,10 +4075,10 @@ sw $t1, 0($sp) lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3784,7 +4092,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3842,7 +4150,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3867,7 +4175,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3894,10 +4202,10 @@ sw $t1, 0($sp) lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3911,7 +4219,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3964,14 +4272,28 @@ sw $a1, 168($sp) lw $t0, 112($sp) lw $a0, 16($t0) bnez $a0, label_31 +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 176($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3983,22 +4305,22 @@ sw $t1, 108($sp) b label_32 label_31: move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 200($sp) +sw $a1, 204($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4006,34 +4328,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 204($sp) -li $t0, 1 sw $t0, 208($sp) +li $t0, 1 +sw $t0, 212($sp) move $t0, $sp -lw $t1, 208($t0) +lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 204($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 212($sp) -lw $t0, 200($sp) -lw $t1, 16($t0) -sw $t1, 192($sp) +sw $a1, 216($sp) lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 196($sp) -lw $a0, 192($sp) -lw $t1, 196($sp) +lw $t0, 208($sp) +lw $t1, 16($t0) +sw $t1, 200($sp) +lw $a0, 196($sp) +lw $t1, 200($sp) sub $a0, $a0, $t1 -sw $a0, 188($sp) +sw $a0, 192($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4041,22 +4363,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 184($sp) +sw $t0, 188($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 216($sp) +sw $a1, 220($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4064,50 +4386,64 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 220($sp) -li $t0, 1 sw $t0, 224($sp) +li $t0, 1 +sw $t0, 228($sp) move $t0, $sp -lw $t1, 224($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 228($sp) +sw $a1, 232($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 180($sp) +sw $a1, 184($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 180($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 236($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 176($sp) -lw $t1, 176($sp) +sw $a1, 180($sp) +lw $t1, 180($sp) sw $t1, 108($sp) label_32: lw $t1, 108($sp) @@ -4115,22 +4451,22 @@ sw $t1, 44($sp) b label_33 label_30: move $t0, $sp -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 268($sp) +sw $a1, 276($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4138,34 +4474,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 272($sp) +sw $t0, 280($sp) li $t0, 1 -sw $t0, 276($sp) +sw $t0, 284($sp) move $t0, $sp -lw $t1, 276($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 272($t0) +lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 280($sp) -lw $t0, 268($sp) +sw $a1, 288($sp) +lw $t0, 276($sp) lw $t1, 16($t0) -sw $t1, 260($sp) -lw $t0, 272($sp) +sw $t1, 268($sp) +lw $t0, 280($sp) lw $t1, 16($t0) -sw $t1, 264($sp) -lw $a0, 260($sp) -lw $t1, 264($sp) +sw $t1, 272($sp) +lw $a0, 268($sp) +lw $t1, 272($sp) sub $a0, $a0, $t1 -sw $a0, 256($sp) +sw $a0, 264($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4173,22 +4509,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 252($sp) +sw $t0, 260($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 284($sp) +sw $a1, 292($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4196,61 +4532,75 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 296($sp) li $t0, 1 -sw $t0, 292($sp) +sw $t0, 300($sp) move $t0, $sp -lw $t1, 292($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 296($sp) +sw $a1, 304($sp) move $t0, $sp -lw $t1, 252($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 248($sp) +sw $a1, 256($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 308($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 308($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 244($sp) -lw $t0, 244($sp) +sw $a1, 252($sp) +lw $t0, 252($sp) lw $t1, 16($t0) -sw $t1, 240($sp) -lw $t1, 240($sp) +sw $t1, 248($sp) +lw $t1, 248($sp) neg $a0, $t1 -sw $a0, 236($sp) +sw $a0, 244($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4258,17 +4608,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 232($sp) +sw $t0, 240($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 232($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 300($sp) -lw $t1, 232($sp) +sw $a1, 312($sp) +lw $t1, 240($sp) sw $t1, 44($sp) label_33: lw $t1, 44($sp) @@ -4280,7 +4630,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4288,27 +4638,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 304($sp) +sw $t0, 316($sp) li $t0, 0 -sw $t0, 308($sp) +sw $t0, 320($sp) move $t0, $sp -lw $t1, 308($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 304($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 312($sp) -lw $t1, 304($sp) +sw $a1, 324($sp) +lw $t1, 316($sp) sw $t1, 4($sp) label_34: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 324 +addi $sp, $sp, 336 jr $ra Parse.a2i_aux: -addi $sp, $sp, -536 +addi $sp, $sp, -540 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -4316,7 +4666,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4339,10 +4689,10 @@ sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) move $t0, $sp -lw $t1, 544($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4356,7 +4706,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4422,7 +4772,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4449,10 +4799,10 @@ sw $t1, 0($sp) lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4468,7 +4818,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4528,7 +4878,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4586,7 +4936,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4621,7 +4971,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4644,7 +4994,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4671,24 +5021,38 @@ sw $t1, 0($sp) lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 212($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 9 +sw $t1, 0($t0) +la $t1, Parse_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Parse_methods +sw $t1, 12($t0) +sw $t0, 228($sp) move $t0, $sp lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 540($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 540($t0) +lw $t1, 228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4710,7 +5074,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4727,7 +5091,7 @@ lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 228($sp) +sw $a1, 232($sp) lw $t1, 160($sp) sw $t1, 16($sp) li $a0, 20 @@ -4735,7 +5099,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4743,34 +5107,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 252($sp) -li $t0, 1 sw $t0, 256($sp) +li $t0, 1 +sw $t0, 260($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 260($sp) +sw $a1, 264($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 244($sp) -lw $t0, 252($sp) -lw $t1, 16($t0) sw $t1, 248($sp) -lw $a0, 244($sp) -lw $t1, 248($sp) +lw $t0, 256($sp) +lw $t1, 16($t0) +sw $t1, 252($sp) +lw $a0, 248($sp) +lw $t1, 252($sp) add $a0, $a0, $t1 -sw $a0, 240($sp) +sw $a0, 244($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4778,28 +5142,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 236($sp) +sw $t0, 240($sp) move $t0, $sp -lw $t1, 240($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 264($sp) -lw $t1, 236($sp) +sw $a1, 268($sp) +lw $t1, 240($sp) sw $t1, 40($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 284($sp) +sw $t1, 288($sp) lw $t0, 24($sp) lw $t1, 16($t0) -sw $t1, 288($sp) -lw $a0, 284($sp) -lw $t1, 288($sp) +sw $t1, 292($sp) +lw $a0, 288($sp) +lw $t1, 292($sp) seq $a0, $a0, $t1 -sw $a0, 280($sp) +sw $a0, 284($sp) li $a0, 20 li $v0, 9 syscall @@ -4813,27 +5177,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 276($sp) +sw $t0, 280($sp) move $t0, $sp -lw $t1, 280($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 276($t0) +lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 292($sp) -lw $t0, 276($sp) +sw $a1, 296($sp) +lw $t0, 280($sp) lw $a0, 16($t0) bnez $a0, label_40 la $t0, empty_str -sw $t0, 296($sp) +sw $t0, 300($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4841,28 +5205,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 300($sp) +sw $t0, 304($sp) move $t0, $sp -lw $t1, 296($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 300($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 304($sp) -lw $t1, 300($sp) -sw $t1, 272($sp) +sw $a1, 308($sp) +lw $t1, 304($sp) +sw $t1, 276($sp) b label_41 label_40: la $t0, empty_str -sw $t0, 308($sp) +sw $t0, 312($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4870,53 +5234,53 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 312($sp) +sw $t0, 316($sp) move $t0, $sp -lw $t1, 308($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 312($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 316($sp) -lw $t0, 540($sp) -lw $t1, 312($sp) +sw $a1, 320($sp) +lw $t0, 544($sp) +lw $t1, 316($sp) sw $t1, 20($t0) -lw $t1, 312($sp) -sw $t1, 272($sp) +lw $t1, 316($sp) +sw $t1, 276($sp) label_41: -lw $t1, 272($sp) +lw $t1, 276($sp) sw $t1, 124($sp) b label_42 label_39: move $t0, $sp -lw $t1, 544($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 360($sp) -lw $t0, 360($sp) +sw $a1, 364($sp) +lw $t0, 364($sp) lw $t1, 16($t0) -sw $t1, 352($sp) +sw $t1, 356($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 356($sp) -lw $a0, 352($sp) -lw $t1, 356($sp) +sw $t1, 360($sp) +lw $a0, 356($sp) +lw $t1, 360($sp) sub $a0, $a0, $t1 -sw $a0, 348($sp) +sw $a0, 352($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4924,22 +5288,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 344($sp) +sw $t0, 348($sp) move $t0, $sp -lw $t1, 348($t0) +lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 344($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 364($sp) +sw $a1, 368($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4947,34 +5311,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 368($sp) -li $t0, 1 sw $t0, 372($sp) +li $t0, 1 +sw $t0, 376($sp) move $t0, $sp -lw $t1, 372($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 376($sp) -lw $t0, 344($sp) -lw $t1, 16($t0) -sw $t1, 336($sp) -lw $t0, 368($sp) +sw $a1, 380($sp) +lw $t0, 348($sp) lw $t1, 16($t0) sw $t1, 340($sp) -lw $a0, 336($sp) -lw $t1, 340($sp) +lw $t0, 372($sp) +lw $t1, 16($t0) +sw $t1, 344($sp) +lw $a0, 340($sp) +lw $t1, 344($sp) sub $a0, $a0, $t1 -sw $a0, 332($sp) +sw $a0, 336($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4982,22 +5346,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 328($sp) +sw $t0, 332($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 336($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 380($sp) +sw $a1, 384($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5005,34 +5369,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 400($sp) -li $t0, 1 sw $t0, 404($sp) +li $t0, 1 +sw $t0, 408($sp) move $t0, $sp -lw $t1, 404($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 400($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 408($sp) +sw $a1, 412($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 392($sp) -lw $t0, 400($sp) -lw $t1, 16($t0) sw $t1, 396($sp) -lw $a0, 392($sp) -lw $t1, 396($sp) +lw $t0, 404($sp) +lw $t1, 16($t0) +sw $t1, 400($sp) +lw $a0, 396($sp) +lw $t1, 400($sp) add $a0, $a0, $t1 -sw $a0, 388($sp) +sw $a0, 392($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5040,35 +5404,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 384($sp) +sw $t0, 388($sp) move $t0, $sp -lw $t1, 388($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 412($sp) +sw $a1, 416($sp) move $t0, $sp -lw $t1, 328($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 324($sp) -lw $t0, 540($sp) -lw $t1, 324($sp) +sw $a1, 328($sp) +lw $t0, 544($sp) +lw $t1, 328($sp) sw $t1, 20($t0) lw $t1, 24($sp) sw $t1, 40($sp) @@ -5080,32 +5444,32 @@ sw $t1, 88($sp) b label_43 label_38: move $t0, $sp -lw $t1, 544($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 460($sp) -lw $t0, 460($sp) +sw $a1, 464($sp) +lw $t0, 464($sp) lw $t1, 16($t0) -sw $t1, 452($sp) +sw $t1, 456($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 456($sp) -lw $a0, 452($sp) -lw $t1, 456($sp) +sw $t1, 460($sp) +lw $a0, 456($sp) +lw $t1, 460($sp) sub $a0, $a0, $t1 -sw $a0, 448($sp) +sw $a0, 452($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5113,22 +5477,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 444($sp) +sw $t0, 448($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 444($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 464($sp) +sw $a1, 468($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5136,34 +5500,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 468($sp) -li $t0, 1 sw $t0, 472($sp) +li $t0, 1 +sw $t0, 476($sp) move $t0, $sp -lw $t1, 472($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 476($sp) -lw $t0, 444($sp) -lw $t1, 16($t0) -sw $t1, 436($sp) -lw $t0, 468($sp) +sw $a1, 480($sp) +lw $t0, 448($sp) lw $t1, 16($t0) sw $t1, 440($sp) -lw $a0, 436($sp) -lw $t1, 440($sp) +lw $t0, 472($sp) +lw $t1, 16($t0) +sw $t1, 444($sp) +lw $a0, 440($sp) +lw $t1, 444($sp) sub $a0, $a0, $t1 -sw $a0, 432($sp) +sw $a0, 436($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5171,22 +5535,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 428($sp) +sw $t0, 432($sp) move $t0, $sp -lw $t1, 432($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 428($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 480($sp) +sw $a1, 484($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5194,34 +5558,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 500($sp) -li $t0, 1 sw $t0, 504($sp) +li $t0, 1 +sw $t0, 508($sp) move $t0, $sp -lw $t1, 504($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 500($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 508($sp) +sw $a1, 512($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 492($sp) -lw $t0, 500($sp) -lw $t1, 16($t0) sw $t1, 496($sp) -lw $a0, 492($sp) -lw $t1, 496($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 500($sp) +lw $a0, 496($sp) +lw $t1, 500($sp) add $a0, $a0, $t1 -sw $a0, 488($sp) +sw $a0, 492($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5229,35 +5593,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 484($sp) +sw $t0, 488($sp) move $t0, $sp -lw $t1, 488($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 484($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 512($sp) +sw $a1, 516($sp) move $t0, $sp -lw $t1, 428($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 484($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 548($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 424($sp) -lw $t0, 540($sp) -lw $t1, 424($sp) +sw $a1, 428($sp) +lw $t0, 544($sp) +lw $t1, 428($sp) sw $t1, 20($t0) lw $t1, 24($sp) sw $t1, 40($sp) @@ -5265,32 +5629,46 @@ lw $t1, 24($sp) sw $t1, 88($sp) label_43: lw $t1, 88($sp) -sw $t1, 524($sp) +sw $t1, 528($sp) b label_35 label_37: lw $t1, 44($sp) -sw $t1, 528($sp) -lw $t1, 528($sp) sw $t1, 532($sp) -lw $t1, 16($sp) +lw $t1, 532($sp) sw $t1, 536($sp) -lw $a1, 536($sp) +lw $t1, 16($sp) +sw $t1, 540($sp) +lw $a1, 540($sp) lw $ra, 0($sp) -addi $sp, $sp, 548 +addi $sp, $sp, 552 jr $ra Main_init: -addi $sp, $sp, -8 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Parse_init sw $a1, 4($sp) move $a1, $zero +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 10 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -5300,11 +5678,11 @@ lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 8($sp) -lw $t0, 12($sp) +lw $t0, 16($sp) lw $t1, 8($sp) sw $t1, 24($t0) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 20 jr $ra Main.main: addi $sp, $sp, -16 diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index fbe445ce..e87c4cf7 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -140,7 +140,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 9 +li $t1, 6 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) @@ -210,7 +210,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -326,7 +326,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -360,7 +360,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -413,7 +413,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -495,7 +495,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -565,7 +565,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -640,32 +640,40 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Foo_init: -addi $sp, $sp, -120 +addi $sp, $sp, -128 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bazz_init sw $a1, 4($sp) move $a1, $zero -lw $t0, 124($sp) +lw $t0, 132($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_2 b case_void_error label_2: -blt $t1 7 label_3 -bgt $t1 7 label_3 -lw $t1, 124($sp) +blt $t1 8 label_3 +bgt $t1 8 label_3 +lw $t1, 132($sp) sw $t1, 12($sp) +lw $t1, 12($sp) +sw $t1, 8($sp) +b label_1 +label_3: +blt $t1 7 label_4 +bgt $t1 8 label_4 +lw $t1, 132($sp) +sw $t1, 16($sp) li $a0, 52 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 8 sw $t1, 0($t0) la $t1, Bar_name sw $t1, 4($t0) @@ -673,21 +681,21 @@ li $t1, 13 sw $t1, 8($t0) la $t1, Bar_methods sw $t1, 12($t0) -sw $t0, 16($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bar_init -sw $a1, 20($sp) -lw $t1, 16($sp) +sw $a1, 24($sp) +lw $t1, 20($sp) sw $t1, 8($sp) b label_1 -label_3: -blt $t1 5 label_4 -bgt $t1 5 label_4 -lw $t1, 124($sp) -sw $t1, 24($sp) +label_4: +blt $t1 6 label_5 +bgt $t1 8 label_5 +lw $t1, 132($sp) +sw $t1, 28($sp) li $a0, 44 li $v0, 9 syscall @@ -701,31 +709,23 @@ li $t1, 11 sw $t1, 8($t0) la $t1, Razz_methods sw $t1, 12($t0) -sw $t0, 28($sp) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Razz_init -sw $a1, 32($sp) -lw $t1, 28($sp) -sw $t1, 8($sp) -b label_1 -label_4: -blt $t1 6 label_5 -bgt $t1 6 label_5 -lw $t1, 124($sp) -sw $t1, 36($sp) -lw $t1, 36($sp) +sw $a1, 36($sp) +lw $t1, 32($sp) sw $t1, 8($sp) b label_1 label_5: b case_no_match_error label_1: -lw $t0, 124($sp) +lw $t0, 132($sp) lw $t1, 8($sp) sw $t1, 28($t0) -lw $t0, 124($sp) +lw $t0, 132($sp) lw $t1, 28($t0) sw $t1, 92($sp) move $t0, $sp @@ -739,7 +739,7 @@ lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 sw $a1, 88($sp) -lw $t0, 124($sp) +lw $t0, 132($sp) lw $t1, 20($t0) sw $t1, 100($sp) move $t0, $sp @@ -768,7 +768,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -786,11 +786,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 104($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Foo_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Foo_methods +sw $t1, 12($t0) +sw $t0, 112($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 112($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -812,7 +826,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -829,9 +843,23 @@ lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 112($sp) +sw $a1, 116($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Foo_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Foo_methods +sw $t1, 12($t0) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 124($t0) @@ -840,11 +868,11 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 116($sp) +sw $a1, 120($sp) lw $t0, 56($sp) lw $t1, 16($t0) sw $t1, 48($sp) -lw $t0, 116($sp) +lw $t0, 120($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $a0, 48($sp) @@ -856,7 +884,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -873,12 +901,12 @@ lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 120($sp) -lw $t0, 124($sp) +sw $a1, 128($sp) +lw $t0, 132($sp) lw $t1, 40($sp) sw $t1, 32($t0) lw $ra, 0($sp) -addi $sp, $sp, 128 +addi $sp, $sp, 136 jr $ra Foo.doh: addi $sp, $sp, -56 @@ -897,7 +925,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -932,7 +960,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -963,74 +991,110 @@ lw $ra, 0($sp) addi $sp, $sp, 64 jr $ra Bar_init: -addi $sp, $sp, -12 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Razz_init sw $a1, 4($sp) move $a1, $zero +li $a0, 52 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, Bar_name +sw $t1, 4($t0) +li $t1, 13 +sw $t1, 8($t0) +la $t1, Bar_methods +sw $t1, 12($t0) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 12($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 sw $a1, 8($sp) -lw $t0, 16($sp) +lw $t0, 24($sp) lw $t1, 8($sp) sw $t1, 44($t0) +li $a0, 52 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 8 +sw $t1, 0($t0) +la $t1, Bar_name +sw $t1, 4($t0) +li $t1, 13 +sw $t1, 8($t0) +la $t1, Bar_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 12($sp) -lw $t0, 16($sp) -lw $t1, 12($sp) +sw $a1, 16($sp) +lw $t0, 24($sp) +lw $t1, 16($sp) sw $t1, 48($t0) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 28 jr $ra Razz_init: -addi $sp, $sp, -140 +addi $sp, $sp, -148 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Foo_init sw $a1, 4($sp) move $a1, $zero -lw $t0, 144($sp) +lw $t0, 152($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_7 b case_void_error label_7: -blt $t1 7 label_8 -bgt $t1 7 label_8 -lw $t1, 144($sp) +blt $t1 8 label_8 +bgt $t1 8 label_8 +lw $t1, 152($sp) sw $t1, 12($sp) +lw $t1, 12($sp) +sw $t1, 8($sp) +b label_6 +label_8: +blt $t1 7 label_9 +bgt $t1 8 label_9 +lw $t1, 152($sp) +sw $t1, 16($sp) li $a0, 52 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 8 sw $t1, 0($t0) la $t1, Bar_name sw $t1, 4($t0) @@ -1038,31 +1102,23 @@ li $t1, 13 sw $t1, 8($t0) la $t1, Bar_methods sw $t1, 12($t0) -sw $t0, 16($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bar_init -sw $a1, 20($sp) -lw $t1, 16($sp) -sw $t1, 8($sp) -b label_6 -label_8: -blt $t1 6 label_9 -bgt $t1 6 label_9 -lw $t1, 144($sp) -sw $t1, 24($sp) -lw $t1, 24($sp) +sw $a1, 24($sp) +lw $t1, 20($sp) sw $t1, 8($sp) b label_6 label_9: b case_no_match_error label_6: -lw $t0, 144($sp) +lw $t0, 152($sp) lw $t1, 8($sp) sw $t1, 36($t0) -lw $t0, 144($sp) +lw $t0, 152($sp) lw $t1, 28($t0) sw $t1, 96($sp) li $a0, 28 @@ -1070,7 +1126,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 5 sw $t1, 0($t0) la $t1, Bazz_name sw $t1, 4($t0) @@ -1090,7 +1146,7 @@ lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 sw $a1, 92($sp) -lw $t0, 144($sp) +lw $t0, 152($sp) lw $t1, 20($t0) sw $t1, 108($sp) move $t0, $sp @@ -1119,7 +1175,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1137,7 +1193,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 112($sp) -lw $t0, 144($sp) +lw $t0, 152($sp) lw $t1, 36($t0) sw $t1, 120($sp) move $t0, $sp @@ -1166,7 +1222,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1184,11 +1240,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 124($sp) +li $a0, 44 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Razz_name +sw $t1, 4($t0) +li $t1, 11 +sw $t1, 8($t0) +la $t1, Razz_methods +sw $t1, 12($t0) +sw $t0, 132($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1210,7 +1280,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1227,9 +1297,23 @@ lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 132($sp) +sw $a1, 136($sp) +li $a0, 44 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Razz_name +sw $t1, 4($t0) +li $t1, 11 +sw $t1, 8($t0) +la $t1, Razz_methods +sw $t1, 12($t0) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 144($t0) @@ -1238,11 +1322,11 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 136($sp) +sw $a1, 140($sp) lw $t0, 44($sp) lw $t1, 16($t0) sw $t1, 36($sp) -lw $t0, 136($sp) +lw $t0, 140($sp) lw $t1, 16($t0) sw $t1, 40($sp) lw $a0, 36($sp) @@ -1254,7 +1338,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1271,19 +1355,19 @@ lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 140($sp) -lw $t0, 144($sp) +sw $a1, 148($sp) +lw $t0, 152($sp) lw $t1, 28($sp) sw $t1, 40($t0) lw $ra, 0($sp) -addi $sp, $sp, 148 +addi $sp, $sp, 156 jr $ra Bazz_init: -addi $sp, $sp, -64 +addi $sp, $sp, -68 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal IO_init @@ -1294,7 +1378,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1314,25 +1398,33 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 16($sp) -lw $t0, 68($sp) +lw $t0, 72($sp) lw $t1, 8($sp) sw $t1, 16($t0) -lw $t0, 68($sp) +lw $t0, 72($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_11 b case_void_error label_11: -blt $t1 7 label_12 -bgt $t1 7 label_12 -lw $t1, 68($sp) +blt $t1 8 label_12 +bgt $t1 8 label_12 +lw $t1, 72($sp) sw $t1, 24($sp) +lw $t1, 24($sp) +sw $t1, 20($sp) +b label_10 +label_12: +blt $t1 7 label_13 +bgt $t1 8 label_13 +lw $t1, 72($sp) +sw $t1, 28($sp) li $a0, 52 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 8 sw $t1, 0($t0) la $t1, Bar_name sw $t1, 4($t0) @@ -1340,21 +1432,21 @@ li $t1, 13 sw $t1, 8($t0) la $t1, Bar_methods sw $t1, 12($t0) -sw $t0, 28($sp) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bar_init -sw $a1, 32($sp) -lw $t1, 28($sp) +sw $a1, 36($sp) +lw $t1, 32($sp) sw $t1, 20($sp) b label_10 -label_12: -blt $t1 5 label_13 -bgt $t1 5 label_13 -lw $t1, 68($sp) -sw $t1, 36($sp) +label_13: +blt $t1 6 label_14 +bgt $t1 8 label_14 +lw $t1, 72($sp) +sw $t1, 40($sp) li $a0, 44 li $v0, 9 syscall @@ -1368,27 +1460,27 @@ li $t1, 11 sw $t1, 8($t0) la $t1, Razz_methods sw $t1, 12($t0) -sw $t0, 40($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Razz_init -sw $a1, 44($sp) -lw $t1, 40($sp) +sw $a1, 48($sp) +lw $t1, 44($sp) sw $t1, 20($sp) b label_10 -label_13: -blt $t1 8 label_14 -bgt $t1 8 label_14 -lw $t1, 68($sp) -sw $t1, 48($sp) +label_14: +blt $t1 5 label_15 +bgt $t1 8 label_15 +lw $t1, 72($sp) +sw $t1, 52($sp) li $a0, 36 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, Foo_name sw $t1, 4($t0) @@ -1396,32 +1488,38 @@ li $t1, 9 sw $t1, 8($t0) la $t1, Foo_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 56($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Foo_init -sw $a1, 56($sp) -lw $t1, 52($sp) -sw $t1, 20($sp) -b label_10 -label_14: -blt $t1 6 label_15 -bgt $t1 6 label_15 -lw $t1, 68($sp) -sw $t1, 60($sp) -lw $t1, 60($sp) +sw $a1, 60($sp) +lw $t1, 56($sp) sw $t1, 20($sp) b label_10 label_15: b case_no_match_error label_10: -lw $t0, 68($sp) +lw $t0, 72($sp) lw $t1, 20($sp) sw $t1, 20($t0) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Bazz_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Bazz_methods +sw $t1, 12($t0) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 68($t0) @@ -1431,27 +1529,41 @@ lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 64($sp) -lw $t0, 68($sp) +lw $t0, 72($sp) lw $t1, 64($sp) sw $t1, 24($t0) lw $ra, 0($sp) -addi $sp, $sp, 72 +addi $sp, $sp, 76 jr $ra Bazz.printh: -addi $sp, $sp, -20 +addi $sp, $sp, -24 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 24($sp) +lw $t0, 28($sp) lw $t1, 16($t0) sw $t1, 8($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Bazz_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Bazz_methods +sw $t1, 12($t0) +sw $t0, 12($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 12($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1463,7 +1575,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1471,21 +1583,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 12($sp) -li $t0, 0 sw $t0, 16($sp) +li $t0, 0 +sw $t0, 20($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 20($sp) -lw $a1, 12($sp) +sw $a1, 24($sp) +lw $a1, 16($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 32 jr $ra Bazz.doh: addi $sp, $sp, -56 @@ -1504,7 +1616,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1539,7 +1651,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1585,7 +1697,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 5 sw $t1, 0($t0) la $t1, Bazz_name sw $t1, 4($t0) @@ -1608,7 +1720,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, Foo_name sw $t1, 4($t0) @@ -1654,7 +1766,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 8 sw $t1, 0($t0) la $t1, Bar_name sw $t1, 4($t0) @@ -1686,7 +1798,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index 0117d667..0ae9baac 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -170,7 +170,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -286,7 +286,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -320,7 +320,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -373,7 +373,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -455,7 +455,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -525,7 +525,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -614,7 +614,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -16 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -624,7 +624,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -642,11 +642,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -658,5 +672,5 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 28 jr $ra \ No newline at end of file diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index 1371c4d8..51341aaf 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -138,7 +138,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 9 +li $t1, 6 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) @@ -208,7 +208,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -324,7 +324,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -358,7 +358,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -411,7 +411,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -493,7 +493,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -563,7 +563,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -653,7 +653,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 1 +li $t1, 4 sw $t1, 0($t0) la $t1, IO_name sw $t1, 4($t0) @@ -688,7 +688,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -752,7 +752,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -803,7 +803,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra C.out_c: -addi $sp, $sp, -16 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_5 @@ -813,7 +813,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -831,11 +831,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, C_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, C_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -847,7 +861,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 28 jr $ra D_init: addi $sp, $sp, -4 @@ -864,7 +878,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra D.out_d: -addi $sp, $sp, -16 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_6 @@ -874,7 +888,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -892,11 +906,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, D_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, D_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -908,7 +936,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 28 jr $ra Main_init: addi $sp, $sp, -4 @@ -925,7 +953,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -64 +addi $sp, $sp, -68 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -933,7 +961,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, A_name sw $t1, 4($t0) @@ -964,7 +992,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 7 sw $t1, 0($t0) la $t1, B_name sw $t1, 4($t0) @@ -995,7 +1023,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 5 sw $t1, 0($t0) la $t1, C_name sw $t1, 4($t0) @@ -1026,7 +1054,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 6 sw $t1, 0($t0) la $t1, D_name sw $t1, 4($t0) @@ -1059,7 +1087,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1077,11 +1105,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 64($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 68($sp) move $t0, $sp lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 68($t0) @@ -1093,5 +1135,5 @@ jal $t3 sw $a1, 52($sp) lw $a1, 52($sp) lw $ra, 0($sp) -addi $sp, $sp, 72 +addi $sp, $sp, 76 jr $ra \ No newline at end of file diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 29d3c73b..81ef0ac0 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -287,7 +287,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -403,7 +403,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -437,7 +437,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -490,7 +490,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -572,7 +572,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -642,7 +642,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -732,7 +732,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -760,7 +760,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -788,7 +788,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -834,17 +834,31 @@ lw $ra, 0($sp) addi $sp, $sp, 16 jr $ra Board.board_init: -addi $sp, $sp, -480 +addi $sp, $sp, -484 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 28 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Board_name +sw $t1, 4($t0) +li $t1, 7 +sw $t1, 8($t0) +la $t1, Board_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 488($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 484($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 484($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -852,13 +866,13 @@ lw $t3, 28($t2) jal $t3 sw $a1, 4($sp) lw $t1, 4($sp) -sw $t1, 8($sp) +sw $t1, 12($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -866,28 +880,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 32($sp) -li $t0, 15 sw $t0, 36($sp) +li $t0, 15 +sw $t0, 40($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 40($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $t0, 32($sp) +sw $a1, 44($sp) +lw $t0, 12($sp) lw $t1, 16($t0) sw $t1, 28($sp) -lw $a0, 24($sp) -lw $t1, 28($sp) +lw $t0, 36($sp) +lw $t1, 16($t0) +sw $t1, 32($sp) +lw $a0, 28($sp) +lw $t1, 32($sp) seq $a0, $a0, $t1 -sw $a0, 20($sp) +sw $a0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -901,17 +915,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 16($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 44($sp) -lw $t0, 16($sp) +sw $a1, 48($sp) +lw $t0, 20($sp) lw $a0, 16($t0) bnez $a0, label_1 li $a0, 20 @@ -919,7 +933,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -927,28 +941,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 68($sp) -li $t0, 16 sw $t0, 72($sp) +li $t0, 16 +sw $t0, 76($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 76($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $t0, 68($sp) +sw $a1, 80($sp) +lw $t0, 12($sp) lw $t1, 16($t0) sw $t1, 64($sp) -lw $a0, 60($sp) -lw $t1, 64($sp) +lw $t0, 72($sp) +lw $t1, 16($t0) +sw $t1, 68($sp) +lw $a0, 64($sp) +lw $t1, 68($sp) seq $a0, $a0, $t1 -sw $a0, 56($sp) +sw $a0, 60($sp) li $a0, 20 li $v0, 9 syscall @@ -962,17 +976,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 56($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 80($sp) -lw $t0, 52($sp) +sw $a1, 84($sp) +lw $t0, 56($sp) lw $a0, 16($t0) bnez $a0, label_2 li $a0, 20 @@ -980,7 +994,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -988,28 +1002,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 104($sp) -li $t0, 20 sw $t0, 108($sp) +li $t0, 20 +sw $t0, 112($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 112($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $t0, 104($sp) +sw $a1, 116($sp) +lw $t0, 12($sp) lw $t1, 16($t0) sw $t1, 100($sp) -lw $a0, 96($sp) -lw $t1, 100($sp) +lw $t0, 108($sp) +lw $t1, 16($t0) +sw $t1, 104($sp) +lw $a0, 100($sp) +lw $t1, 104($sp) seq $a0, $a0, $t1 -sw $a0, 92($sp) +sw $a0, 96($sp) li $a0, 20 li $v0, 9 syscall @@ -1023,17 +1037,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 116($sp) -lw $t0, 88($sp) +sw $a1, 120($sp) +lw $t0, 92($sp) lw $a0, 16($t0) bnez $a0, label_3 li $a0, 20 @@ -1041,7 +1055,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1049,28 +1063,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 140($sp) -li $t0, 21 sw $t0, 144($sp) +li $t0, 21 +sw $t0, 148($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 148($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 132($sp) -lw $t0, 140($sp) +sw $a1, 152($sp) +lw $t0, 12($sp) lw $t1, 16($t0) sw $t1, 136($sp) -lw $a0, 132($sp) -lw $t1, 136($sp) +lw $t0, 144($sp) +lw $t1, 16($t0) +sw $t1, 140($sp) +lw $a0, 136($sp) +lw $t1, 140($sp) seq $a0, $a0, $t1 -sw $a0, 128($sp) +sw $a0, 132($sp) li $a0, 20 li $v0, 9 syscall @@ -1084,17 +1098,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 152($sp) -lw $t0, 124($sp) +sw $a1, 156($sp) +lw $t0, 128($sp) lw $a0, 16($t0) bnez $a0, label_4 li $a0, 20 @@ -1102,7 +1116,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1110,28 +1124,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 176($sp) -li $t0, 25 sw $t0, 180($sp) +li $t0, 25 +sw $t0, 184($sp) move $t0, $sp -lw $t1, 180($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 184($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 168($sp) -lw $t0, 176($sp) +sw $a1, 188($sp) +lw $t0, 12($sp) lw $t1, 16($t0) sw $t1, 172($sp) -lw $a0, 168($sp) -lw $t1, 172($sp) +lw $t0, 180($sp) +lw $t1, 16($t0) +sw $t1, 176($sp) +lw $a0, 172($sp) +lw $t1, 176($sp) seq $a0, $a0, $t1 -sw $a0, 164($sp) +sw $a0, 168($sp) li $a0, 20 li $v0, 9 syscall @@ -1145,17 +1159,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 160($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 188($sp) -lw $t0, 160($sp) +sw $a1, 192($sp) +lw $t0, 164($sp) lw $a0, 16($t0) bnez $a0, label_5 li $a0, 20 @@ -1163,7 +1177,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1171,28 +1185,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 212($sp) -li $t0, 28 sw $t0, 216($sp) +li $t0, 28 +sw $t0, 220($sp) move $t0, $sp -lw $t1, 216($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 212($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 220($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 204($sp) -lw $t0, 212($sp) +sw $a1, 224($sp) +lw $t0, 12($sp) lw $t1, 16($t0) sw $t1, 208($sp) -lw $a0, 204($sp) -lw $t1, 208($sp) +lw $t0, 216($sp) +lw $t1, 16($t0) +sw $t1, 212($sp) +lw $a0, 208($sp) +lw $t1, 212($sp) seq $a0, $a0, $t1 -sw $a0, 200($sp) +sw $a0, 204($sp) li $a0, 20 li $v0, 9 syscall @@ -1206,17 +1220,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 196($sp) +sw $t0, 200($sp) move $t0, $sp -lw $t1, 200($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 224($sp) -lw $t0, 196($sp) +sw $a1, 228($sp) +lw $t0, 200($sp) lw $a0, 16($t0) bnez $a0, label_6 li $a0, 20 @@ -1224,7 +1238,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1232,27 +1246,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 228($sp) -li $t0, 5 sw $t0, 232($sp) +li $t0, 5 +sw $t0, 236($sp) move $t0, $sp -lw $t1, 232($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 228($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 236($sp) -lw $t0, 484($sp) -lw $t1, 228($sp) +sw $a1, 240($sp) +lw $t0, 488($sp) +lw $t1, 232($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1260,26 +1274,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 244($sp) -li $t0, 5 sw $t0, 248($sp) +li $t0, 5 +sw $t0, 252($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 244($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 252($sp) -lw $t0, 484($sp) -lw $t1, 244($sp) +sw $a1, 256($sp) +lw $t0, 488($sp) +lw $t1, 248($sp) sw $t1, 20($t0) -lw $t0, 484($sp) -lw $t1, 8($sp) +lw $t0, 488($sp) +lw $t1, 12($sp) sw $t1, 24($t0) -lw $t1, 8($sp) -sw $t1, 192($sp) +lw $t1, 12($sp) +sw $t1, 196($sp) b label_7 label_6: li $a0, 20 @@ -1287,7 +1301,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1295,27 +1309,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 264($sp) -li $t0, 7 sw $t0, 268($sp) +li $t0, 7 +sw $t0, 272($sp) move $t0, $sp -lw $t1, 268($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 264($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 272($sp) -lw $t0, 484($sp) -lw $t1, 264($sp) +sw $a1, 276($sp) +lw $t0, 488($sp) +lw $t1, 268($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1323,29 +1337,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 280($sp) -li $t0, 4 sw $t0, 284($sp) +li $t0, 4 +sw $t0, 288($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 280($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 288($sp) -lw $t0, 484($sp) -lw $t1, 280($sp) +sw $a1, 292($sp) +lw $t0, 488($sp) +lw $t1, 284($sp) sw $t1, 20($t0) -lw $t0, 484($sp) -lw $t1, 8($sp) +lw $t0, 488($sp) +lw $t1, 12($sp) sw $t1, 24($t0) -lw $t1, 8($sp) -sw $t1, 192($sp) +lw $t1, 12($sp) +sw $t1, 196($sp) label_7: -lw $t1, 192($sp) -sw $t1, 156($sp) +lw $t1, 196($sp) +sw $t1, 160($sp) b label_8 label_5: li $a0, 20 @@ -1353,7 +1367,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1361,27 +1375,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 300($sp) -li $t0, 5 sw $t0, 304($sp) +li $t0, 5 +sw $t0, 308($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 300($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 308($sp) -lw $t0, 484($sp) -lw $t1, 300($sp) +sw $a1, 312($sp) +lw $t0, 488($sp) +lw $t1, 304($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1389,29 +1403,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 316($sp) -li $t0, 5 sw $t0, 320($sp) +li $t0, 5 +sw $t0, 324($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 324($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 324($sp) -lw $t0, 484($sp) -lw $t1, 316($sp) +sw $a1, 328($sp) +lw $t0, 488($sp) +lw $t1, 320($sp) sw $t1, 20($t0) -lw $t0, 484($sp) -lw $t1, 8($sp) +lw $t0, 488($sp) +lw $t1, 12($sp) sw $t1, 24($t0) -lw $t1, 8($sp) -sw $t1, 156($sp) +lw $t1, 12($sp) +sw $t1, 160($sp) label_8: -lw $t1, 156($sp) -sw $t1, 120($sp) +lw $t1, 160($sp) +sw $t1, 124($sp) b label_9 label_4: li $a0, 20 @@ -1419,7 +1433,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1427,27 +1441,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 336($sp) -li $t0, 3 sw $t0, 340($sp) +li $t0, 3 +sw $t0, 344($sp) move $t0, $sp -lw $t1, 340($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 336($t0) +lw $t1, 340($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 344($sp) -lw $t0, 484($sp) -lw $t1, 336($sp) +sw $a1, 348($sp) +lw $t0, 488($sp) +lw $t1, 340($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1455,29 +1469,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 352($sp) -li $t0, 7 sw $t0, 356($sp) +li $t0, 7 +sw $t0, 360($sp) move $t0, $sp -lw $t1, 356($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 352($t0) +lw $t1, 356($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 360($sp) -lw $t0, 484($sp) -lw $t1, 352($sp) +sw $a1, 364($sp) +lw $t0, 488($sp) +lw $t1, 356($sp) sw $t1, 20($t0) -lw $t0, 484($sp) -lw $t1, 8($sp) +lw $t0, 488($sp) +lw $t1, 12($sp) sw $t1, 24($t0) -lw $t1, 8($sp) -sw $t1, 120($sp) +lw $t1, 12($sp) +sw $t1, 124($sp) label_9: -lw $t1, 120($sp) -sw $t1, 84($sp) +lw $t1, 124($sp) +sw $t1, 88($sp) b label_10 label_3: li $a0, 20 @@ -1485,7 +1499,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1493,27 +1507,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 372($sp) -li $t0, 4 sw $t0, 376($sp) +li $t0, 4 +sw $t0, 380($sp) move $t0, $sp -lw $t1, 376($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 372($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 380($sp) -lw $t0, 484($sp) -lw $t1, 372($sp) +sw $a1, 384($sp) +lw $t0, 488($sp) +lw $t1, 376($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1521,29 +1535,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 388($sp) -li $t0, 5 sw $t0, 392($sp) +li $t0, 5 +sw $t0, 396($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 388($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 396($sp) -lw $t0, 484($sp) -lw $t1, 388($sp) +sw $a1, 400($sp) +lw $t0, 488($sp) +lw $t1, 392($sp) sw $t1, 20($t0) -lw $t0, 484($sp) -lw $t1, 8($sp) +lw $t0, 488($sp) +lw $t1, 12($sp) sw $t1, 24($t0) -lw $t1, 8($sp) -sw $t1, 84($sp) +lw $t1, 12($sp) +sw $t1, 88($sp) label_10: -lw $t1, 84($sp) -sw $t1, 48($sp) +lw $t1, 88($sp) +sw $t1, 52($sp) b label_11 label_2: li $a0, 20 @@ -1551,7 +1565,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1559,27 +1573,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 408($sp) -li $t0, 4 sw $t0, 412($sp) +li $t0, 4 +sw $t0, 416($sp) move $t0, $sp -lw $t1, 412($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 416($sp) -lw $t0, 484($sp) -lw $t1, 408($sp) +sw $a1, 420($sp) +lw $t0, 488($sp) +lw $t1, 412($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1587,29 +1601,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 424($sp) -li $t0, 4 sw $t0, 428($sp) +li $t0, 4 +sw $t0, 432($sp) move $t0, $sp -lw $t1, 428($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 424($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 432($sp) -lw $t0, 484($sp) -lw $t1, 424($sp) +sw $a1, 436($sp) +lw $t0, 488($sp) +lw $t1, 428($sp) sw $t1, 20($t0) -lw $t0, 484($sp) -lw $t1, 8($sp) +lw $t0, 488($sp) +lw $t1, 12($sp) sw $t1, 24($t0) -lw $t1, 8($sp) -sw $t1, 48($sp) +lw $t1, 12($sp) +sw $t1, 52($sp) label_11: -lw $t1, 48($sp) -sw $t1, 12($sp) +lw $t1, 52($sp) +sw $t1, 16($sp) b label_12 label_1: li $a0, 20 @@ -1617,7 +1631,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1625,27 +1639,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 444($sp) -li $t0, 3 sw $t0, 448($sp) +li $t0, 3 +sw $t0, 452($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 444($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 452($sp) -lw $t0, 484($sp) -lw $t1, 444($sp) +sw $a1, 456($sp) +lw $t0, 488($sp) +lw $t1, 448($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1653,32 +1667,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 460($sp) -li $t0, 5 sw $t0, 464($sp) +li $t0, 5 +sw $t0, 468($sp) move $t0, $sp -lw $t1, 464($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 460($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 468($sp) -lw $t0, 484($sp) -lw $t1, 460($sp) +sw $a1, 472($sp) +lw $t0, 488($sp) +lw $t1, 464($sp) sw $t1, 20($t0) -lw $t0, 484($sp) -lw $t1, 8($sp) +lw $t0, 488($sp) +lw $t1, 12($sp) sw $t1, 24($t0) -lw $t1, 8($sp) -sw $t1, 12($sp) +lw $t1, 12($sp) +sw $t1, 16($sp) label_12: -lw $t1, 484($sp) -sw $t1, 480($sp) -lw $a1, 480($sp) +lw $t1, 488($sp) +sw $t1, 484($sp) +lw $a1, 484($sp) lw $ra, 0($sp) -addi $sp, $sp, 492 +addi $sp, $sp, 496 jr $ra CellularAutomaton_init: addi $sp, $sp, -16 @@ -1696,7 +1710,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1723,17 +1737,31 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra CellularAutomaton.init: -addi $sp, $sp, -8 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($sp) +lw $t0, 16($sp) +lw $t1, 20($sp) sw $t1, 28($t0) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -1743,12 +1771,12 @@ lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 sw $a1, 8($sp) -lw $a1, 12($sp) +lw $a1, 16($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 24 jr $ra CellularAutomaton.print: -addi $sp, $sp, -148 +addi $sp, $sp, -164 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -1756,7 +1784,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1778,7 +1806,7 @@ jal Int_init sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) -lw $t0, 152($sp) +lw $t0, 168($sp) lw $t1, 24($t0) sw $t1, 20($sp) lw $t1, 20($sp) @@ -1790,7 +1818,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1808,14 +1836,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 40($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 44($sp) move $t0, $sp lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 44($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1825,14 +1867,14 @@ sw $a1, 28($sp) label_13: lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 56($sp) +sw $t1, 60($sp) lw $t0, 24($sp) lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) +sw $t1, 64($sp) +lw $a0, 60($sp) +lw $t1, 64($sp) slt $a0, $a0, $t1 -sw $a0, 52($sp) +sw $a0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -1846,66 +1888,80 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 64($sp) -lw $t0, 48($sp) +sw $a1, 68($sp) +lw $t0, 52($sp) lw $a0, 16($t0) bnez $a0, label_14 b label_15 label_14: -lw $t0, 152($sp) +lw $t0, 168($sp) lw $t1, 28($t0) -sw $t1, 76($sp) -lw $t0, 152($sp) +sw $t1, 80($sp) +lw $t0, 168($sp) lw $t1, 20($t0) -sw $t1, 116($sp) +sw $t1, 128($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 80($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 72($sp) +sw $a1, 76($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 88($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 68($sp) +sw $a1, 72($sp) la $t0, s_3 -sw $t0, 88($sp) +sw $t0, 96($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1913,49 +1969,63 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 92($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 96($sp) +sw $a1, 104($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 108($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 84($sp) -lw $t0, 152($sp) +sw $a1, 92($sp) +lw $t0, 168($sp) lw $t1, 20($t0) -sw $t1, 116($sp) +sw $t1, 128($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 108($sp) -lw $t0, 116($sp) +sw $t1, 120($sp) +lw $t0, 128($sp) lw $t1, 16($t0) -sw $t1, 112($sp) -lw $a0, 108($sp) -lw $t1, 112($sp) +sw $t1, 124($sp) +lw $a0, 120($sp) +lw $t1, 124($sp) add $a0, $a0, $t1 -sw $a0, 104($sp) +sw $a0, 116($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1963,28 +2033,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 112($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 120($sp) -lw $t1, 100($sp) +sw $a1, 132($sp) +lw $t1, 112($sp) sw $t1, 16($sp) b label_13 label_15: la $t0, s_3 -sw $t0, 132($sp) +sw $t0, 144($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1992,37 +2062,51 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 136($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 140($sp) +sw $a1, 152($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 128($sp) -lw $t1, 152($sp) -sw $t1, 144($sp) -lw $t1, 144($sp) -sw $t1, 148($sp) -lw $a1, 148($sp) +sw $a1, 140($sp) +lw $t1, 168($sp) +sw $t1, 160($sp) +lw $t1, 160($sp) +sw $t1, 164($sp) +lw $a1, 164($sp) lw $ra, 0($sp) -addi $sp, $sp, 156 +addi $sp, $sp, 172 jr $ra CellularAutomaton.num_cells: addi $sp, $sp, -8 @@ -2058,7 +2142,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2093,7 +2177,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2155,7 +2239,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2203,7 +2287,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2229,13 +2313,13 @@ lw $ra, 0($sp) addi $sp, $sp, 104 jr $ra CellularAutomaton.north: -addi $sp, $sp, -100 +addi $sp, $sp, -104 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 104($sp) +lw $t0, 108($sp) lw $t1, 20($t0) sw $t1, 84($sp) -lw $t0, 108($sp) +lw $t0, 112($sp) lw $t1, 16($t0) sw $t1, 32($sp) lw $t0, 84($sp) @@ -2250,7 +2334,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2273,7 +2357,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2329,10 +2413,10 @@ sw $a1, 60($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_18 -lw $t0, 104($sp) +lw $t0, 108($sp) lw $t1, 20($t0) sw $t1, 84($sp) -lw $t0, 108($sp) +lw $t0, 112($sp) lw $t1, 16($t0) sw $t1, 76($sp) lw $t0, 84($sp) @@ -2347,7 +2431,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2365,14 +2449,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 88($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 92($sp) move $t0, $sp lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 92($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2384,13 +2482,13 @@ sw $t1, 4($sp) b label_19 label_18: la $t0, s_4 -sw $t0, 92($sp) +sw $t0, 96($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2398,34 +2496,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 100($sp) -lw $t1, 96($sp) +sw $a1, 104($sp) +lw $t1, 100($sp) sw $t1, 4($sp) label_19: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 112 +addi $sp, $sp, 116 jr $ra CellularAutomaton.south: -addi $sp, $sp, -92 +addi $sp, $sp, -96 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 96($sp) +lw $t0, 100($sp) lw $t1, 24($t0) sw $t1, 24($sp) -lw $t0, 96($sp) +lw $t0, 100($sp) lw $t1, 20($t0) sw $t1, 76($sp) -lw $t0, 100($sp) +lw $t0, 104($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $t0, 76($sp) @@ -2440,7 +2538,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2494,10 +2592,10 @@ sw $a1, 52($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_20 -lw $t0, 96($sp) +lw $t0, 100($sp) lw $t1, 20($t0) sw $t1, 76($sp) -lw $t0, 100($sp) +lw $t0, 104($sp) lw $t1, 16($t0) sw $t1, 68($sp) lw $t0, 76($sp) @@ -2512,7 +2610,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2530,14 +2628,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 80($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 84($sp) move $t0, $sp lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2549,13 +2661,13 @@ sw $t1, 4($sp) b label_21 label_20: la $t0, s_4 -sw $t0, 84($sp) +sw $t0, 88($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2563,25 +2675,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) -lw $t1, 88($sp) +sw $a1, 96($sp) +lw $t1, 92($sp) sw $t1, 4($sp) label_21: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 104 +addi $sp, $sp, 108 jr $ra CellularAutomaton.east: -addi $sp, $sp, -184 +addi $sp, $sp, -188 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -2589,7 +2701,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2609,7 +2721,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 80($sp) -lw $t0, 192($sp) +lw $t0, 196($sp) lw $t1, 16($t0) sw $t1, 64($sp) lw $t0, 72($sp) @@ -2624,7 +2736,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2642,7 +2754,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 84($sp) -lw $t0, 188($sp) +lw $t0, 192($sp) lw $t1, 20($t0) sw $t1, 96($sp) lw $t0, 56($sp) @@ -2661,7 +2773,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2679,7 +2791,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 92($sp) -lw $t0, 188($sp) +lw $t0, 192($sp) lw $t1, 20($t0) sw $t1, 96($sp) lw $t0, 40($sp) @@ -2697,7 +2809,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2720,7 +2832,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2740,7 +2852,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 128($sp) -lw $t0, 192($sp) +lw $t0, 196($sp) lw $t1, 16($t0) sw $t1, 112($sp) lw $t0, 120($sp) @@ -2755,7 +2867,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2814,7 +2926,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2834,7 +2946,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 168($sp) -lw $t0, 192($sp) +lw $t0, 196($sp) lw $t1, 16($t0) sw $t1, 152($sp) lw $t0, 160($sp) @@ -2849,7 +2961,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2867,18 +2979,32 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 172($sp) -move $t0, $sp -lw $t1, 144($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 188($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 188($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 176($sp) +move $t0, $sp +lw $t1, 144($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 192($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 176($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 48($t2) jal $t3 sw $a1, 140($sp) lw $t1, 140($sp) @@ -2886,13 +3012,13 @@ sw $t1, 4($sp) b label_23 label_22: la $t0, s_4 -sw $t0, 176($sp) +sw $t0, 180($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -2900,25 +3026,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 180($sp) +sw $t0, 184($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 184($sp) -lw $t1, 180($sp) +sw $a1, 188($sp) +lw $t1, 184($sp) sw $t1, 4($sp) label_23: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 196 +addi $sp, $sp, 200 jr $ra CellularAutomaton.west: -addi $sp, $sp, -168 +addi $sp, $sp, -172 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -2926,7 +3052,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -2946,7 +3072,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 176($sp) +lw $t0, 180($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -2982,10 +3108,10 @@ sw $a1, 36($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_24 -lw $t0, 172($sp) +lw $t0, 176($sp) lw $t1, 20($t0) sw $t1, 100($sp) -lw $t0, 176($sp) +lw $t0, 180($sp) lw $t1, 16($t0) sw $t1, 84($sp) lw $t0, 100($sp) @@ -3001,7 +3127,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3019,7 +3145,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 96($sp) -lw $t0, 172($sp) +lw $t0, 176($sp) lw $t1, 20($t0) sw $t1, 100($sp) lw $t0, 76($sp) @@ -3037,7 +3163,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3058,7 +3184,7 @@ sw $a1, 104($sp) lw $t0, 60($sp) lw $t1, 16($t0) sw $t1, 52($sp) -lw $t0, 176($sp) +lw $t0, 180($sp) lw $t1, 16($t0) sw $t1, 56($sp) lw $a0, 52($sp) @@ -3096,7 +3222,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3116,7 +3242,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -lw $t0, 176($sp) +lw $t0, 180($sp) lw $t1, 16($t0) sw $t1, 124($sp) lw $t0, 132($sp) @@ -3131,7 +3257,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3149,14 +3275,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 144($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 148($sp) move $t0, $sp lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 148($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3168,13 +3308,13 @@ sw $t1, 40($sp) b label_26 label_25: la $t0, s_4 -sw $t0, 148($sp) +sw $t0, 152($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3182,17 +3322,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 152($sp) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 156($sp) -lw $t1, 152($sp) +sw $a1, 160($sp) +lw $t1, 156($sp) sw $t1, 40($sp) label_26: lw $t1, 40($sp) @@ -3200,13 +3340,13 @@ sw $t1, 4($sp) b label_27 label_24: la $t0, s_4 -sw $t0, 160($sp) +sw $t0, 164($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3214,31 +3354,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 164($sp) +sw $t0, 168($sp) move $t0, $sp -lw $t1, 160($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 168($sp) -lw $t1, 164($sp) +sw $a1, 172($sp) +lw $t1, 168($sp) sw $t1, 4($sp) label_27: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 180 +addi $sp, $sp, 184 jr $ra CellularAutomaton.northwest: -addi $sp, $sp, -192 +addi $sp, $sp, -196 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 196($sp) +lw $t0, 200($sp) lw $t1, 20($t0) sw $t1, 124($sp) -lw $t0, 200($sp) +lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 32($sp) lw $t0, 124($sp) @@ -3253,7 +3393,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3276,7 +3416,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3332,10 +3472,10 @@ sw $a1, 60($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_28 -lw $t0, 196($sp) +lw $t0, 200($sp) lw $t1, 20($t0) sw $t1, 124($sp) -lw $t0, 200($sp) +lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 108($sp) lw $t0, 124($sp) @@ -3351,7 +3491,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3369,7 +3509,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 120($sp) -lw $t0, 196($sp) +lw $t0, 200($sp) lw $t1, 20($t0) sw $t1, 124($sp) lw $t0, 100($sp) @@ -3387,7 +3527,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3408,7 +3548,7 @@ sw $a1, 128($sp) lw $t0, 84($sp) lw $t1, 16($t0) sw $t1, 76($sp) -lw $t0, 200($sp) +lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 80($sp) lw $a0, 76($sp) @@ -3446,7 +3586,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3466,7 +3606,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 164($sp) -lw $t0, 200($sp) +lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 148($sp) lw $t0, 156($sp) @@ -3481,7 +3621,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3499,14 +3639,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 168($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 172($sp) move $t0, $sp lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 172($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3518,13 +3672,13 @@ sw $t1, 64($sp) b label_30 label_29: la $t0, s_4 -sw $t0, 172($sp) +sw $t0, 176($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3532,17 +3686,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 176($sp) +sw $t0, 180($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 180($sp) -lw $t1, 176($sp) +sw $a1, 184($sp) +lw $t1, 180($sp) sw $t1, 64($sp) label_30: lw $t1, 64($sp) @@ -3550,13 +3704,13 @@ sw $t1, 4($sp) b label_31 label_28: la $t0, s_4 -sw $t0, 184($sp) +sw $t0, 188($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3564,31 +3718,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 188($sp) +sw $t0, 192($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 192($sp) -lw $t1, 188($sp) +sw $a1, 196($sp) +lw $t1, 192($sp) sw $t1, 4($sp) label_31: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 204 +addi $sp, $sp, 208 jr $ra CellularAutomaton.northeast: -addi $sp, $sp, -256 +addi $sp, $sp, -260 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 260($sp) +lw $t0, 264($sp) lw $t1, 20($t0) sw $t1, 156($sp) -lw $t0, 264($sp) +lw $t0, 268($sp) lw $t1, 16($t0) sw $t1, 32($sp) lw $t0, 156($sp) @@ -3603,7 +3757,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3626,7 +3780,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3687,7 +3841,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3707,7 +3861,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -lw $t0, 264($sp) +lw $t0, 268($sp) lw $t1, 16($t0) sw $t1, 124($sp) lw $t0, 132($sp) @@ -3722,7 +3876,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3740,7 +3894,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 144($sp) -lw $t0, 260($sp) +lw $t0, 264($sp) lw $t1, 20($t0) sw $t1, 156($sp) lw $t0, 116($sp) @@ -3759,7 +3913,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3777,7 +3931,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 152($sp) -lw $t0, 260($sp) +lw $t0, 264($sp) lw $t1, 20($t0) sw $t1, 156($sp) lw $t0, 100($sp) @@ -3795,7 +3949,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3818,7 +3972,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3838,7 +3992,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 188($sp) -lw $t0, 264($sp) +lw $t0, 268($sp) lw $t1, 16($t0) sw $t1, 172($sp) lw $t0, 180($sp) @@ -3853,7 +4007,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3912,7 +4066,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3932,7 +4086,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 228($sp) -lw $t0, 264($sp) +lw $t0, 268($sp) lw $t1, 16($t0) sw $t1, 212($sp) lw $t0, 220($sp) @@ -3947,7 +4101,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -3965,14 +4119,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 232($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 236($sp) move $t0, $sp lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 236($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3984,13 +4152,13 @@ sw $t1, 64($sp) b label_34 label_33: la $t0, s_4 -sw $t0, 236($sp) +sw $t0, 240($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -3998,17 +4166,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 244($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 244($sp) -lw $t1, 240($sp) +sw $a1, 248($sp) +lw $t1, 244($sp) sw $t1, 64($sp) label_34: lw $t1, 64($sp) @@ -4016,13 +4184,13 @@ sw $t1, 4($sp) b label_35 label_32: la $t0, s_4 -sw $t0, 248($sp) +sw $t0, 252($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4030,34 +4198,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 252($sp) +sw $t0, 256($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 256($sp) -lw $t1, 252($sp) +sw $a1, 260($sp) +lw $t1, 256($sp) sw $t1, 4($sp) label_35: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 268 +addi $sp, $sp, 272 jr $ra CellularAutomaton.southeast: -addi $sp, $sp, -248 +addi $sp, $sp, -252 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 252($sp) +lw $t0, 256($sp) lw $t1, 24($t0) sw $t1, 24($sp) -lw $t0, 252($sp) +lw $t0, 256($sp) lw $t1, 20($t0) sw $t1, 148($sp) -lw $t0, 256($sp) +lw $t0, 260($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $t0, 148($sp) @@ -4072,7 +4240,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4131,7 +4299,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4151,7 +4319,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 132($sp) -lw $t0, 256($sp) +lw $t0, 260($sp) lw $t1, 16($t0) sw $t1, 116($sp) lw $t0, 124($sp) @@ -4166,7 +4334,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4184,7 +4352,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 136($sp) -lw $t0, 252($sp) +lw $t0, 256($sp) lw $t1, 20($t0) sw $t1, 148($sp) lw $t0, 108($sp) @@ -4203,7 +4371,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4221,7 +4389,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 144($sp) -lw $t0, 252($sp) +lw $t0, 256($sp) lw $t1, 20($t0) sw $t1, 148($sp) lw $t0, 92($sp) @@ -4239,7 +4407,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4262,7 +4430,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4282,7 +4450,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 180($sp) -lw $t0, 256($sp) +lw $t0, 260($sp) lw $t1, 16($t0) sw $t1, 164($sp) lw $t0, 172($sp) @@ -4297,7 +4465,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4356,7 +4524,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4376,7 +4544,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 220($sp) -lw $t0, 256($sp) +lw $t0, 260($sp) lw $t1, 16($t0) sw $t1, 204($sp) lw $t0, 212($sp) @@ -4391,7 +4559,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4409,14 +4577,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 224($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 228($sp) move $t0, $sp lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 228($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4428,13 +4610,13 @@ sw $t1, 56($sp) b label_38 label_37: la $t0, s_4 -sw $t0, 228($sp) +sw $t0, 232($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4442,17 +4624,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 232($sp) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 228($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 232($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 236($sp) -lw $t1, 232($sp) +sw $a1, 240($sp) +lw $t1, 236($sp) sw $t1, 56($sp) label_38: lw $t1, 56($sp) @@ -4460,13 +4642,13 @@ sw $t1, 4($sp) b label_39 label_36: la $t0, s_4 -sw $t0, 240($sp) +sw $t0, 244($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4474,34 +4656,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 244($sp) +sw $t0, 248($sp) move $t0, $sp -lw $t1, 240($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 244($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 248($sp) -lw $t1, 244($sp) +sw $a1, 252($sp) +lw $t1, 248($sp) sw $t1, 4($sp) label_39: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 260 +addi $sp, $sp, 264 jr $ra CellularAutomaton.southwest: -addi $sp, $sp, -184 +addi $sp, $sp, -188 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 188($sp) +lw $t0, 192($sp) lw $t1, 24($t0) sw $t1, 24($sp) -lw $t0, 188($sp) +lw $t0, 192($sp) lw $t1, 20($t0) sw $t1, 116($sp) -lw $t0, 192($sp) +lw $t0, 196($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $t0, 116($sp) @@ -4516,7 +4698,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4570,10 +4752,10 @@ sw $a1, 52($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_40 -lw $t0, 188($sp) +lw $t0, 192($sp) lw $t1, 20($t0) sw $t1, 116($sp) -lw $t0, 192($sp) +lw $t0, 196($sp) lw $t1, 16($t0) sw $t1, 100($sp) lw $t0, 116($sp) @@ -4589,7 +4771,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4607,7 +4789,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 112($sp) -lw $t0, 188($sp) +lw $t0, 192($sp) lw $t1, 20($t0) sw $t1, 116($sp) lw $t0, 92($sp) @@ -4625,7 +4807,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4646,7 +4828,7 @@ sw $a1, 120($sp) lw $t0, 76($sp) lw $t1, 16($t0) sw $t1, 68($sp) -lw $t0, 192($sp) +lw $t0, 196($sp) lw $t1, 16($t0) sw $t1, 72($sp) lw $a0, 68($sp) @@ -4684,7 +4866,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4704,7 +4886,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 156($sp) -lw $t0, 192($sp) +lw $t0, 196($sp) lw $t1, 16($t0) sw $t1, 140($sp) lw $t0, 148($sp) @@ -4719,7 +4901,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4737,14 +4919,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 160($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 164($sp) move $t0, $sp lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4756,13 +4952,13 @@ sw $t1, 56($sp) b label_42 label_41: la $t0, s_4 -sw $t0, 164($sp) +sw $t0, 168($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4770,17 +4966,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 168($sp) +sw $t0, 172($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 172($sp) -lw $t1, 168($sp) +sw $a1, 176($sp) +lw $t1, 172($sp) sw $t1, 56($sp) label_42: lw $t1, 56($sp) @@ -4788,13 +4984,13 @@ sw $t1, 4($sp) b label_43 label_40: la $t0, s_4 -sw $t0, 176($sp) +sw $t0, 180($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4802,35 +4998,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 180($sp) +sw $t0, 184($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 184($sp) -lw $t1, 180($sp) +sw $a1, 188($sp) +lw $t1, 184($sp) sw $t1, 4($sp) label_43: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 196 +addi $sp, $sp, 200 jr $ra CellularAutomaton.neighbors: -addi $sp, $sp, -652 +addi $sp, $sp, -684 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 140($sp) move $t0, $sp -lw $t1, 660($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4838,13 +5048,13 @@ lw $t3, 52($t2) jal $t3 sw $a1, 136($sp) la $t0, s_5 -sw $t0, 140($sp) +sw $t0, 144($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4852,18 +5062,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 144($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 148($sp) +sw $a1, 152($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 136($t0) @@ -4893,7 +5103,7 @@ lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 152($sp) +sw $a1, 156($sp) lw $t0, 120($sp) lw $a0, 16($t0) bnez $a0, label_44 @@ -4902,7 +5112,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4910,19 +5120,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 156($sp) -li $t0, 0 sw $t0, 160($sp) +li $t0, 0 +sw $t0, 164($sp) move $t0, $sp -lw $t1, 160($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 164($sp) -lw $t1, 156($sp) +sw $a1, 168($sp) +lw $t1, 160($sp) sw $t1, 116($sp) b label_45 label_44: @@ -4931,7 +5141,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -4939,43 +5149,57 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 168($sp) -li $t0, 1 sw $t0, 172($sp) +li $t0, 1 +sw $t0, 176($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 176($sp) -lw $t1, 168($sp) +sw $a1, 180($sp) +lw $t1, 172($sp) sw $t1, 116($sp) label_45: +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 208($sp) move $t0, $sp -lw $t1, 660($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 208($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 56($t2) jal $t3 -sw $a1, 200($sp) +sw $a1, 204($sp) la $t0, s_5 -sw $t0, 204($sp) +sw $t0, 212($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -4983,25 +5207,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 208($sp) +sw $t0, 216($sp) move $t0, $sp -lw $t1, 204($t0) +lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 212($sp) +sw $a1, 220($sp) move $t0, $sp -lw $t1, 208($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 188($sp) +sw $a1, 192($sp) li $a0, 20 li $v0, 9 syscall @@ -5015,17 +5239,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 184($sp) +sw $t0, 188($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 216($sp) -lw $t0, 184($sp) +sw $a1, 224($sp) +lw $t0, 188($sp) lw $a0, 16($t0) bnez $a0, label_46 li $a0, 20 @@ -5033,7 +5257,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5041,20 +5265,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 220($sp) +sw $t0, 228($sp) li $t0, 0 -sw $t0, 224($sp) +sw $t0, 232($sp) move $t0, $sp -lw $t1, 224($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 228($sp) -lw $t1, 220($sp) -sw $t1, 180($sp) +sw $a1, 236($sp) +lw $t1, 228($sp) +sw $t1, 184($sp) b label_47 label_46: li $a0, 20 @@ -5062,7 +5286,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5070,25 +5294,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 232($sp) +sw $t0, 240($sp) li $t0, 1 -sw $t0, 236($sp) +sw $t0, 244($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 232($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 240($sp) -lw $t1, 232($sp) -sw $t1, 180($sp) +sw $a1, 248($sp) +lw $t1, 240($sp) +sw $t1, 184($sp) label_47: lw $t0, 116($sp) lw $t1, 16($t0) sw $t1, 108($sp) -lw $t0, 180($sp) +lw $t0, 184($sp) lw $t1, 16($t0) sw $t1, 112($sp) lw $a0, 108($sp) @@ -5100,7 +5324,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5117,29 +5341,43 @@ lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 244($sp) +sw $a1, 252($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 280($sp) move $t0, $sp -lw $t1, 660($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 280($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 60($t2) jal $t3 -sw $a1, 268($sp) +sw $a1, 276($sp) la $t0, s_5 -sw $t0, 272($sp) +sw $t0, 284($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5147,25 +5385,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 276($sp) +sw $t0, 288($sp) move $t0, $sp -lw $t1, 272($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 276($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 280($sp) +sw $a1, 292($sp) move $t0, $sp -lw $t1, 276($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 268($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 256($sp) +sw $a1, 264($sp) li $a0, 20 li $v0, 9 syscall @@ -5179,17 +5417,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 252($sp) +sw $t0, 260($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 284($sp) -lw $t0, 252($sp) +sw $a1, 296($sp) +lw $t0, 260($sp) lw $a0, 16($t0) bnez $a0, label_48 li $a0, 20 @@ -5197,7 +5435,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5205,20 +5443,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 300($sp) li $t0, 0 -sw $t0, 292($sp) +sw $t0, 304($sp) move $t0, $sp -lw $t1, 292($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 296($sp) -lw $t1, 288($sp) -sw $t1, 248($sp) +sw $a1, 308($sp) +lw $t1, 300($sp) +sw $t1, 256($sp) b label_49 label_48: li $a0, 20 @@ -5226,7 +5464,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5234,25 +5472,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 300($sp) +sw $t0, 312($sp) li $t0, 1 -sw $t0, 304($sp) +sw $t0, 316($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 300($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 308($sp) -lw $t1, 300($sp) -sw $t1, 248($sp) +sw $a1, 320($sp) +lw $t1, 312($sp) +sw $t1, 256($sp) label_49: lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 92($sp) -lw $t0, 248($sp) +lw $t0, 256($sp) lw $t1, 16($t0) sw $t1, 96($sp) lw $a0, 92($sp) @@ -5264,7 +5502,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5281,29 +5519,43 @@ lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 312($sp) +sw $a1, 324($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 352($sp) move $t0, $sp -lw $t1, 660($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 352($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 64($t2) jal $t3 -sw $a1, 336($sp) +sw $a1, 348($sp) la $t0, s_5 -sw $t0, 340($sp) +sw $t0, 356($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5311,25 +5563,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 344($sp) +sw $t0, 360($sp) move $t0, $sp -lw $t1, 340($t0) +lw $t1, 356($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 344($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 348($sp) +sw $a1, 364($sp) move $t0, $sp -lw $t1, 344($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 336($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 324($sp) +sw $a1, 336($sp) li $a0, 20 li $v0, 9 syscall @@ -5343,17 +5595,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 320($sp) +sw $t0, 332($sp) move $t0, $sp -lw $t1, 324($t0) +lw $t1, 336($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 352($sp) -lw $t0, 320($sp) +sw $a1, 368($sp) +lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_50 li $a0, 20 @@ -5361,7 +5613,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5369,20 +5621,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 356($sp) +sw $t0, 372($sp) li $t0, 0 -sw $t0, 360($sp) +sw $t0, 376($sp) move $t0, $sp -lw $t1, 360($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 356($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 364($sp) -lw $t1, 356($sp) -sw $t1, 316($sp) +sw $a1, 380($sp) +lw $t1, 372($sp) +sw $t1, 328($sp) b label_51 label_50: li $a0, 20 @@ -5390,7 +5642,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5398,25 +5650,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 368($sp) +sw $t0, 384($sp) li $t0, 1 -sw $t0, 372($sp) +sw $t0, 388($sp) move $t0, $sp -lw $t1, 372($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 376($sp) -lw $t1, 368($sp) -sw $t1, 316($sp) +sw $a1, 392($sp) +lw $t1, 384($sp) +sw $t1, 328($sp) label_51: lw $t0, 84($sp) lw $t1, 16($t0) sw $t1, 76($sp) -lw $t0, 316($sp) +lw $t0, 328($sp) lw $t1, 16($t0) sw $t1, 80($sp) lw $a0, 76($sp) @@ -5428,7 +5680,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5445,29 +5697,43 @@ lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 380($sp) +sw $a1, 396($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 424($sp) move $t0, $sp -lw $t1, 660($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 424($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 72($t2) jal $t3 -sw $a1, 404($sp) +sw $a1, 420($sp) la $t0, s_5 -sw $t0, 408($sp) +sw $t0, 428($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5475,25 +5741,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 412($sp) +sw $t0, 432($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 412($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 416($sp) +sw $a1, 436($sp) move $t0, $sp -lw $t1, 412($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 404($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 392($sp) +sw $a1, 408($sp) li $a0, 20 li $v0, 9 syscall @@ -5507,17 +5773,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 388($sp) +sw $t0, 404($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 388($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 420($sp) -lw $t0, 388($sp) +sw $a1, 440($sp) +lw $t0, 404($sp) lw $a0, 16($t0) bnez $a0, label_52 li $a0, 20 @@ -5525,7 +5791,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5533,20 +5799,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 424($sp) +sw $t0, 444($sp) li $t0, 0 -sw $t0, 428($sp) +sw $t0, 448($sp) move $t0, $sp -lw $t1, 428($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 424($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 432($sp) -lw $t1, 424($sp) -sw $t1, 384($sp) +sw $a1, 452($sp) +lw $t1, 444($sp) +sw $t1, 400($sp) b label_53 label_52: li $a0, 20 @@ -5554,7 +5820,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5562,25 +5828,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 436($sp) +sw $t0, 456($sp) li $t0, 1 -sw $t0, 440($sp) +sw $t0, 460($sp) move $t0, $sp -lw $t1, 440($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 436($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 444($sp) -lw $t1, 436($sp) -sw $t1, 384($sp) +sw $a1, 464($sp) +lw $t1, 456($sp) +sw $t1, 400($sp) label_53: lw $t0, 68($sp) lw $t1, 16($t0) sw $t1, 60($sp) -lw $t0, 384($sp) +lw $t0, 400($sp) lw $t1, 16($t0) sw $t1, 64($sp) lw $a0, 60($sp) @@ -5592,7 +5858,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5609,29 +5875,43 @@ lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 448($sp) +sw $a1, 468($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 496($sp) move $t0, $sp -lw $t1, 660($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 496($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 68($t2) jal $t3 -sw $a1, 472($sp) +sw $a1, 492($sp) la $t0, s_5 -sw $t0, 476($sp) +sw $t0, 500($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5639,25 +5919,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 480($sp) +sw $t0, 504($sp) move $t0, $sp -lw $t1, 476($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 480($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 484($sp) +sw $a1, 508($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 472($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 460($sp) +sw $a1, 480($sp) li $a0, 20 li $v0, 9 syscall @@ -5671,17 +5951,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 456($sp) +sw $t0, 476($sp) move $t0, $sp -lw $t1, 460($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 488($sp) -lw $t0, 456($sp) +sw $a1, 512($sp) +lw $t0, 476($sp) lw $a0, 16($t0) bnez $a0, label_54 li $a0, 20 @@ -5689,7 +5969,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5697,20 +5977,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 492($sp) +sw $t0, 516($sp) li $t0, 0 -sw $t0, 496($sp) +sw $t0, 520($sp) move $t0, $sp -lw $t1, 496($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 516($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 500($sp) -lw $t1, 492($sp) -sw $t1, 452($sp) +sw $a1, 524($sp) +lw $t1, 516($sp) +sw $t1, 472($sp) b label_55 label_54: li $a0, 20 @@ -5718,7 +5998,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5726,25 +6006,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 504($sp) +sw $t0, 528($sp) li $t0, 1 -sw $t0, 508($sp) +sw $t0, 532($sp) move $t0, $sp -lw $t1, 508($t0) +lw $t1, 532($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 528($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 512($sp) -lw $t1, 504($sp) -sw $t1, 452($sp) +sw $a1, 536($sp) +lw $t1, 528($sp) +sw $t1, 472($sp) label_55: lw $t0, 52($sp) lw $t1, 16($t0) sw $t1, 44($sp) -lw $t0, 452($sp) +lw $t0, 472($sp) lw $t1, 16($t0) sw $t1, 48($sp) lw $a0, 44($sp) @@ -5756,7 +6036,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5773,29 +6053,43 @@ lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 516($sp) +sw $a1, 540($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 568($sp) move $t0, $sp -lw $t1, 660($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 568($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 76($t2) jal $t3 -sw $a1, 540($sp) +sw $a1, 564($sp) la $t0, s_5 -sw $t0, 544($sp) +sw $t0, 572($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5803,25 +6097,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 548($sp) +sw $t0, 576($sp) move $t0, $sp -lw $t1, 544($t0) +lw $t1, 572($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 576($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 552($sp) +sw $a1, 580($sp) move $t0, $sp -lw $t1, 548($t0) +lw $t1, 576($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 540($t0) +lw $t1, 564($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 528($sp) +sw $a1, 552($sp) li $a0, 20 li $v0, 9 syscall @@ -5835,17 +6129,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 524($sp) +sw $t0, 548($sp) move $t0, $sp -lw $t1, 528($t0) +lw $t1, 552($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 524($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 556($sp) -lw $t0, 524($sp) +sw $a1, 584($sp) +lw $t0, 548($sp) lw $a0, 16($t0) bnez $a0, label_56 li $a0, 20 @@ -5853,7 +6147,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5861,20 +6155,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 560($sp) +sw $t0, 588($sp) li $t0, 0 -sw $t0, 564($sp) +sw $t0, 592($sp) move $t0, $sp -lw $t1, 564($t0) +lw $t1, 592($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 560($t0) +lw $t1, 588($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 568($sp) -lw $t1, 560($sp) -sw $t1, 520($sp) +sw $a1, 596($sp) +lw $t1, 588($sp) +sw $t1, 544($sp) b label_57 label_56: li $a0, 20 @@ -5882,7 +6176,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5890,25 +6184,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 572($sp) +sw $t0, 600($sp) li $t0, 1 -sw $t0, 576($sp) +sw $t0, 604($sp) move $t0, $sp -lw $t1, 576($t0) +lw $t1, 604($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 572($t0) +lw $t1, 600($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 580($sp) -lw $t1, 572($sp) -sw $t1, 520($sp) +sw $a1, 608($sp) +lw $t1, 600($sp) +sw $t1, 544($sp) label_57: lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 28($sp) -lw $t0, 520($sp) +lw $t0, 544($sp) lw $t1, 16($t0) sw $t1, 32($sp) lw $a0, 28($sp) @@ -5920,7 +6214,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -5937,29 +6231,43 @@ lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 584($sp) +sw $a1, 612($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 640($sp) move $t0, $sp -lw $t1, 660($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 656($t0) +lw $t1, 640($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 80($t2) jal $t3 -sw $a1, 608($sp) +sw $a1, 636($sp) la $t0, s_5 -sw $t0, 612($sp) +sw $t0, 644($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -5967,25 +6275,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 616($sp) +sw $t0, 648($sp) move $t0, $sp -lw $t1, 612($t0) +lw $t1, 644($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 616($t0) +lw $t1, 648($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 620($sp) +sw $a1, 652($sp) move $t0, $sp -lw $t1, 616($t0) +lw $t1, 648($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 608($t0) +lw $t1, 636($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 596($sp) +sw $a1, 624($sp) li $a0, 20 li $v0, 9 syscall @@ -5999,17 +6307,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 592($sp) +sw $t0, 620($sp) move $t0, $sp -lw $t1, 596($t0) +lw $t1, 624($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 592($t0) +lw $t1, 620($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 624($sp) -lw $t0, 592($sp) +sw $a1, 656($sp) +lw $t0, 620($sp) lw $a0, 16($t0) bnez $a0, label_58 li $a0, 20 @@ -6017,7 +6325,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -6025,20 +6333,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 628($sp) +sw $t0, 660($sp) li $t0, 0 -sw $t0, 632($sp) +sw $t0, 664($sp) move $t0, $sp -lw $t1, 632($t0) +lw $t1, 664($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 628($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 636($sp) -lw $t1, 628($sp) -sw $t1, 588($sp) +sw $a1, 668($sp) +lw $t1, 660($sp) +sw $t1, 616($sp) b label_59 label_58: li $a0, 20 @@ -6046,7 +6354,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -6054,25 +6362,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 640($sp) +sw $t0, 672($sp) li $t0, 1 -sw $t0, 644($sp) +sw $t0, 676($sp) move $t0, $sp -lw $t1, 644($t0) +lw $t1, 676($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 640($t0) +lw $t1, 672($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 648($sp) -lw $t1, 640($sp) -sw $t1, 588($sp) +sw $a1, 680($sp) +lw $t1, 672($sp) +sw $t1, 616($sp) label_59: lw $t0, 20($sp) lw $t1, 16($t0) sw $t1, 12($sp) -lw $t0, 588($sp) +lw $t0, 616($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $a0, 12($sp) @@ -6084,7 +6392,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -6101,23 +6409,37 @@ lw $t1, 4($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 652($sp) +sw $a1, 684($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 664 +addi $sp, $sp, 696 jr $ra CellularAutomaton.cell_at_next_evolution: -addi $sp, $sp, -168 +addi $sp, $sp, -180 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 28($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 28($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -6129,7 +6451,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -6137,22 +6459,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 3 sw $t0, 32($sp) +li $t0, 3 +sw $t0, 36($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 36($sp) +sw $a1, 40($sp) lw $t0, 24($sp) lw $t1, 16($t0) sw $t1, 16($sp) -lw $t0, 28($sp) +lw $t0, 32($sp) lw $t1, 16($t0) sw $t1, 20($sp) lw $a0, 16($sp) @@ -6181,30 +6503,44 @@ lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 40($sp) +sw $a1, 44($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_60 +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 72($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 84($t2) jal $t3 -sw $a1, 64($sp) +sw $a1, 68($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -6212,28 +6548,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 76($sp) li $t0, 2 -sw $t0, 72($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 76($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) +sw $a1, 84($sp) lw $t0, 68($sp) lw $t1, 16($t0) sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) +lw $t0, 76($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $a0, 60($sp) +lw $t1, 64($sp) seq $a0, $a0, $t1 -sw $a0, 52($sp) +sw $a0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -6247,27 +6583,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 80($sp) -lw $t0, 48($sp) +sw $a1, 88($sp) +lw $t0, 52($sp) lw $a0, 16($t0) bnez $a0, label_61 la $t0, s_6 -sw $t0, 84($sp) +sw $t0, 92($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6275,42 +6611,56 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 96($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) -lw $t1, 88($sp) -sw $t1, 44($sp) +sw $a1, 100($sp) +lw $t1, 96($sp) +sw $t1, 48($sp) b label_62 label_61: +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 116($sp) +sw $a1, 124($sp) la $t0, s_5 -sw $t0, 120($sp) +sw $t0, 132($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6318,25 +6668,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t0, 136($sp) move $t0, $sp -lw $t1, 120($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 128($sp) +sw $a1, 140($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 104($sp) +sw $a1, 112($sp) li $a0, 20 li $v0, 9 syscall @@ -6350,27 +6700,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 132($sp) -lw $t0, 100($sp) +sw $a1, 144($sp) +lw $t0, 108($sp) lw $a0, 16($t0) bnez $a0, label_63 la $t0, s_6 -sw $t0, 136($sp) +sw $t0, 148($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6378,28 +6728,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 140($sp) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 144($sp) -lw $t1, 140($sp) -sw $t1, 96($sp) +sw $a1, 156($sp) +lw $t1, 152($sp) +sw $t1, 104($sp) b label_64 label_63: la $t0, s_5 -sw $t0, 148($sp) +sw $t0, 160($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6407,34 +6757,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 152($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 156($sp) -lw $t1, 152($sp) -sw $t1, 96($sp) +sw $a1, 168($sp) +lw $t1, 164($sp) +sw $t1, 104($sp) label_64: -lw $t1, 96($sp) -sw $t1, 44($sp) +lw $t1, 104($sp) +sw $t1, 48($sp) label_62: -lw $t1, 44($sp) +lw $t1, 48($sp) sw $t1, 4($sp) b label_65 label_60: la $t0, s_5 -sw $t0, 160($sp) +sw $t0, 172($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6442,25 +6792,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 164($sp) +sw $t0, 176($sp) move $t0, $sp -lw $t1, 160($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 168($sp) -lw $t1, 164($sp) +sw $a1, 180($sp) +lw $t1, 176($sp) sw $t1, 4($sp) label_65: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 180 +addi $sp, $sp, 192 jr $ra CellularAutomaton.evolve: -addi $sp, $sp, -128 +addi $sp, $sp, -136 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -6468,7 +6818,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -6490,25 +6840,39 @@ jal Int_init sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) -move $t0, $sp -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 132($t0) -la $t0, void +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 24($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 24($t0) +la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 sw $a1, 20($sp) lw $t1, 20($sp) -sw $t1, 24($sp) +sw $t1, 28($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6516,31 +6880,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 28($sp) -la $t0, empty_str sw $t0, 32($sp) +la $t0, empty_str +sw $t0, 36($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 36($sp) -lw $t1, 28($sp) -sw $t1, 40($sp) +sw $a1, 40($sp) +lw $t1, 32($sp) +sw $t1, 44($sp) label_66: lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) +lw $t0, 28($sp) +lw $t1, 16($t0) +sw $t1, 64($sp) +lw $a0, 60($sp) +lw $t1, 64($sp) slt $a0, $a0, $t1 -sw $a0, 52($sp) +sw $a0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -6554,57 +6918,71 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 64($sp) -lw $t0, 48($sp) +sw $a1, 68($sp) +lw $t0, 52($sp) lw $a0, 16($t0) bnez $a0, label_67 b label_68 label_67: +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 80($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 80($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 88($t2) jal $t3 -sw $a1, 72($sp) +sw $a1, 76($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 44($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 68($sp) -lw $t1, 68($sp) -sw $t1, 40($sp) +sw $a1, 72($sp) +lw $t1, 72($sp) +sw $t1, 44($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -6612,34 +6990,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 104($sp) li $t0, 1 -sw $t0, 100($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 104($sp) +sw $a1, 112($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 88($sp) -lw $t0, 96($sp) +sw $t1, 96($sp) +lw $t0, 104($sp) lw $t1, 16($t0) -sw $t1, 92($sp) -lw $a0, 88($sp) -lw $t1, 92($sp) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) add $a0, $a0, $t1 -sw $a0, 84($sp) +sw $a0, 92($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -6647,35 +7025,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 108($sp) -lw $t1, 80($sp) +sw $a1, 116($sp) +lw $t1, 88($sp) sw $t1, 16($sp) b label_66 label_68: -lw $t0, 132($sp) -lw $t1, 40($sp) +lw $t0, 140($sp) +lw $t1, 44($sp) sw $t1, 28($t0) -lw $t1, 132($sp) -sw $t1, 120($sp) -lw $t1, 120($sp) -sw $t1, 124($sp) -lw $t1, 124($sp) +lw $t1, 140($sp) sw $t1, 128($sp) -lw $a1, 128($sp) +lw $t1, 128($sp) +sw $t1, 132($sp) +lw $t1, 132($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) lw $ra, 0($sp) -addi $sp, $sp, 136 +addi $sp, $sp, 144 jr $ra CellularAutomaton.option: -addi $sp, $sp, -1432 +addi $sp, $sp, -1532 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -6683,7 +7061,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -6712,7 +7090,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6730,14 +7108,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 32($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 36($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -6745,13 +7137,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 20($sp) la $t0, s_8 -sw $t0, 40($sp) +sw $t0, 44($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6759,38 +7151,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 48($sp) +sw $a1, 52($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 56($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 56($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 36($sp) +sw $a1, 40($sp) la $t0, s_9 -sw $t0, 56($sp) +sw $t0, 64($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6798,38 +7204,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 60($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 64($sp) +sw $a1, 72($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 52($sp) +sw $a1, 60($sp) la $t0, s_10 -sw $t0, 72($sp) +sw $t0, 84($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6837,38 +7257,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 76($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 80($sp) +sw $a1, 92($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 96($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 68($sp) +sw $a1, 80($sp) la $t0, s_11 -sw $t0, 88($sp) +sw $t0, 104($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6876,38 +7310,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 92($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 96($sp) +sw $a1, 112($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 84($sp) +sw $a1, 100($sp) la $t0, s_12 -sw $t0, 104($sp) +sw $t0, 124($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6915,38 +7363,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 108($sp) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 112($sp) +sw $a1, 132($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 136($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 136($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 100($sp) +sw $a1, 120($sp) la $t0, s_13 -sw $t0, 120($sp) +sw $t0, 144($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6954,38 +7416,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 120($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 128($sp) +sw $a1, 152($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 116($sp) +sw $a1, 140($sp) la $t0, s_14 -sw $t0, 136($sp) +sw $t0, 164($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -6993,38 +7469,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 140($sp) +sw $t0, 168($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 144($sp) +sw $a1, 172($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 176($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 132($sp) +sw $a1, 160($sp) la $t0, s_15 -sw $t0, 152($sp) +sw $t0, 184($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7032,38 +7522,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 156($sp) +sw $t0, 188($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 160($sp) +sw $a1, 192($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 196($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 196($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 148($sp) +sw $a1, 180($sp) la $t0, s_16 -sw $t0, 168($sp) +sw $t0, 204($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7071,38 +7575,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 172($sp) +sw $t0, 208($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 176($sp) +sw $a1, 212($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 216($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 216($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 164($sp) +sw $a1, 200($sp) la $t0, s_17 -sw $t0, 184($sp) +sw $t0, 224($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7110,38 +7628,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 188($sp) +sw $t0, 228($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 192($sp) +sw $a1, 232($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 236($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 180($sp) +sw $a1, 220($sp) la $t0, s_18 -sw $t0, 200($sp) +sw $t0, 244($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7149,38 +7681,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 204($sp) +sw $t0, 248($sp) move $t0, $sp -lw $t1, 200($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 204($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 208($sp) +sw $a1, 252($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 256($sp) move $t0, $sp -lw $t1, 204($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 256($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 196($sp) +sw $a1, 240($sp) la $t0, s_19 -sw $t0, 216($sp) +sw $t0, 264($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7188,38 +7734,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 220($sp) +sw $t0, 268($sp) move $t0, $sp -lw $t1, 216($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 224($sp) +sw $a1, 272($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 276($sp) move $t0, $sp -lw $t1, 220($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 276($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 212($sp) +sw $a1, 260($sp) la $t0, s_20 -sw $t0, 232($sp) +sw $t0, 284($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7227,38 +7787,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 236($sp) +sw $t0, 288($sp) move $t0, $sp -lw $t1, 232($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 240($sp) +sw $a1, 292($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 296($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 296($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 228($sp) +sw $a1, 280($sp) la $t0, s_21 -sw $t0, 248($sp) +sw $t0, 304($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7266,38 +7840,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 252($sp) +sw $t0, 308($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 256($sp) +sw $a1, 312($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 316($sp) move $t0, $sp -lw $t1, 252($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 244($sp) +sw $a1, 300($sp) la $t0, s_22 -sw $t0, 264($sp) +sw $t0, 324($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7305,38 +7893,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 268($sp) +sw $t0, 328($sp) move $t0, $sp -lw $t1, 264($t0) +lw $t1, 324($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 268($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 272($sp) +sw $a1, 332($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 336($sp) move $t0, $sp -lw $t1, 268($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 336($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 260($sp) +sw $a1, 320($sp) la $t0, s_23 -sw $t0, 280($sp) +sw $t0, 344($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7344,38 +7946,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 284($sp) +sw $t0, 348($sp) move $t0, $sp -lw $t1, 280($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 288($sp) +sw $a1, 352($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 356($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 356($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 276($sp) +sw $a1, 340($sp) la $t0, s_24 -sw $t0, 296($sp) +sw $t0, 364($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7383,38 +7999,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 300($sp) +sw $t0, 368($sp) move $t0, $sp -lw $t1, 296($t0) +lw $t1, 364($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 300($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 304($sp) +sw $a1, 372($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 376($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 376($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 292($sp) +sw $a1, 360($sp) la $t0, s_25 -sw $t0, 312($sp) +sw $t0, 384($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7422,38 +8052,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 316($sp) +sw $t0, 388($sp) move $t0, $sp -lw $t1, 312($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 320($sp) +sw $a1, 392($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 396($sp) move $t0, $sp -lw $t1, 316($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 396($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 308($sp) +sw $a1, 380($sp) la $t0, s_26 -sw $t0, 328($sp) +sw $t0, 404($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7461,38 +8105,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 332($sp) +sw $t0, 408($sp) move $t0, $sp -lw $t1, 328($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 336($sp) +sw $a1, 412($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 416($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 416($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 324($sp) +sw $a1, 400($sp) la $t0, s_27 -sw $t0, 344($sp) +sw $t0, 424($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7500,38 +8158,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 348($sp) +sw $t0, 428($sp) move $t0, $sp -lw $t1, 344($t0) +lw $t1, 424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 348($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 352($sp) +sw $a1, 432($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 436($sp) move $t0, $sp -lw $t1, 348($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 340($sp) +sw $a1, 420($sp) la $t0, s_28 -sw $t0, 360($sp) +sw $t0, 444($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7539,38 +8211,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 364($sp) +sw $t0, 448($sp) move $t0, $sp -lw $t1, 360($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 364($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 368($sp) +sw $a1, 452($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 456($sp) move $t0, $sp -lw $t1, 364($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 456($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 356($sp) +sw $a1, 440($sp) la $t0, s_29 -sw $t0, 376($sp) +sw $t0, 464($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7578,51 +8264,79 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 380($sp) +sw $t0, 468($sp) move $t0, $sp -lw $t1, 376($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 380($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 384($sp) +sw $a1, 472($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 476($sp) move $t0, $sp -lw $t1, 380($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 476($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 372($sp) +sw $a1, 460($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 484($sp) move $t0, $sp -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 484($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 388($sp) -lw $t1, 388($sp) +sw $a1, 480($sp) +lw $t1, 480($sp) sw $t1, 16($sp) la $t0, s_3 -sw $t0, 400($sp) +sw $t0, 496($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -7630,36 +8344,50 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 404($sp) +sw $t0, 500($sp) move $t0, $sp -lw $t1, 400($t0) +lw $t1, 496($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 404($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 408($sp) +sw $a1, 504($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 508($sp) move $t0, $sp -lw $t1, 404($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 1536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1436($t0) +lw $t1, 508($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 396($sp) +sw $a1, 492($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7667,28 +8395,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 432($sp) +sw $t0, 532($sp) li $t0, 1 -sw $t0, 436($sp) +sw $t0, 536($sp) move $t0, $sp -lw $t1, 436($t0) +lw $t1, 536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 432($t0) +lw $t1, 532($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 440($sp) +sw $a1, 540($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 424($sp) -lw $t0, 432($sp) +sw $t1, 524($sp) +lw $t0, 532($sp) lw $t1, 16($t0) -sw $t1, 428($sp) -lw $a0, 424($sp) -lw $t1, 428($sp) +sw $t1, 528($sp) +lw $a0, 524($sp) +lw $t1, 528($sp) seq $a0, $a0, $t1 -sw $a0, 420($sp) +sw $a0, 520($sp) li $a0, 20 li $v0, 9 syscall @@ -7702,17 +8430,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 416($sp) +sw $t0, 516($sp) move $t0, $sp -lw $t1, 420($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 416($t0) +lw $t1, 516($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 444($sp) -lw $t0, 416($sp) +sw $a1, 544($sp) +lw $t0, 516($sp) lw $a0, 16($t0) bnez $a0, label_69 li $a0, 20 @@ -7720,7 +8448,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7728,28 +8456,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 468($sp) +sw $t0, 568($sp) li $t0, 2 -sw $t0, 472($sp) +sw $t0, 572($sp) move $t0, $sp -lw $t1, 472($t0) +lw $t1, 572($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 568($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 476($sp) +sw $a1, 576($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 460($sp) -lw $t0, 468($sp) +sw $t1, 560($sp) +lw $t0, 568($sp) lw $t1, 16($t0) -sw $t1, 464($sp) -lw $a0, 460($sp) -lw $t1, 464($sp) +sw $t1, 564($sp) +lw $a0, 560($sp) +lw $t1, 564($sp) seq $a0, $a0, $t1 -sw $a0, 456($sp) +sw $a0, 556($sp) li $a0, 20 li $v0, 9 syscall @@ -7763,17 +8491,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 452($sp) +sw $t0, 552($sp) move $t0, $sp -lw $t1, 456($t0) +lw $t1, 556($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 452($t0) +lw $t1, 552($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 480($sp) -lw $t0, 452($sp) +sw $a1, 580($sp) +lw $t0, 552($sp) lw $a0, 16($t0) bnez $a0, label_70 li $a0, 20 @@ -7781,7 +8509,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7789,28 +8517,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 504($sp) +sw $t0, 604($sp) li $t0, 3 -sw $t0, 508($sp) +sw $t0, 608($sp) move $t0, $sp -lw $t1, 508($t0) +lw $t1, 608($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 604($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 512($sp) +sw $a1, 612($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 496($sp) -lw $t0, 504($sp) +sw $t1, 596($sp) +lw $t0, 604($sp) lw $t1, 16($t0) -sw $t1, 500($sp) -lw $a0, 496($sp) -lw $t1, 500($sp) +sw $t1, 600($sp) +lw $a0, 596($sp) +lw $t1, 600($sp) seq $a0, $a0, $t1 -sw $a0, 492($sp) +sw $a0, 592($sp) li $a0, 20 li $v0, 9 syscall @@ -7824,17 +8552,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 488($sp) +sw $t0, 588($sp) move $t0, $sp -lw $t1, 492($t0) +lw $t1, 592($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 488($t0) +lw $t1, 588($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 516($sp) -lw $t0, 488($sp) +sw $a1, 616($sp) +lw $t0, 588($sp) lw $a0, 16($t0) bnez $a0, label_71 li $a0, 20 @@ -7842,7 +8570,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7850,28 +8578,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 540($sp) +sw $t0, 640($sp) li $t0, 4 -sw $t0, 544($sp) +sw $t0, 644($sp) move $t0, $sp -lw $t1, 544($t0) +lw $t1, 644($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 540($t0) +lw $t1, 640($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 548($sp) +sw $a1, 648($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 532($sp) -lw $t0, 540($sp) +sw $t1, 632($sp) +lw $t0, 640($sp) lw $t1, 16($t0) -sw $t1, 536($sp) -lw $a0, 532($sp) -lw $t1, 536($sp) +sw $t1, 636($sp) +lw $a0, 632($sp) +lw $t1, 636($sp) seq $a0, $a0, $t1 -sw $a0, 528($sp) +sw $a0, 628($sp) li $a0, 20 li $v0, 9 syscall @@ -7885,17 +8613,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 524($sp) +sw $t0, 624($sp) move $t0, $sp -lw $t1, 528($t0) +lw $t1, 628($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 524($t0) +lw $t1, 624($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 552($sp) -lw $t0, 524($sp) +sw $a1, 652($sp) +lw $t0, 624($sp) lw $a0, 16($t0) bnez $a0, label_72 li $a0, 20 @@ -7903,7 +8631,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7911,28 +8639,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 576($sp) +sw $t0, 676($sp) li $t0, 5 -sw $t0, 580($sp) +sw $t0, 680($sp) move $t0, $sp -lw $t1, 580($t0) +lw $t1, 680($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 576($t0) +lw $t1, 676($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 584($sp) +sw $a1, 684($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 568($sp) -lw $t0, 576($sp) +sw $t1, 668($sp) +lw $t0, 676($sp) lw $t1, 16($t0) -sw $t1, 572($sp) -lw $a0, 568($sp) -lw $t1, 572($sp) +sw $t1, 672($sp) +lw $a0, 668($sp) +lw $t1, 672($sp) seq $a0, $a0, $t1 -sw $a0, 564($sp) +sw $a0, 664($sp) li $a0, 20 li $v0, 9 syscall @@ -7946,17 +8674,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 560($sp) +sw $t0, 660($sp) move $t0, $sp -lw $t1, 564($t0) +lw $t1, 664($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 560($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 588($sp) -lw $t0, 560($sp) +sw $a1, 688($sp) +lw $t0, 660($sp) lw $a0, 16($t0) bnez $a0, label_73 li $a0, 20 @@ -7964,7 +8692,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -7972,28 +8700,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 612($sp) +sw $t0, 712($sp) li $t0, 6 -sw $t0, 616($sp) +sw $t0, 716($sp) move $t0, $sp -lw $t1, 616($t0) +lw $t1, 716($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 612($t0) +lw $t1, 712($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 620($sp) +sw $a1, 720($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 604($sp) -lw $t0, 612($sp) +sw $t1, 704($sp) +lw $t0, 712($sp) lw $t1, 16($t0) -sw $t1, 608($sp) -lw $a0, 604($sp) -lw $t1, 608($sp) +sw $t1, 708($sp) +lw $a0, 704($sp) +lw $t1, 708($sp) seq $a0, $a0, $t1 -sw $a0, 600($sp) +sw $a0, 700($sp) li $a0, 20 li $v0, 9 syscall @@ -8007,17 +8735,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 596($sp) +sw $t0, 696($sp) move $t0, $sp -lw $t1, 600($t0) +lw $t1, 700($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 596($t0) +lw $t1, 696($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 624($sp) -lw $t0, 596($sp) +sw $a1, 724($sp) +lw $t0, 696($sp) lw $a0, 16($t0) bnez $a0, label_74 li $a0, 20 @@ -8025,7 +8753,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8033,28 +8761,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 648($sp) +sw $t0, 748($sp) li $t0, 7 -sw $t0, 652($sp) +sw $t0, 752($sp) move $t0, $sp -lw $t1, 652($t0) +lw $t1, 752($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 648($t0) +lw $t1, 748($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 656($sp) +sw $a1, 756($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 640($sp) -lw $t0, 648($sp) +sw $t1, 740($sp) +lw $t0, 748($sp) lw $t1, 16($t0) -sw $t1, 644($sp) -lw $a0, 640($sp) -lw $t1, 644($sp) +sw $t1, 744($sp) +lw $a0, 740($sp) +lw $t1, 744($sp) seq $a0, $a0, $t1 -sw $a0, 636($sp) +sw $a0, 736($sp) li $a0, 20 li $v0, 9 syscall @@ -8068,17 +8796,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 632($sp) +sw $t0, 732($sp) move $t0, $sp -lw $t1, 636($t0) +lw $t1, 736($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 632($t0) +lw $t1, 732($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 660($sp) -lw $t0, 632($sp) +sw $a1, 760($sp) +lw $t0, 732($sp) lw $a0, 16($t0) bnez $a0, label_75 li $a0, 20 @@ -8086,7 +8814,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8094,28 +8822,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 684($sp) +sw $t0, 784($sp) li $t0, 8 -sw $t0, 688($sp) +sw $t0, 788($sp) move $t0, $sp -lw $t1, 688($t0) +lw $t1, 788($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 684($t0) +lw $t1, 784($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 692($sp) +sw $a1, 792($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 676($sp) -lw $t0, 684($sp) +sw $t1, 776($sp) +lw $t0, 784($sp) lw $t1, 16($t0) -sw $t1, 680($sp) -lw $a0, 676($sp) -lw $t1, 680($sp) +sw $t1, 780($sp) +lw $a0, 776($sp) +lw $t1, 780($sp) seq $a0, $a0, $t1 -sw $a0, 672($sp) +sw $a0, 772($sp) li $a0, 20 li $v0, 9 syscall @@ -8129,17 +8857,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 668($sp) +sw $t0, 768($sp) move $t0, $sp -lw $t1, 672($t0) +lw $t1, 772($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 668($t0) +lw $t1, 768($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 696($sp) -lw $t0, 668($sp) +sw $a1, 796($sp) +lw $t0, 768($sp) lw $a0, 16($t0) bnez $a0, label_76 li $a0, 20 @@ -8147,7 +8875,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8155,28 +8883,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 720($sp) +sw $t0, 820($sp) li $t0, 9 -sw $t0, 724($sp) +sw $t0, 824($sp) move $t0, $sp -lw $t1, 724($t0) +lw $t1, 824($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 720($t0) +lw $t1, 820($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 728($sp) +sw $a1, 828($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 712($sp) -lw $t0, 720($sp) +sw $t1, 812($sp) +lw $t0, 820($sp) lw $t1, 16($t0) -sw $t1, 716($sp) -lw $a0, 712($sp) -lw $t1, 716($sp) +sw $t1, 816($sp) +lw $a0, 812($sp) +lw $t1, 816($sp) seq $a0, $a0, $t1 -sw $a0, 708($sp) +sw $a0, 808($sp) li $a0, 20 li $v0, 9 syscall @@ -8190,17 +8918,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 704($sp) +sw $t0, 804($sp) move $t0, $sp -lw $t1, 708($t0) +lw $t1, 808($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 704($t0) +lw $t1, 804($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 732($sp) -lw $t0, 704($sp) +sw $a1, 832($sp) +lw $t0, 804($sp) lw $a0, 16($t0) bnez $a0, label_77 li $a0, 20 @@ -8208,7 +8936,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8216,28 +8944,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 756($sp) +sw $t0, 856($sp) li $t0, 10 -sw $t0, 760($sp) +sw $t0, 860($sp) move $t0, $sp -lw $t1, 760($t0) +lw $t1, 860($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 756($t0) +lw $t1, 856($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 764($sp) +sw $a1, 864($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 748($sp) -lw $t0, 756($sp) +sw $t1, 848($sp) +lw $t0, 856($sp) lw $t1, 16($t0) -sw $t1, 752($sp) -lw $a0, 748($sp) -lw $t1, 752($sp) +sw $t1, 852($sp) +lw $a0, 848($sp) +lw $t1, 852($sp) seq $a0, $a0, $t1 -sw $a0, 744($sp) +sw $a0, 844($sp) li $a0, 20 li $v0, 9 syscall @@ -8251,17 +8979,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 740($sp) +sw $t0, 840($sp) move $t0, $sp -lw $t1, 744($t0) +lw $t1, 844($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 740($t0) +lw $t1, 840($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 768($sp) -lw $t0, 740($sp) +sw $a1, 868($sp) +lw $t0, 840($sp) lw $a0, 16($t0) bnez $a0, label_78 li $a0, 20 @@ -8269,7 +8997,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8277,28 +9005,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 792($sp) +sw $t0, 892($sp) li $t0, 11 -sw $t0, 796($sp) +sw $t0, 896($sp) move $t0, $sp -lw $t1, 796($t0) +lw $t1, 896($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 792($t0) +lw $t1, 892($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 800($sp) +sw $a1, 900($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 784($sp) -lw $t0, 792($sp) +sw $t1, 884($sp) +lw $t0, 892($sp) lw $t1, 16($t0) -sw $t1, 788($sp) -lw $a0, 784($sp) -lw $t1, 788($sp) +sw $t1, 888($sp) +lw $a0, 884($sp) +lw $t1, 888($sp) seq $a0, $a0, $t1 -sw $a0, 780($sp) +sw $a0, 880($sp) li $a0, 20 li $v0, 9 syscall @@ -8312,17 +9040,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 776($sp) +sw $t0, 876($sp) move $t0, $sp -lw $t1, 780($t0) +lw $t1, 880($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 776($t0) +lw $t1, 876($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 804($sp) -lw $t0, 776($sp) +sw $a1, 904($sp) +lw $t0, 876($sp) lw $a0, 16($t0) bnez $a0, label_79 li $a0, 20 @@ -8330,7 +9058,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8338,28 +9066,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 828($sp) +sw $t0, 928($sp) li $t0, 12 -sw $t0, 832($sp) +sw $t0, 932($sp) move $t0, $sp -lw $t1, 832($t0) +lw $t1, 932($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 828($t0) +lw $t1, 928($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 836($sp) +sw $a1, 936($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 820($sp) -lw $t0, 828($sp) +sw $t1, 920($sp) +lw $t0, 928($sp) lw $t1, 16($t0) -sw $t1, 824($sp) -lw $a0, 820($sp) -lw $t1, 824($sp) +sw $t1, 924($sp) +lw $a0, 920($sp) +lw $t1, 924($sp) seq $a0, $a0, $t1 -sw $a0, 816($sp) +sw $a0, 916($sp) li $a0, 20 li $v0, 9 syscall @@ -8373,17 +9101,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 812($sp) +sw $t0, 912($sp) move $t0, $sp -lw $t1, 816($t0) +lw $t1, 916($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 812($t0) +lw $t1, 912($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 840($sp) -lw $t0, 812($sp) +sw $a1, 940($sp) +lw $t0, 912($sp) lw $a0, 16($t0) bnez $a0, label_80 li $a0, 20 @@ -8391,7 +9119,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8399,28 +9127,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 864($sp) +sw $t0, 964($sp) li $t0, 13 -sw $t0, 868($sp) +sw $t0, 968($sp) move $t0, $sp -lw $t1, 868($t0) +lw $t1, 968($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 864($t0) +lw $t1, 964($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 872($sp) +sw $a1, 972($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 856($sp) -lw $t0, 864($sp) +sw $t1, 956($sp) +lw $t0, 964($sp) lw $t1, 16($t0) -sw $t1, 860($sp) -lw $a0, 856($sp) -lw $t1, 860($sp) +sw $t1, 960($sp) +lw $a0, 956($sp) +lw $t1, 960($sp) seq $a0, $a0, $t1 -sw $a0, 852($sp) +sw $a0, 952($sp) li $a0, 20 li $v0, 9 syscall @@ -8434,17 +9162,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 848($sp) +sw $t0, 948($sp) move $t0, $sp -lw $t1, 852($t0) +lw $t1, 952($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 848($t0) +lw $t1, 948($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 876($sp) -lw $t0, 848($sp) +sw $a1, 976($sp) +lw $t0, 948($sp) lw $a0, 16($t0) bnez $a0, label_81 li $a0, 20 @@ -8452,7 +9180,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8460,28 +9188,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 900($sp) +sw $t0, 1000($sp) li $t0, 14 -sw $t0, 904($sp) +sw $t0, 1004($sp) move $t0, $sp -lw $t1, 904($t0) +lw $t1, 1004($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 900($t0) +lw $t1, 1000($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 908($sp) +sw $a1, 1008($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 892($sp) -lw $t0, 900($sp) +sw $t1, 992($sp) +lw $t0, 1000($sp) lw $t1, 16($t0) -sw $t1, 896($sp) -lw $a0, 892($sp) -lw $t1, 896($sp) +sw $t1, 996($sp) +lw $a0, 992($sp) +lw $t1, 996($sp) seq $a0, $a0, $t1 -sw $a0, 888($sp) +sw $a0, 988($sp) li $a0, 20 li $v0, 9 syscall @@ -8495,17 +9223,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 884($sp) +sw $t0, 984($sp) move $t0, $sp -lw $t1, 888($t0) +lw $t1, 988($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 884($t0) +lw $t1, 984($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 912($sp) -lw $t0, 884($sp) +sw $a1, 1012($sp) +lw $t0, 984($sp) lw $a0, 16($t0) bnez $a0, label_82 li $a0, 20 @@ -8513,7 +9241,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8521,28 +9249,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 936($sp) +sw $t0, 1036($sp) li $t0, 15 -sw $t0, 940($sp) +sw $t0, 1040($sp) move $t0, $sp -lw $t1, 940($t0) +lw $t1, 1040($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 936($t0) +lw $t1, 1036($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 944($sp) +sw $a1, 1044($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 928($sp) -lw $t0, 936($sp) +sw $t1, 1028($sp) +lw $t0, 1036($sp) lw $t1, 16($t0) -sw $t1, 932($sp) -lw $a0, 928($sp) -lw $t1, 932($sp) +sw $t1, 1032($sp) +lw $a0, 1028($sp) +lw $t1, 1032($sp) seq $a0, $a0, $t1 -sw $a0, 924($sp) +sw $a0, 1024($sp) li $a0, 20 li $v0, 9 syscall @@ -8556,17 +9284,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 920($sp) +sw $t0, 1020($sp) move $t0, $sp -lw $t1, 924($t0) +lw $t1, 1024($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 920($t0) +lw $t1, 1020($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 948($sp) -lw $t0, 920($sp) +sw $a1, 1048($sp) +lw $t0, 1020($sp) lw $a0, 16($t0) bnez $a0, label_83 li $a0, 20 @@ -8574,7 +9302,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8582,28 +9310,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 972($sp) +sw $t0, 1072($sp) li $t0, 16 -sw $t0, 976($sp) +sw $t0, 1076($sp) move $t0, $sp -lw $t1, 976($t0) +lw $t1, 1076($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 972($t0) +lw $t1, 1072($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 980($sp) +sw $a1, 1080($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 964($sp) -lw $t0, 972($sp) +sw $t1, 1064($sp) +lw $t0, 1072($sp) lw $t1, 16($t0) -sw $t1, 968($sp) -lw $a0, 964($sp) -lw $t1, 968($sp) +sw $t1, 1068($sp) +lw $a0, 1064($sp) +lw $t1, 1068($sp) seq $a0, $a0, $t1 -sw $a0, 960($sp) +sw $a0, 1060($sp) li $a0, 20 li $v0, 9 syscall @@ -8617,17 +9345,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 956($sp) +sw $t0, 1056($sp) move $t0, $sp -lw $t1, 960($t0) +lw $t1, 1060($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 956($t0) +lw $t1, 1056($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 984($sp) -lw $t0, 956($sp) +sw $a1, 1084($sp) +lw $t0, 1056($sp) lw $a0, 16($t0) bnez $a0, label_84 li $a0, 20 @@ -8635,7 +9363,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8643,28 +9371,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1008($sp) +sw $t0, 1108($sp) li $t0, 17 -sw $t0, 1012($sp) +sw $t0, 1112($sp) move $t0, $sp -lw $t1, 1012($t0) +lw $t1, 1112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1008($t0) +lw $t1, 1108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1016($sp) +sw $a1, 1116($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1000($sp) -lw $t0, 1008($sp) +sw $t1, 1100($sp) +lw $t0, 1108($sp) lw $t1, 16($t0) -sw $t1, 1004($sp) -lw $a0, 1000($sp) -lw $t1, 1004($sp) +sw $t1, 1104($sp) +lw $a0, 1100($sp) +lw $t1, 1104($sp) seq $a0, $a0, $t1 -sw $a0, 996($sp) +sw $a0, 1096($sp) li $a0, 20 li $v0, 9 syscall @@ -8678,17 +9406,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 992($sp) +sw $t0, 1092($sp) move $t0, $sp -lw $t1, 996($t0) +lw $t1, 1096($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 992($t0) +lw $t1, 1092($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1020($sp) -lw $t0, 992($sp) +sw $a1, 1120($sp) +lw $t0, 1092($sp) lw $a0, 16($t0) bnez $a0, label_85 li $a0, 20 @@ -8696,7 +9424,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8704,28 +9432,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1044($sp) +sw $t0, 1144($sp) li $t0, 18 -sw $t0, 1048($sp) +sw $t0, 1148($sp) move $t0, $sp -lw $t1, 1048($t0) +lw $t1, 1148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1044($t0) +lw $t1, 1144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1052($sp) +sw $a1, 1152($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1036($sp) -lw $t0, 1044($sp) +sw $t1, 1136($sp) +lw $t0, 1144($sp) lw $t1, 16($t0) -sw $t1, 1040($sp) -lw $a0, 1036($sp) -lw $t1, 1040($sp) +sw $t1, 1140($sp) +lw $a0, 1136($sp) +lw $t1, 1140($sp) seq $a0, $a0, $t1 -sw $a0, 1032($sp) +sw $a0, 1132($sp) li $a0, 20 li $v0, 9 syscall @@ -8739,17 +9467,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1028($sp) +sw $t0, 1128($sp) move $t0, $sp -lw $t1, 1032($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1028($t0) +lw $t1, 1128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1056($sp) -lw $t0, 1028($sp) +sw $a1, 1156($sp) +lw $t0, 1128($sp) lw $a0, 16($t0) bnez $a0, label_86 li $a0, 20 @@ -8757,7 +9485,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8765,28 +9493,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1080($sp) +sw $t0, 1180($sp) li $t0, 19 -sw $t0, 1084($sp) +sw $t0, 1184($sp) move $t0, $sp -lw $t1, 1084($t0) +lw $t1, 1184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1080($t0) +lw $t1, 1180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1088($sp) +sw $a1, 1188($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1072($sp) -lw $t0, 1080($sp) +sw $t1, 1172($sp) +lw $t0, 1180($sp) lw $t1, 16($t0) -sw $t1, 1076($sp) -lw $a0, 1072($sp) -lw $t1, 1076($sp) +sw $t1, 1176($sp) +lw $a0, 1172($sp) +lw $t1, 1176($sp) seq $a0, $a0, $t1 -sw $a0, 1068($sp) +sw $a0, 1168($sp) li $a0, 20 li $v0, 9 syscall @@ -8800,17 +9528,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1064($sp) +sw $t0, 1164($sp) move $t0, $sp -lw $t1, 1068($t0) +lw $t1, 1168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1064($t0) +lw $t1, 1164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1092($sp) -lw $t0, 1064($sp) +sw $a1, 1192($sp) +lw $t0, 1164($sp) lw $a0, 16($t0) bnez $a0, label_87 li $a0, 20 @@ -8818,7 +9546,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8826,28 +9554,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1116($sp) +sw $t0, 1216($sp) li $t0, 20 -sw $t0, 1120($sp) +sw $t0, 1220($sp) move $t0, $sp -lw $t1, 1120($t0) +lw $t1, 1220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1116($t0) +lw $t1, 1216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1124($sp) +sw $a1, 1224($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1108($sp) -lw $t0, 1116($sp) +sw $t1, 1208($sp) +lw $t0, 1216($sp) lw $t1, 16($t0) -sw $t1, 1112($sp) -lw $a0, 1108($sp) -lw $t1, 1112($sp) +sw $t1, 1212($sp) +lw $a0, 1208($sp) +lw $t1, 1212($sp) seq $a0, $a0, $t1 -sw $a0, 1104($sp) +sw $a0, 1204($sp) li $a0, 20 li $v0, 9 syscall @@ -8861,17 +9589,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1100($sp) +sw $t0, 1200($sp) move $t0, $sp -lw $t1, 1104($t0) +lw $t1, 1204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1100($t0) +lw $t1, 1200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1128($sp) -lw $t0, 1100($sp) +sw $a1, 1228($sp) +lw $t0, 1200($sp) lw $a0, 16($t0) bnez $a0, label_88 li $a0, 20 @@ -8879,7 +9607,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -8887,28 +9615,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1152($sp) +sw $t0, 1252($sp) li $t0, 21 -sw $t0, 1156($sp) +sw $t0, 1256($sp) move $t0, $sp -lw $t1, 1156($t0) +lw $t1, 1256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1152($t0) +lw $t1, 1252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1160($sp) +sw $a1, 1260($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1144($sp) -lw $t0, 1152($sp) +sw $t1, 1244($sp) +lw $t0, 1252($sp) lw $t1, 16($t0) -sw $t1, 1148($sp) -lw $a0, 1144($sp) -lw $t1, 1148($sp) +sw $t1, 1248($sp) +lw $a0, 1244($sp) +lw $t1, 1248($sp) seq $a0, $a0, $t1 -sw $a0, 1140($sp) +sw $a0, 1240($sp) li $a0, 20 li $v0, 9 syscall @@ -8922,27 +9650,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1136($sp) +sw $t0, 1236($sp) move $t0, $sp -lw $t1, 1140($t0) +lw $t1, 1240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1136($t0) +lw $t1, 1236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1164($sp) -lw $t0, 1136($sp) +sw $a1, 1264($sp) +lw $t0, 1236($sp) lw $a0, 16($t0) bnez $a0, label_89 la $t0, s_30 -sw $t0, 1168($sp) +sw $t0, 1268($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8950,28 +9678,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1172($sp) +sw $t0, 1272($sp) move $t0, $sp -lw $t1, 1168($t0) +lw $t1, 1268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1172($t0) +lw $t1, 1272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1176($sp) -lw $t1, 1172($sp) -sw $t1, 1132($sp) +sw $a1, 1276($sp) +lw $t1, 1272($sp) +sw $t1, 1232($sp) b label_90 label_89: la $t0, s_31 -sw $t0, 1180($sp) +sw $t0, 1280($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -8979,31 +9707,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1184($sp) +sw $t0, 1284($sp) move $t0, $sp -lw $t1, 1180($t0) +lw $t1, 1280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1184($t0) +lw $t1, 1284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1188($sp) -lw $t1, 1184($sp) -sw $t1, 1132($sp) +sw $a1, 1288($sp) +lw $t1, 1284($sp) +sw $t1, 1232($sp) label_90: -lw $t1, 1132($sp) -sw $t1, 1096($sp) +lw $t1, 1232($sp) +sw $t1, 1196($sp) b label_91 label_88: la $t0, s_32 -sw $t0, 1192($sp) +sw $t0, 1292($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9011,31 +9739,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1196($sp) +sw $t0, 1296($sp) move $t0, $sp -lw $t1, 1192($t0) +lw $t1, 1292($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1196($t0) +lw $t1, 1296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1200($sp) -lw $t1, 1196($sp) -sw $t1, 1096($sp) +sw $a1, 1300($sp) +lw $t1, 1296($sp) +sw $t1, 1196($sp) label_91: -lw $t1, 1096($sp) -sw $t1, 1060($sp) +lw $t1, 1196($sp) +sw $t1, 1160($sp) b label_92 label_87: la $t0, s_33 -sw $t0, 1204($sp) +sw $t0, 1304($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9043,31 +9771,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1208($sp) +sw $t0, 1308($sp) move $t0, $sp -lw $t1, 1204($t0) +lw $t1, 1304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1208($t0) +lw $t1, 1308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1212($sp) -lw $t1, 1208($sp) -sw $t1, 1060($sp) +sw $a1, 1312($sp) +lw $t1, 1308($sp) +sw $t1, 1160($sp) label_92: -lw $t1, 1060($sp) -sw $t1, 1024($sp) +lw $t1, 1160($sp) +sw $t1, 1124($sp) b label_93 label_86: la $t0, s_34 -sw $t0, 1216($sp) +sw $t0, 1316($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9075,31 +9803,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1220($sp) +sw $t0, 1320($sp) move $t0, $sp -lw $t1, 1216($t0) +lw $t1, 1316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1220($t0) +lw $t1, 1320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1224($sp) -lw $t1, 1220($sp) -sw $t1, 1024($sp) +sw $a1, 1324($sp) +lw $t1, 1320($sp) +sw $t1, 1124($sp) label_93: -lw $t1, 1024($sp) -sw $t1, 988($sp) +lw $t1, 1124($sp) +sw $t1, 1088($sp) b label_94 label_85: la $t0, s_35 -sw $t0, 1228($sp) +sw $t0, 1328($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9107,31 +9835,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1232($sp) +sw $t0, 1332($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1232($t0) +lw $t1, 1332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1236($sp) -lw $t1, 1232($sp) -sw $t1, 988($sp) +sw $a1, 1336($sp) +lw $t1, 1332($sp) +sw $t1, 1088($sp) label_94: -lw $t1, 988($sp) -sw $t1, 952($sp) +lw $t1, 1088($sp) +sw $t1, 1052($sp) b label_95 label_84: la $t0, s_36 -sw $t0, 1240($sp) +sw $t0, 1340($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9139,31 +9867,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1244($sp) +sw $t0, 1344($sp) move $t0, $sp -lw $t1, 1240($t0) +lw $t1, 1340($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1244($t0) +lw $t1, 1344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1248($sp) -lw $t1, 1244($sp) -sw $t1, 952($sp) +sw $a1, 1348($sp) +lw $t1, 1344($sp) +sw $t1, 1052($sp) label_95: -lw $t1, 952($sp) -sw $t1, 916($sp) +lw $t1, 1052($sp) +sw $t1, 1016($sp) b label_96 label_83: la $t0, s_37 -sw $t0, 1252($sp) +sw $t0, 1352($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9171,31 +9899,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1256($sp) +sw $t0, 1356($sp) move $t0, $sp -lw $t1, 1252($t0) +lw $t1, 1352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1256($t0) +lw $t1, 1356($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1260($sp) -lw $t1, 1256($sp) -sw $t1, 916($sp) +sw $a1, 1360($sp) +lw $t1, 1356($sp) +sw $t1, 1016($sp) label_96: -lw $t1, 916($sp) -sw $t1, 880($sp) +lw $t1, 1016($sp) +sw $t1, 980($sp) b label_97 label_82: la $t0, s_38 -sw $t0, 1264($sp) +sw $t0, 1364($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9203,31 +9931,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1268($sp) +sw $t0, 1368($sp) move $t0, $sp -lw $t1, 1264($t0) +lw $t1, 1364($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1268($t0) +lw $t1, 1368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1272($sp) -lw $t1, 1268($sp) -sw $t1, 880($sp) +sw $a1, 1372($sp) +lw $t1, 1368($sp) +sw $t1, 980($sp) label_97: -lw $t1, 880($sp) -sw $t1, 844($sp) +lw $t1, 980($sp) +sw $t1, 944($sp) b label_98 label_81: la $t0, s_39 -sw $t0, 1276($sp) +sw $t0, 1376($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9235,31 +9963,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1280($sp) +sw $t0, 1380($sp) move $t0, $sp -lw $t1, 1276($t0) +lw $t1, 1376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1280($t0) +lw $t1, 1380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1284($sp) -lw $t1, 1280($sp) -sw $t1, 844($sp) +sw $a1, 1384($sp) +lw $t1, 1380($sp) +sw $t1, 944($sp) label_98: -lw $t1, 844($sp) -sw $t1, 808($sp) +lw $t1, 944($sp) +sw $t1, 908($sp) b label_99 label_80: la $t0, s_40 -sw $t0, 1288($sp) +sw $t0, 1388($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9267,31 +9995,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1292($sp) +sw $t0, 1392($sp) move $t0, $sp -lw $t1, 1288($t0) +lw $t1, 1388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1292($t0) +lw $t1, 1392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1296($sp) -lw $t1, 1292($sp) -sw $t1, 808($sp) +sw $a1, 1396($sp) +lw $t1, 1392($sp) +sw $t1, 908($sp) label_99: -lw $t1, 808($sp) -sw $t1, 772($sp) +lw $t1, 908($sp) +sw $t1, 872($sp) b label_100 label_79: la $t0, s_41 -sw $t0, 1300($sp) +sw $t0, 1400($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9299,31 +10027,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1304($sp) +sw $t0, 1404($sp) move $t0, $sp -lw $t1, 1300($t0) +lw $t1, 1400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1304($t0) +lw $t1, 1404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1308($sp) -lw $t1, 1304($sp) -sw $t1, 772($sp) +sw $a1, 1408($sp) +lw $t1, 1404($sp) +sw $t1, 872($sp) label_100: -lw $t1, 772($sp) -sw $t1, 736($sp) +lw $t1, 872($sp) +sw $t1, 836($sp) b label_101 label_78: la $t0, s_42 -sw $t0, 1312($sp) +sw $t0, 1412($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9331,31 +10059,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1316($sp) +sw $t0, 1416($sp) move $t0, $sp -lw $t1, 1312($t0) +lw $t1, 1412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1316($t0) +lw $t1, 1416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1320($sp) -lw $t1, 1316($sp) -sw $t1, 736($sp) +sw $a1, 1420($sp) +lw $t1, 1416($sp) +sw $t1, 836($sp) label_101: -lw $t1, 736($sp) -sw $t1, 700($sp) +lw $t1, 836($sp) +sw $t1, 800($sp) b label_102 label_77: la $t0, s_43 -sw $t0, 1324($sp) +sw $t0, 1424($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9363,31 +10091,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1328($sp) +sw $t0, 1428($sp) move $t0, $sp -lw $t1, 1324($t0) +lw $t1, 1424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1328($t0) +lw $t1, 1428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1332($sp) -lw $t1, 1328($sp) -sw $t1, 700($sp) +sw $a1, 1432($sp) +lw $t1, 1428($sp) +sw $t1, 800($sp) label_102: -lw $t1, 700($sp) -sw $t1, 664($sp) +lw $t1, 800($sp) +sw $t1, 764($sp) b label_103 label_76: la $t0, s_44 -sw $t0, 1336($sp) +sw $t0, 1436($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9395,31 +10123,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1340($sp) +sw $t0, 1440($sp) move $t0, $sp -lw $t1, 1336($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1340($t0) +lw $t1, 1440($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1344($sp) -lw $t1, 1340($sp) -sw $t1, 664($sp) +sw $a1, 1444($sp) +lw $t1, 1440($sp) +sw $t1, 764($sp) label_103: -lw $t1, 664($sp) -sw $t1, 628($sp) +lw $t1, 764($sp) +sw $t1, 728($sp) b label_104 label_75: la $t0, s_45 -sw $t0, 1348($sp) +sw $t0, 1448($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9427,31 +10155,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1352($sp) +sw $t0, 1452($sp) move $t0, $sp -lw $t1, 1348($t0) +lw $t1, 1448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1352($t0) +lw $t1, 1452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1356($sp) -lw $t1, 1352($sp) -sw $t1, 628($sp) +sw $a1, 1456($sp) +lw $t1, 1452($sp) +sw $t1, 728($sp) label_104: -lw $t1, 628($sp) -sw $t1, 592($sp) +lw $t1, 728($sp) +sw $t1, 692($sp) b label_105 label_74: la $t0, s_46 -sw $t0, 1360($sp) +sw $t0, 1460($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9459,31 +10187,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1364($sp) +sw $t0, 1464($sp) move $t0, $sp -lw $t1, 1360($t0) +lw $t1, 1460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1364($t0) +lw $t1, 1464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1368($sp) -lw $t1, 1364($sp) -sw $t1, 592($sp) +sw $a1, 1468($sp) +lw $t1, 1464($sp) +sw $t1, 692($sp) label_105: -lw $t1, 592($sp) -sw $t1, 556($sp) +lw $t1, 692($sp) +sw $t1, 656($sp) b label_106 label_73: la $t0, s_47 -sw $t0, 1372($sp) +sw $t0, 1472($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9491,31 +10219,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1376($sp) +sw $t0, 1476($sp) move $t0, $sp -lw $t1, 1372($t0) +lw $t1, 1472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1376($t0) +lw $t1, 1476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1380($sp) -lw $t1, 1376($sp) -sw $t1, 556($sp) +sw $a1, 1480($sp) +lw $t1, 1476($sp) +sw $t1, 656($sp) label_106: -lw $t1, 556($sp) -sw $t1, 520($sp) +lw $t1, 656($sp) +sw $t1, 620($sp) b label_107 label_72: la $t0, s_48 -sw $t0, 1384($sp) +sw $t0, 1484($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9523,31 +10251,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1388($sp) +sw $t0, 1488($sp) move $t0, $sp -lw $t1, 1384($t0) +lw $t1, 1484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1388($t0) +lw $t1, 1488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1392($sp) -lw $t1, 1388($sp) -sw $t1, 520($sp) +sw $a1, 1492($sp) +lw $t1, 1488($sp) +sw $t1, 620($sp) label_107: -lw $t1, 520($sp) -sw $t1, 484($sp) +lw $t1, 620($sp) +sw $t1, 584($sp) b label_108 label_71: la $t0, s_49 -sw $t0, 1396($sp) +sw $t0, 1496($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9555,31 +10283,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1400($sp) +sw $t0, 1500($sp) move $t0, $sp -lw $t1, 1396($t0) +lw $t1, 1496($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1400($t0) +lw $t1, 1500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1404($sp) -lw $t1, 1400($sp) -sw $t1, 484($sp) +sw $a1, 1504($sp) +lw $t1, 1500($sp) +sw $t1, 584($sp) label_108: -lw $t1, 484($sp) -sw $t1, 448($sp) +lw $t1, 584($sp) +sw $t1, 548($sp) b label_109 label_70: la $t0, s_50 -sw $t0, 1408($sp) +sw $t0, 1508($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9587,31 +10315,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1412($sp) +sw $t0, 1512($sp) move $t0, $sp -lw $t1, 1408($t0) +lw $t1, 1508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1412($t0) +lw $t1, 1512($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1416($sp) -lw $t1, 1412($sp) -sw $t1, 448($sp) +sw $a1, 1516($sp) +lw $t1, 1512($sp) +sw $t1, 548($sp) label_109: -lw $t1, 448($sp) -sw $t1, 412($sp) +lw $t1, 548($sp) +sw $t1, 512($sp) b label_110 label_69: la $t0, s_51 -sw $t0, 1420($sp) +sw $t0, 1520($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9619,27 +10347,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1424($sp) +sw $t0, 1524($sp) move $t0, $sp -lw $t1, 1420($t0) +lw $t1, 1520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1424($t0) +lw $t1, 1524($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1428($sp) -lw $t1, 1424($sp) -sw $t1, 412($sp) +sw $a1, 1528($sp) +lw $t1, 1524($sp) +sw $t1, 512($sp) label_110: -lw $t1, 412($sp) -sw $t1, 1432($sp) -lw $a1, 1432($sp) +lw $t1, 512($sp) +sw $t1, 1532($sp) +lw $a1, 1532($sp) lw $ra, 0($sp) -addi $sp, $sp, 1440 +addi $sp, $sp, 1540 jr $ra CellularAutomaton.prompt: -addi $sp, $sp, -136 +addi $sp, $sp, -152 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -9647,7 +10375,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9676,7 +10404,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9694,14 +10422,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 32($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 36($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9709,13 +10451,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 20($sp) la $t0, s_53 -sw $t0, 40($sp) +sw $t0, 44($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9723,51 +10465,79 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 48($sp) +sw $a1, 52($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 56($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 56($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 36($sp) +sw $a1, 40($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 52($sp) -lw $t1, 52($sp) +sw $a1, 60($sp) +lw $t1, 60($sp) sw $t1, 16($sp) la $t0, s_3 -sw $t0, 64($sp) +sw $t0, 76($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9775,38 +10545,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 72($sp) +sw $a1, 84($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 88($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 60($sp) +sw $a1, 72($sp) la $t0, s_54 -sw $t0, 96($sp) +sw $t0, 112($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9814,25 +10598,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 104($sp) +sw $a1, 120($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 84($sp) +sw $a1, 100($sp) li $a0, 20 li $v0, 9 syscall @@ -9846,17 +10630,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 96($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 108($sp) -lw $t0, 80($sp) +sw $a1, 124($sp) +lw $t0, 96($sp) lw $a0, 16($t0) bnez $a0, label_111 li $a0, 20 @@ -9872,20 +10656,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 112($sp) +sw $t0, 128($sp) li $t0, 1 -sw $t0, 116($sp) +sw $t0, 132($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 120($sp) -lw $t1, 112($sp) -sw $t1, 76($sp) +sw $a1, 136($sp) +lw $t1, 128($sp) +sw $t1, 92($sp) b label_112 label_111: li $a0, 20 @@ -9901,29 +10685,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t0, 140($sp) li $t0, 0 -sw $t0, 128($sp) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 132($sp) -lw $t1, 124($sp) -sw $t1, 76($sp) +sw $a1, 148($sp) +lw $t1, 140($sp) +sw $t1, 92($sp) label_112: -lw $t1, 76($sp) -sw $t1, 136($sp) -lw $a1, 136($sp) +lw $t1, 92($sp) +sw $t1, 152($sp) +lw $a1, 152($sp) lw $ra, 0($sp) -addi $sp, $sp, 144 +addi $sp, $sp, 160 jr $ra CellularAutomaton.prompt2: -addi $sp, $sp, -136 +addi $sp, $sp, -152 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -9931,7 +10715,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9960,7 +10744,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -9978,14 +10762,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 32($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 36($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -9993,13 +10791,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 20($sp) la $t0, s_56 -sw $t0, 40($sp) +sw $t0, 44($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -10007,38 +10805,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 48($sp) +sw $a1, 52($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 56($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 56($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 36($sp) +sw $a1, 40($sp) la $t0, s_57 -sw $t0, 56($sp) +sw $t0, 64($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -10046,51 +10858,79 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 60($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 64($sp) +sw $a1, 72($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 52($sp) +sw $a1, 60($sp) +li $a0, 32 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, CellularAutomaton_name +sw $t1, 4($t0) +li $t1, 8 +sw $t1, 8($t0) +la $t1, CellularAutomaton_methods +sw $t1, 12($t0) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 68($sp) -lw $t1, 68($sp) +sw $a1, 80($sp) +lw $t1, 80($sp) sw $t1, 16($sp) la $t0, s_58 -sw $t0, 96($sp) +sw $t0, 112($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -10098,25 +10938,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 104($sp) +sw $a1, 120($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 84($sp) +sw $a1, 100($sp) li $a0, 20 li $v0, 9 syscall @@ -10130,17 +10970,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 96($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 108($sp) -lw $t0, 80($sp) +sw $a1, 124($sp) +lw $t0, 96($sp) lw $a0, 16($t0) bnez $a0, label_113 li $a0, 20 @@ -10156,20 +10996,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 112($sp) +sw $t0, 128($sp) li $t0, 0 -sw $t0, 116($sp) +sw $t0, 132($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 120($sp) -lw $t1, 112($sp) -sw $t1, 76($sp) +sw $a1, 136($sp) +lw $t1, 128($sp) +sw $t1, 92($sp) b label_114 label_113: li $a0, 20 @@ -10185,26 +11025,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t0, 140($sp) li $t0, 1 -sw $t0, 128($sp) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 132($sp) -lw $t1, 124($sp) -sw $t1, 76($sp) +sw $a1, 148($sp) +lw $t1, 140($sp) +sw $t1, 92($sp) label_114: -lw $t1, 76($sp) -sw $t1, 136($sp) -lw $a1, 136($sp) +lw $t1, 92($sp) +sw $t1, 152($sp) +lw $a1, 152($sp) lw $ra, 0($sp) -addi $sp, $sp, 144 +addi $sp, $sp, 160 jr $ra Main_init: addi $sp, $sp, -4 @@ -10224,7 +11064,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -172 +addi $sp, $sp, -192 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -10259,7 +11099,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -10288,7 +11128,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -10306,14 +11146,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 48($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 52($sp) move $t0, $sp lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -10321,13 +11175,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 36($sp) la $t0, s_60 -sw $t0, 56($sp) +sw $t0, 60($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -10335,43 +11189,71 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 60($sp) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 64($sp) +sw $a1, 68($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 72($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 52($sp) +sw $a1, 56($sp) label_115: +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 104($t2) jal $t3 -sw $a1, 72($sp) -lw $t0, 72($sp) +sw $a1, 80($sp) +lw $t0, 80($sp) lw $a0, 16($t0) bnez $a0, label_116 b label_117 @@ -10389,32 +11271,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 76($sp) +sw $t0, 88($sp) li $t0, 1 -sw $t0, 80($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 84($sp) -lw $t1, 76($sp) +sw $a1, 96($sp) +lw $t1, 88($sp) sw $t1, 16($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 108($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 96($t2) jal $t3 -sw $a1, 92($sp) -lw $t1, 92($sp) +sw $a1, 104($sp) +lw $t1, 104($sp) sw $t1, 32($sp) li $a0, 32 li $v0, 9 @@ -10429,62 +11325,76 @@ li $t1, 8 sw $t1, 8($t0) la $t1, CellularAutomaton_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 120($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal CellularAutomaton_init -sw $a1, 108($sp) +sw $a1, 124($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 120($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 100($sp) -lw $t0, 176($sp) -lw $t1, 100($sp) +sw $a1, 116($sp) +lw $t0, 196($sp) +lw $t1, 116($sp) sw $t1, 32($t0) -lw $t0, 176($sp) +lw $t0, 196($sp) lw $t1, 32($t0) -sw $t1, 164($sp) +sw $t1, 184($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 184($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 116($sp) +sw $a1, 132($sp) label_118: lw $t0, 16($sp) lw $a0, 16($t0) bnez $a0, label_119 b label_120 label_119: +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 100($t2) jal $t3 -sw $a1, 132($sp) -lw $t0, 132($sp) +sw $a1, 148($sp) +lw $t0, 148($sp) lw $a0, 16($t0) bnez $a0, label_121 li $a0, 20 @@ -10500,64 +11410,64 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 136($sp) +sw $t0, 156($sp) li $t0, 0 -sw $t0, 140($sp) +sw $t0, 160($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 144($sp) -lw $t1, 136($sp) +sw $a1, 164($sp) +lw $t1, 156($sp) sw $t1, 16($sp) -lw $t1, 136($sp) -sw $t1, 128($sp) +lw $t1, 156($sp) +sw $t1, 144($sp) b label_122 label_121: -lw $t0, 176($sp) +lw $t0, 196($sp) lw $t1, 32($t0) -sw $t1, 164($sp) +sw $t1, 184($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 184($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 92($t2) jal $t3 -sw $a1, 152($sp) -lw $t0, 176($sp) +sw $a1, 172($sp) +lw $t0, 196($sp) lw $t1, 32($t0) -sw $t1, 164($sp) +sw $t1, 184($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 184($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 160($sp) -lw $t1, 160($sp) -sw $t1, 128($sp) +sw $a1, 180($sp) +lw $t1, 180($sp) +sw $t1, 144($sp) label_122: b label_118 label_120: b label_115 label_117: -lw $t1, 176($sp) -sw $t1, 168($sp) -lw $t1, 168($sp) -sw $t1, 172($sp) -lw $a1, 172($sp) +lw $t1, 196($sp) +sw $t1, 188($sp) +lw $t1, 188($sp) +sw $t1, 192($sp) +lw $a1, 192($sp) lw $ra, 0($sp) -addi $sp, $sp, 180 +addi $sp, $sp, 200 jr $ra \ No newline at end of file diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index b5eea8ab..c89f389c 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -121,7 +121,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 5 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) @@ -191,7 +191,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -307,7 +307,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -341,7 +341,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -394,7 +394,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -476,7 +476,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -546,7 +546,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -668,14 +668,28 @@ lw $ra, 0($sp) addi $sp, $sp, 20 jr $ra List.head: -addi $sp, $sp, -16 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -687,7 +701,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -695,28 +709,42 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 8($sp) -li $t0, 0 sw $t0, 12($sp) +li $t0, 0 +sw $t0, 16($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 16($sp) -lw $a1, 8($sp) +sw $a1, 20($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 28 jr $ra List.tail: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -726,9 +754,9 @@ lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $a1, 8($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 16 jr $ra List.cons: addi $sp, $sp, -12 @@ -739,7 +767,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 7 sw $t1, 0($t0) la $t1, Cons_name sw $t1, 4($t0) @@ -791,7 +819,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -907,14 +935,14 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.print_list: -addi $sp, $sp, -56 +addi $sp, $sp, -72 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 80($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -925,24 +953,38 @@ lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_1 move $t0, $sp -lw $t1, 64($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 80($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 sw $a1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -950,13 +992,13 @@ lw $t3, 16($t2) jal $t3 sw $a1, 12($sp) la $t0, s_3 -sw $t0, 24($sp) +sw $t0, 28($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -964,67 +1006,95 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 28($sp) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 32($sp) +sw $a1, 36($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 20($sp) +sw $a1, 24($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 80($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 40($sp) +sw $a1, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 36($sp) -lw $t1, 36($sp) +sw $a1, 44($sp) +lw $t1, 44($sp) sw $t1, 4($sp) b label_2 label_1: la $t0, s_4 -sw $t0, 48($sp) +sw $t0, 60($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1032,39 +1102,53 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 56($sp) +sw $a1, 68($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 72($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 44($sp) -lw $t1, 44($sp) +sw $a1, 56($sp) +lw $t1, 56($sp) sw $t1, 4($sp) label_2: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 68 +addi $sp, $sp, 84 jr $ra Main.main: -addi $sp, $sp, -140 +addi $sp, $sp, -144 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -1072,7 +1156,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 6 sw $t1, 0($t0) la $t1, List_name sw $t1, 4($t0) @@ -1092,7 +1176,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1131,7 +1215,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1170,7 +1254,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1209,7 +1293,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1248,7 +1332,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1282,18 +1366,18 @@ lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 144($sp) +lw $t0, 148($sp) lw $t1, 4($sp) sw $t1, 16($t0) label_3: -lw $t0, 144($sp) +lw $t0, 148($sp) lw $t1, 16($t0) -sw $t1, 136($sp) +sw $t1, 140($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1334,43 +1418,57 @@ lw $a0, 16($t0) bnez $a0, label_4 b label_5 label_4: -lw $t0, 144($sp) +lw $t0, 148($sp) lw $t1, 16($t0) -sw $t1, 136($sp) +sw $t1, 140($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 132($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 124($sp) -lw $t0, 144($sp) +lw $t0, 148($sp) lw $t1, 16($t0) -sw $t1, 136($sp) +sw $t1, 140($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 132($sp) -lw $t0, 144($sp) -lw $t1, 132($sp) +sw $a1, 136($sp) +lw $t0, 148($sp) +lw $t1, 136($sp) sw $t1, 16($t0) b label_3 label_5: lw $a1, 96($sp) lw $ra, 0($sp) -addi $sp, $sp, 148 +addi $sp, $sp, 152 jr $ra \ No newline at end of file diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 01a6daa0..5e261dfe 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -190,7 +190,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -306,7 +306,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -340,7 +340,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -393,7 +393,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -475,7 +475,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -545,7 +545,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -634,7 +634,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -160 +addi $sp, $sp, -176 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -662,7 +662,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -687,7 +687,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -789,7 +789,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -807,14 +807,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 88($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 92($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 92($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -826,13 +840,13 @@ sw $t1, 44($sp) b label_2 label_1: la $t0, s_4 -sw $t0, 96($sp) +sw $t0, 100($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -840,31 +854,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 104($sp) +sw $a1, 108($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 112($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 112($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 92($sp) -lw $t1, 92($sp) +sw $a1, 96($sp) +lw $t1, 96($sp) sw $t1, 44($sp) label_2: move $t0, $sp @@ -877,18 +905,18 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 120($sp) +sw $a1, 128($sp) move $t0, $sp -lw $t1, 120($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 116($sp) +sw $a1, 124($sp) move $t0, $sp lw $t1, 40($t0) addi $sp, $sp, -4 @@ -899,32 +927,32 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 124($sp) +sw $a1, 132($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 112($sp) -lw $t0, 112($sp) +sw $a1, 120($sp) +lw $t0, 120($sp) lw $a0, 16($t0) bnez $a0, label_3 la $t0, s_3 -sw $t0, 132($sp) +sw $t0, 140($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -932,42 +960,56 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 136($sp) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 140($sp) +sw $a1, 148($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 128($sp) -lw $t1, 128($sp) -sw $t1, 108($sp) +sw $a1, 136($sp) +lw $t1, 136($sp) +sw $t1, 116($sp) b label_4 label_3: la $t0, s_4 -sw $t0, 148($sp) +sw $t0, 160($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -975,38 +1017,52 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 152($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 156($sp) +sw $a1, 168($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 172($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 172($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 144($sp) -lw $t1, 144($sp) -sw $t1, 108($sp) +sw $a1, 156($sp) +lw $t1, 156($sp) +sw $t1, 116($sp) label_4: -lw $t1, 108($sp) -sw $t1, 160($sp) -lw $a1, 160($sp) +lw $t1, 116($sp) +sw $t1, 176($sp) +lw $a1, 176($sp) lw $ra, 0($sp) -addi $sp, $sp, 168 +addi $sp, $sp, 184 jr $ra Complex_init: addi $sp, $sp, -28 @@ -1024,7 +1080,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1052,7 +1108,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1159,18 +1215,18 @@ lw $ra, 0($sp) addi $sp, $sp, 64 jr $ra Complex.print: -addi $sp, $sp, -96 +addi $sp, $sp, -104 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 100($sp) +lw $t0, 108($sp) lw $t1, 20($t0) -sw $t1, 76($sp) +sw $t1, 80($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1190,7 +1246,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 36($sp) -lw $t0, 76($sp) +lw $t0, 80($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 28($sp) @@ -1226,17 +1282,31 @@ sw $a1, 40($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_5 -lw $t0, 100($sp) +lw $t0, 108($sp) lw $t1, 16($t0) -sw $t1, 96($sp) +sw $t1, 100($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Complex_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Complex_methods +sw $t1, 12($t0) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1244,13 +1314,13 @@ lw $t3, 16($t2) jal $t3 sw $a1, 56($sp) la $t0, s_5 -sw $t0, 64($sp) +sw $t0, 68($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1258,18 +1328,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 72($sp) +sw $a1, 76($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 56($t0) @@ -1282,11 +1352,11 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 52($sp) -lw $t0, 100($sp) +lw $t0, 108($sp) lw $t1, 20($t0) -sw $t1, 76($sp) +sw $t1, 80($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 52($t0) @@ -1300,13 +1370,13 @@ lw $t3, 16($t2) jal $t3 sw $a1, 48($sp) la $t0, s_6 -sw $t0, 80($sp) +sw $t0, 84($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1314,18 +1384,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 88($sp) +sw $a1, 92($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 48($t0) @@ -1342,29 +1412,43 @@ lw $t1, 44($sp) sw $t1, 4($sp) b label_6 label_5: -lw $t0, 100($sp) +lw $t0, 108($sp) lw $t1, 16($t0) -sw $t1, 96($sp) +sw $t1, 100($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Complex_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Complex_methods +sw $t1, 12($t0) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 92($sp) -lw $t1, 92($sp) +sw $a1, 96($sp) +lw $t1, 96($sp) sw $t1, 4($sp) label_6: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 104 +addi $sp, $sp, 112 jr $ra Complex.reflect_0: addi $sp, $sp, -88 @@ -1387,7 +1471,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1455,7 +1539,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1531,7 +1615,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1607,7 +1691,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 3a567b7b..62b079a6 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -173,7 +173,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -289,7 +289,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -323,7 +323,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -376,7 +376,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -458,7 +458,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -528,7 +528,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -618,7 +618,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -645,14 +645,14 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Main.pal: -addi $sp, $sp, -276 +addi $sp, $sp, -280 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -664,7 +664,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -721,10 +721,10 @@ lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_1 move $t0, $sp -lw $t1, 284($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -736,7 +736,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -797,7 +797,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -822,7 +822,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -849,10 +849,10 @@ sw $t1, 0($sp) lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -864,7 +864,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -885,10 +885,10 @@ sw $t1, 0($sp) jal Int_init sw $a1, 144($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -900,7 +900,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -935,7 +935,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -960,10 +960,10 @@ sw $t1, 0($sp) lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1035,10 +1035,10 @@ sw $t1, 84($sp) b label_4 label_3: move $t0, $sp -lw $t1, 284($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1050,7 +1050,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1085,7 +1085,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1108,7 +1108,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1135,24 +1135,38 @@ sw $t1, 0($sp) lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 288($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 204($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 256($sp) move $t0, $sp lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 280($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 280($t0) +lw $t1, 256($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1179,19 +1193,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 256($sp) -li $t0, 1 sw $t0, 260($sp) +li $t0, 1 +sw $t0, 264($sp) move $t0, $sp -lw $t1, 260($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 264($sp) -lw $t1, 256($sp) +sw $a1, 268($sp) +lw $t1, 260($sp) sw $t1, 44($sp) label_5: lw $t1, 44($sp) @@ -1211,27 +1225,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 268($sp) -li $t0, 1 sw $t0, 272($sp) +li $t0, 1 +sw $t0, 276($sp) move $t0, $sp -lw $t1, 272($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 268($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 276($sp) -lw $t1, 268($sp) +sw $a1, 280($sp) +lw $t1, 272($sp) sw $t1, 4($sp) label_6: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 288 +addi $sp, $sp, 292 jr $ra Main.main: -addi $sp, $sp, -92 +addi $sp, $sp, -112 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -1239,7 +1253,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1270,7 +1284,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1288,7 +1302,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 28($sp) -lw $t0, 96($sp) +lw $t0, 116($sp) lw $t1, 4($sp) sw $t1, 16($t0) la $t0, s_3 @@ -1298,7 +1312,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1316,56 +1330,98 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 48($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 52($sp) move $t0, $sp lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 36($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 68($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 60($sp) +sw $a1, 64($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 72($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 56($sp) -lw $t0, 56($sp) +sw $a1, 60($sp) +lw $t0, 60($sp) lw $a0, 16($t0) bnez $a0, label_7 la $t0, s_4 -sw $t0, 68($sp) +sw $t0, 80($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1373,42 +1429,56 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 76($sp) +sw $a1, 88($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 92($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 64($sp) -lw $t1, 64($sp) -sw $t1, 52($sp) +sw $a1, 76($sp) +lw $t1, 76($sp) +sw $t1, 56($sp) b label_8 label_7: la $t0, s_5 -sw $t0, 84($sp) +sw $t0, 100($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1416,34 +1486,48 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) +sw $a1, 108($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 112($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 112($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 80($sp) -lw $t1, 80($sp) -sw $t1, 52($sp) +sw $a1, 96($sp) +lw $t1, 96($sp) +sw $t1, 56($sp) label_8: -lw $a1, 52($sp) +lw $a1, 56($sp) lw $ra, 0($sp) -addi $sp, $sp, 100 +addi $sp, $sp, 120 jr $ra \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 582480b4..0a487263 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -173,7 +173,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -289,7 +289,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -323,7 +323,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -376,7 +376,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -458,7 +458,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -528,7 +528,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -603,11 +603,11 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Main_init: -addi $sp, $sp, -540 +addi $sp, $sp, -552 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 544($t0) +lw $t1, 556($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal IO_init @@ -620,7 +620,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -638,14 +638,28 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 20($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 24($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 556($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 24($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -657,7 +671,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -665,33 +679,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 24($sp) -li $t0, 2 sw $t0, 28($sp) +li $t0, 2 +sw $t0, 32($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 32($sp) -lw $t0, 544($sp) -lw $t1, 24($sp) +sw $a1, 36($sp) +lw $t0, 556($sp) +lw $t1, 28($sp) sw $t1, 16($t0) -lw $t0, 544($sp) +lw $t0, 556($sp) lw $t1, 16($t0) -sw $t1, 464($sp) -lw $t0, 544($sp) -lw $t1, 464($sp) +sw $t1, 468($sp) +lw $t0, 556($sp) +lw $t1, 468($sp) sw $t1, 20($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -699,27 +713,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 40($sp) -li $t0, 0 sw $t0, 44($sp) +li $t0, 0 +sw $t0, 48($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 48($sp) -lw $t0, 544($sp) -lw $t1, 40($sp) +sw $a1, 52($sp) +lw $t0, 556($sp) +lw $t1, 44($sp) sw $t1, 24($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -727,20 +741,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 52($sp) -li $t0, 500 sw $t0, 56($sp) +li $t0, 500 +sw $t0, 60($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 60($sp) -lw $t0, 544($sp) -lw $t1, 52($sp) +sw $a1, 64($sp) +lw $t0, 556($sp) +lw $t1, 56($sp) sw $t1, 28($t0) label_1: li $a0, 20 @@ -756,32 +770,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 68($sp) -li $t0, 1 sw $t0, 72($sp) +li $t0, 1 +sw $t0, 76($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 76($sp) -lw $t0, 68($sp) +sw $a1, 80($sp) +lw $t0, 72($sp) lw $a0, 16($t0) bnez $a0, label_2 b label_3 label_2: -lw $t0, 544($sp) +lw $t0, 556($sp) lw $t1, 20($t0) -sw $t1, 508($sp) +sw $t1, 520($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -789,34 +803,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 100($sp) -li $t0, 1 sw $t0, 104($sp) +li $t0, 1 +sw $t0, 108($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 108($sp) -lw $t0, 508($sp) -lw $t1, 16($t0) -sw $t1, 88($sp) -lw $t0, 100($sp) +sw $a1, 112($sp) +lw $t0, 520($sp) lw $t1, 16($t0) sw $t1, 92($sp) -lw $a0, 88($sp) -lw $t1, 92($sp) +lw $t0, 104($sp) +lw $t1, 16($t0) +sw $t1, 96($sp) +lw $a0, 92($sp) +lw $t1, 96($sp) add $a0, $a0, $t1 -sw $a0, 84($sp) +sw $a0, 88($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -824,25 +838,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 112($sp) -lw $t0, 544($sp) -lw $t1, 80($sp) +sw $a1, 116($sp) +lw $t0, 556($sp) +lw $t1, 84($sp) sw $t1, 20($t0) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -850,47 +864,47 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 120($sp) -li $t0, 2 sw $t0, 124($sp) +li $t0, 2 +sw $t0, 128($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 128($sp) -lw $t0, 544($sp) -lw $t1, 120($sp) +sw $a1, 132($sp) +lw $t0, 556($sp) +lw $t1, 124($sp) sw $t1, 24($t0) label_4: -lw $t0, 544($sp) +lw $t0, 556($sp) lw $t1, 20($t0) -sw $t1, 508($sp) -lw $t0, 544($sp) +sw $t1, 520($sp) +lw $t0, 556($sp) lw $t1, 24($t0) -sw $t1, 428($sp) -lw $t0, 544($sp) +sw $t1, 432($sp) +lw $t0, 556($sp) lw $t1, 24($t0) -sw $t1, 428($sp) -lw $t0, 428($sp) -lw $t1, 16($t0) -sw $t1, 172($sp) -lw $t0, 428($sp) +sw $t1, 432($sp) +lw $t0, 432($sp) lw $t1, 16($t0) sw $t1, 176($sp) -lw $a0, 172($sp) -lw $t1, 176($sp) +lw $t0, 432($sp) +lw $t1, 16($t0) +sw $t1, 180($sp) +lw $a0, 176($sp) +lw $t1, 180($sp) mul $a0, $a0, $t1 -sw $a0, 168($sp) +sw $a0, 172($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -898,26 +912,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 164($sp) +sw $t0, 168($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 188($sp) -lw $t0, 508($sp) -lw $t1, 16($t0) -sw $t1, 152($sp) -lw $t0, 164($sp) +sw $a1, 192($sp) +lw $t0, 520($sp) lw $t1, 16($t0) sw $t1, 156($sp) -lw $a0, 152($sp) -lw $t1, 156($sp) +lw $t0, 168($sp) +lw $t1, 16($t0) +sw $t1, 160($sp) +lw $a0, 156($sp) +lw $t1, 160($sp) slt $a0, $a0, $t1 -sw $a0, 148($sp) +sw $a0, 152($sp) li $a0, 20 li $v0, 9 syscall @@ -931,48 +945,48 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 144($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 192($sp) -lw $t0, 144($sp) +sw $a1, 196($sp) +lw $t0, 148($sp) lw $a0, 16($t0) bnez $a0, label_7 -lw $t0, 544($sp) +lw $t0, 556($sp) lw $t1, 20($t0) -sw $t1, 508($sp) -lw $t0, 544($sp) +sw $t1, 520($sp) +lw $t0, 556($sp) lw $t1, 24($t0) -sw $t1, 428($sp) -lw $t0, 544($sp) +sw $t1, 432($sp) +lw $t0, 556($sp) lw $t1, 20($t0) -sw $t1, 508($sp) -lw $t0, 544($sp) +sw $t1, 520($sp) +lw $t0, 556($sp) lw $t1, 24($t0) -sw $t1, 428($sp) -lw $t0, 508($sp) -lw $t1, 16($t0) -sw $t1, 264($sp) -lw $t0, 428($sp) +sw $t1, 432($sp) +lw $t0, 520($sp) lw $t1, 16($t0) sw $t1, 268($sp) -lw $a0, 264($sp) -lw $t1, 268($sp) +lw $t0, 432($sp) +lw $t1, 16($t0) +sw $t1, 272($sp) +lw $a0, 268($sp) +lw $t1, 272($sp) beq $t1, 0, div_zero_error div $a0, $a0, $t1 -sw $a0, 260($sp) +sw $a0, 264($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -980,32 +994,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 256($sp) +sw $t0, 260($sp) move $t0, $sp -lw $t1, 260($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 280($sp) -lw $t0, 428($sp) -lw $t1, 16($t0) -sw $t1, 244($sp) -lw $t0, 256($sp) +sw $a1, 284($sp) +lw $t0, 432($sp) lw $t1, 16($t0) sw $t1, 248($sp) -lw $a0, 244($sp) -lw $t1, 248($sp) +lw $t0, 260($sp) +lw $t1, 16($t0) +sw $t1, 252($sp) +lw $a0, 248($sp) +lw $t1, 252($sp) mul $a0, $a0, $t1 -sw $a0, 240($sp) +sw $a0, 244($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1013,32 +1027,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 236($sp) +sw $t0, 240($sp) move $t0, $sp -lw $t1, 240($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 284($sp) -lw $t0, 508($sp) -lw $t1, 16($t0) -sw $t1, 224($sp) -lw $t0, 236($sp) +sw $a1, 288($sp) +lw $t0, 520($sp) lw $t1, 16($t0) sw $t1, 228($sp) -lw $a0, 224($sp) -lw $t1, 228($sp) +lw $t0, 240($sp) +lw $t1, 16($t0) +sw $t1, 232($sp) +lw $a0, 228($sp) +lw $t1, 232($sp) sub $a0, $a0, $t1 -sw $a0, 220($sp) +sw $a0, 224($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1046,22 +1060,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 216($sp) +sw $t0, 220($sp) move $t0, $sp -lw $t1, 220($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 216($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 288($sp) +sw $a1, 292($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1069,28 +1083,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 292($sp) -li $t0, 0 sw $t0, 296($sp) +li $t0, 0 +sw $t0, 300($sp) move $t0, $sp -lw $t1, 296($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 292($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 300($sp) -lw $t0, 216($sp) -lw $t1, 16($t0) -sw $t1, 208($sp) -lw $t0, 292($sp) +sw $a1, 304($sp) +lw $t0, 220($sp) lw $t1, 16($t0) sw $t1, 212($sp) -lw $a0, 208($sp) -lw $t1, 212($sp) +lw $t0, 296($sp) +lw $t1, 16($t0) +sw $t1, 216($sp) +lw $a0, 212($sp) +lw $t1, 216($sp) seq $a0, $a0, $t1 -sw $a0, 204($sp) +sw $a0, 208($sp) li $a0, 20 li $v0, 9 syscall @@ -1104,17 +1118,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 200($sp) +sw $t0, 204($sp) move $t0, $sp -lw $t1, 204($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 304($sp) -lw $t0, 200($sp) +sw $a1, 308($sp) +lw $t0, 204($sp) lw $a0, 16($t0) bnez $a0, label_8 li $a0, 20 @@ -1130,20 +1144,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 308($sp) -li $t0, 1 sw $t0, 312($sp) +li $t0, 1 +sw $t0, 316($sp) move $t0, $sp -lw $t1, 312($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 308($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 316($sp) -lw $t1, 308($sp) -sw $t1, 196($sp) +sw $a1, 320($sp) +lw $t1, 312($sp) +sw $t1, 200($sp) b label_9 label_8: li $a0, 20 @@ -1159,23 +1173,23 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 320($sp) -li $t0, 0 sw $t0, 324($sp) +li $t0, 0 +sw $t0, 328($sp) move $t0, $sp -lw $t1, 324($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 324($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 328($sp) -lw $t1, 320($sp) -sw $t1, 196($sp) +sw $a1, 332($sp) +lw $t1, 324($sp) +sw $t1, 200($sp) label_9: -lw $t1, 196($sp) -sw $t1, 140($sp) +lw $t1, 200($sp) +sw $t1, 144($sp) b label_10 label_7: li $a0, 20 @@ -1191,35 +1205,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 332($sp) -li $t0, 0 sw $t0, 336($sp) +li $t0, 0 +sw $t0, 340($sp) move $t0, $sp -lw $t1, 336($t0) +lw $t1, 340($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 336($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 340($sp) -lw $t1, 332($sp) -sw $t1, 140($sp) +sw $a1, 344($sp) +lw $t1, 336($sp) +sw $t1, 144($sp) label_10: -lw $t0, 140($sp) +lw $t0, 144($sp) lw $a0, 16($t0) bnez $a0, label_5 b label_6 label_5: -lw $t0, 544($sp) +lw $t0, 556($sp) lw $t1, 24($t0) -sw $t1, 428($sp) +sw $t1, 432($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1227,34 +1241,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 364($sp) -li $t0, 1 sw $t0, 368($sp) +li $t0, 1 +sw $t0, 372($sp) move $t0, $sp -lw $t1, 368($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 364($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 372($sp) -lw $t0, 428($sp) -lw $t1, 16($t0) -sw $t1, 352($sp) -lw $t0, 364($sp) +sw $a1, 376($sp) +lw $t0, 432($sp) lw $t1, 16($t0) sw $t1, 356($sp) -lw $a0, 352($sp) -lw $t1, 356($sp) +lw $t0, 368($sp) +lw $t1, 16($t0) +sw $t1, 360($sp) +lw $a0, 356($sp) +lw $t1, 360($sp) add $a0, $a0, $t1 -sw $a0, 348($sp) +sw $a0, 352($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1262,46 +1276,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 344($sp) +sw $t0, 348($sp) move $t0, $sp -lw $t1, 348($t0) +lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 344($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 376($sp) -lw $t0, 544($sp) -lw $t1, 344($sp) +sw $a1, 380($sp) +lw $t0, 556($sp) +lw $t1, 348($sp) sw $t1, 24($t0) b label_4 label_6: -lw $t0, 544($sp) +lw $t0, 556($sp) lw $t1, 20($t0) -sw $t1, 508($sp) -lw $t0, 544($sp) +sw $t1, 520($sp) +lw $t0, 556($sp) lw $t1, 24($t0) -sw $t1, 428($sp) -lw $t0, 544($sp) +sw $t1, 432($sp) +lw $t0, 556($sp) lw $t1, 24($t0) -sw $t1, 428($sp) -lw $t0, 428($sp) -lw $t1, 16($t0) -sw $t1, 416($sp) -lw $t0, 428($sp) +sw $t1, 432($sp) +lw $t0, 432($sp) lw $t1, 16($t0) sw $t1, 420($sp) -lw $a0, 416($sp) -lw $t1, 420($sp) +lw $t0, 432($sp) +lw $t1, 16($t0) +sw $t1, 424($sp) +lw $a0, 420($sp) +lw $t1, 424($sp) mul $a0, $a0, $t1 -sw $a0, 412($sp) +sw $a0, 416($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1309,26 +1323,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 408($sp) +sw $t0, 412($sp) move $t0, $sp -lw $t1, 412($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 432($sp) -lw $t0, 508($sp) -lw $t1, 16($t0) -sw $t1, 396($sp) -lw $t0, 408($sp) +sw $a1, 436($sp) +lw $t0, 520($sp) lw $t1, 16($t0) sw $t1, 400($sp) -lw $a0, 396($sp) -lw $t1, 400($sp) +lw $t0, 412($sp) +lw $t1, 16($t0) +sw $t1, 404($sp) +lw $a0, 400($sp) +lw $t1, 404($sp) slt $a0, $a0, $t1 -sw $a0, 392($sp) +sw $a0, 396($sp) li $a0, 20 li $v0, 9 syscall @@ -1342,17 +1356,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 388($sp) +sw $t0, 392($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 388($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 436($sp) -lw $t0, 388($sp) +sw $a1, 440($sp) +lw $t0, 392($sp) lw $a0, 16($t0) bnez $a0, label_11 li $a0, 20 @@ -1360,7 +1374,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1368,53 +1382,67 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 440($sp) -li $t0, 0 sw $t0, 444($sp) +li $t0, 0 +sw $t0, 448($sp) move $t0, $sp -lw $t1, 444($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 440($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 448($sp) -lw $t1, 440($sp) -sw $t1, 384($sp) +sw $a1, 452($sp) +lw $t1, 444($sp) +sw $t1, 388($sp) b label_12 label_11: -lw $t0, 544($sp) +lw $t0, 556($sp) lw $t1, 20($t0) -sw $t1, 508($sp) -lw $t0, 544($sp) -lw $t1, 508($sp) +sw $t1, 520($sp) +lw $t0, 556($sp) +lw $t1, 520($sp) sw $t1, 16($t0) -lw $t0, 544($sp) +lw $t0, 556($sp) lw $t1, 16($t0) -sw $t1, 464($sp) +sw $t1, 468($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 472($sp) move $t0, $sp -lw $t1, 464($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 556($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 472($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 460($sp) +sw $a1, 464($sp) la $t0, s_4 -sw $t0, 472($sp) +sw $t0, 480($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1422,49 +1450,63 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 476($sp) +sw $t0, 484($sp) move $t0, $sp -lw $t1, 472($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 476($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 480($sp) +sw $a1, 488($sp) +li $a0, 36 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 9 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 492($sp) move $t0, $sp -lw $t1, 476($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 556($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 492($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 468($sp) -lw $t1, 468($sp) -sw $t1, 384($sp) +sw $a1, 476($sp) +lw $t1, 476($sp) +sw $t1, 388($sp) label_12: -lw $t0, 544($sp) +lw $t0, 556($sp) lw $t1, 28($t0) -sw $t1, 504($sp) -lw $t0, 544($sp) +sw $t1, 516($sp) +lw $t0, 556($sp) lw $t1, 20($t0) -sw $t1, 508($sp) -lw $t0, 504($sp) +sw $t1, 520($sp) +lw $t0, 516($sp) lw $t1, 16($t0) -sw $t1, 496($sp) -lw $t0, 508($sp) +sw $t1, 508($sp) +lw $t0, 520($sp) lw $t1, 16($t0) -sw $t1, 500($sp) -lw $a0, 496($sp) -lw $t1, 500($sp) +sw $t1, 512($sp) +lw $a0, 508($sp) +lw $t1, 512($sp) sle $a0, $a0, $t1 -sw $a0, 492($sp) +sw $a0, 504($sp) li $a0, 20 li $v0, 9 syscall @@ -1478,27 +1520,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 488($sp) +sw $t0, 500($sp) move $t0, $sp -lw $t1, 492($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 488($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 512($sp) -lw $t0, 488($sp) +sw $a1, 524($sp) +lw $t0, 500($sp) lw $a0, 16($t0) bnez $a0, label_13 la $t0, s_5 -sw $t0, 516($sp) +sw $t0, 528($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1506,28 +1548,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 520($sp) +sw $t0, 532($sp) move $t0, $sp -lw $t1, 516($t0) +lw $t1, 528($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 532($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 524($sp) -lw $t1, 520($sp) -sw $t1, 484($sp) +sw $a1, 536($sp) +lw $t1, 532($sp) +sw $t1, 496($sp) b label_14 label_13: la $t0, s_6 -sw $t0, 532($sp) +sw $t0, 544($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1535,37 +1577,37 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 536($sp) +sw $t0, 548($sp) move $t0, $sp -lw $t1, 532($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 536($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 540($sp) +sw $a1, 552($sp) move $t0, $sp -lw $t1, 536($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 536($t0) +lw $t1, 548($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 -sw $a1, 528($sp) -lw $t1, 528($sp) -sw $t1, 484($sp) +sw $a1, 540($sp) +lw $t1, 540($sp) +sw $t1, 496($sp) label_14: b label_1 label_3: -lw $t0, 544($sp) -lw $t1, 64($sp) +lw $t0, 556($sp) +lw $t1, 68($sp) sw $t1, 32($t0) lw $ra, 0($sp) -addi $sp, $sp, 548 +addi $sp, $sp, 560 jr $ra Main.main: addi $sp, $sp, -12 @@ -1576,7 +1618,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index a2b2176e..be72ff48 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -170,7 +170,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -286,7 +286,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -320,7 +320,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -373,7 +373,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -455,7 +455,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -525,7 +525,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -614,7 +614,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -108 +addi $sp, $sp, -116 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -653,7 +653,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -678,7 +678,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -715,14 +715,28 @@ lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 12($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 52($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -730,9 +744,9 @@ lw $t3, 12($t2) jal $t3 sw $a1, 8($sp) la $t0, void -lw $t1, 112($sp) +lw $t1, 120($sp) seq $a0, $t0, $t1 -sw $a0, 60($sp) +sw $a0, 64($sp) li $a0, 20 li $v0, 9 syscall @@ -746,33 +760,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 64($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 68($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 68($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 4($t2) jal $t3 -sw $a1, 56($sp) +sw $a1, 60($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -780,24 +794,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 72($sp) -li $t0, 3 sw $t0, 76($sp) +li $t0, 3 +sw $t0, 80($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 80($sp) +sw $a1, 84($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -805,37 +819,37 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 84($sp) -li $t0, 1 sw $t0, 88($sp) +li $t0, 1 +sw $t0, 92($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 92($sp) +sw $a1, 96($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 60($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 52($sp) +sw $a1, 56($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -849,13 +863,13 @@ lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) la $t0, s_3 -sw $t0, 100($sp) +sw $t0, 104($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -863,31 +877,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 108($sp) +sw $a1, 112($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 96($sp) -lw $a1, 96($sp) +sw $a1, 100($sp) +lw $a1, 100($sp) lw $ra, 0($sp) -addi $sp, $sp, 116 +addi $sp, $sp, 124 jr $ra \ No newline at end of file diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 41623913..c41effce 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -157,7 +157,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 8 +li $t1, 6 sw $t1, 0($t0) la $t1, Main_name sw $t1, 4($t0) @@ -227,7 +227,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -343,7 +343,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -377,7 +377,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -430,7 +430,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -512,7 +512,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -582,7 +582,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -671,14 +671,28 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra List.isNil: -addi $sp, $sp, -16 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -698,21 +712,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 8($sp) -li $t0, 1 sw $t0, 12($sp) +li $t0, 1 +sw $t0, 16($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 16($sp) -lw $a1, 8($sp) +sw $a1, 20($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 28 jr $ra List.cons: addi $sp, $sp, -20 @@ -764,14 +778,28 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra List.car: -addi $sp, $sp, -12 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -783,7 +811,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -791,26 +819,40 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 12($sp) -lw $a1, 8($sp) +sw $a1, 16($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 24 jr $ra List.cdr: -addi $sp, $sp, -12 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 8($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -830,23 +872,37 @@ li $t1, 4 sw $t1, 8($t0) la $t1, List_methods sw $t1, 12($t0) -sw $t0, 8($sp) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal List_init -sw $a1, 12($sp) -lw $a1, 8($sp) +sw $a1, 16($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 24 jr $ra List.rev: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -858,14 +914,28 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 16 jr $ra List.sort: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -877,14 +947,28 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 16 jr $ra List.insert: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -896,14 +980,28 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 20 jr $ra List.rcons: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -915,14 +1013,28 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 20 jr $ra List.print_list: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 5 +sw $t1, 0($t0) +la $t1, List_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, List_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -934,7 +1046,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 12 +addi $sp, $sp, 16 jr $ra Cons_init: addi $sp, $sp, -16 @@ -952,7 +1064,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1342,20 +1454,34 @@ lw $ra, 0($sp) addi $sp, $sp, 36 jr $ra Cons.print_list: -addi $sp, $sp, -32 +addi $sp, $sp, -40 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 36($sp) +lw $t0, 44($sp) lw $t1, 16($t0) sw $t1, 8($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 12($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 12($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1363,13 +1489,13 @@ lw $t3, 16($t2) jal $t3 sw $a1, 4($sp) la $t0, s_3 -sw $t0, 16($sp) +sw $t0, 20($sp) li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1377,47 +1503,61 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 20($sp) +sw $t0, 24($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 24($sp) +sw $a1, 28($sp) +li $a0, 24 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Cons_name +sw $t1, 4($t0) +li $t1, 6 +sw $t1, 8($t0) +la $t1, Cons_methods +sw $t1, 12($t0) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 32($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 12($sp) -lw $t0, 36($sp) +sw $a1, 16($sp) +lw $t0, 44($sp) lw $t1, 20($t0) -sw $t1, 32($sp) +sw $t1, 40($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 60($t2) jal $t3 -sw $a1, 28($sp) -lw $a1, 28($sp) +sw $a1, 36($sp) +lw $a1, 36($sp) lw $ra, 0($sp) -addi $sp, $sp, 40 +addi $sp, $sp, 48 jr $ra Nil_init: addi $sp, $sp, -4 @@ -1483,14 +1623,28 @@ lw $ra, 0($sp) addi $sp, $sp, 8 jr $ra Nil.insert: -addi $sp, $sp, -4 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) +li $a0, 16 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 7 +sw $t1, 0($t0) +la $t1, Nil_name +sw $t1, 4($t0) +li $t1, 4 +sw $t1, 8($t0) +la $t1, Nil_methods +sw $t1, 12($t0) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1502,7 +1656,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 20 jr $ra Nil.rcons: addi $sp, $sp, -12 @@ -1631,7 +1785,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1740,7 +1894,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1775,7 +1929,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 4 +li $t1, 2 sw $t1, 0($t0) la $t1, Int_name sw $t1, 4($t0) @@ -1807,7 +1961,7 @@ lw $ra, 0($sp) addi $sp, $sp, 128 jr $ra Main.main: -addi $sp, $sp, -36 +addi $sp, $sp, -48 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_4 @@ -1817,7 +1971,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -1835,79 +1989,121 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 44($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 36($sp) +sw $a1, 40($sp) +li $a0, 20 +li $v0, 9 +syscall +bge $v0, $sp heap_error +move $t0, $v0 +li $t1, 6 +sw $t1, 0($t0) +la $t1, Main_name +sw $t1, 4($t0) +li $t1, 5 +sw $t1, 8($t0) +la $t1, Main_methods +sw $t1, 12($t0) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 32($sp) +sw $a1, 36($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 28($sp) +sw $a1, 32($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 32($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 28($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 28($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 60($t2) jal $t3 -sw $a1, 20($sp) -lw $a1, 20($sp) +sw $a1, 24($sp) +lw $a1, 24($sp) lw $ra, 0($sp) -addi $sp, $sp, 44 +addi $sp, $sp, 56 jr $ra \ No newline at end of file From cb00f0c3c016d60c5d66993f6782ad0678f9cde0 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Mon, 14 Dec 2020 19:56:57 -0500 Subject: [PATCH 138/140] passing all tests :) --- src/visitors/transpilator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/visitors/transpilator.py b/src/visitors/transpilator.py index b1681a3b..b9a65e77 100644 --- a/src/visitors/transpilator.py +++ b/src/visitors/transpilator.py @@ -402,12 +402,12 @@ def visit(self, node, scope, sscope): # dynamic_type = 'Void' self.count += expr_value + '\n' - static_instance = self.define_internal_local(scope=scope, name='static_instance') + # static_instance = self.define_internal_local(scope=scope, name='static_instance') # print(self.current_type.name, self.context.get_type(self.current_type.name).tag) # assert False, "Stop" - self.register_instruction(AllocateNodeIL(self.current_type.name, self.context.get_type(self.current_type.name).tag ,static_instance)) + # self.register_instruction(AllocateNodeIL(self.current_type.name, self.context.get_type(self.current_type.name).tag ,static_instance)) - self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, self.current_type.name, static_instance)) + self.register_instruction(DynamicCallNodeIL(result_local, node.id, call_args, self.current_type.name, expr_value)) return result_local From ea4b403cf959cde20cd267cc5949c20e89310542 Mon Sep 17 00:00:00 2001 From: CRafa97 Date: Mon, 14 Dec 2020 19:57:27 -0500 Subject: [PATCH 139/140] passing all tests :) --- tests/codegen/arith.mips | 3728 +++++++++----------------- tests/codegen/atoi.mips | 940 +++---- tests/codegen/book_list.mips | 368 +-- tests/codegen/cells.mips | 654 ++--- tests/codegen/complex.mips | 150 +- tests/codegen/fib.mips | 120 +- tests/codegen/graph.mips | 1532 ++++------- tests/codegen/hairyscary.mips | 348 +-- tests/codegen/hello_world.mips | 20 +- tests/codegen/io.mips | 60 +- tests/codegen/life.mips | 4580 +++++++++++++------------------- tests/codegen/list.mips | 234 +- tests/codegen/new_complex.mips | 246 +- tests/codegen/palindrome.mips | 216 +- tests/codegen/primes.mips | 614 ++--- tests/codegen/print-cool.mips | 106 +- tests/codegen/sort-list.mips | 368 +-- 17 files changed, 5289 insertions(+), 8995 deletions(-) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index d062668c..612ccfd8 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -1888,10 +1888,10 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra D.method7: -addi $sp, $sp, -252 +addi $sp, $sp, -244 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t1, 260($sp) +lw $t1, 252($sp) sw $t1, 4($sp) li $a0, 20 li $v0, 9 @@ -2195,28 +2195,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 184($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 188($sp) move $t0, $sp lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 248($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2240,19 +2226,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 192($sp) +sw $t0, 188($sp) li $t0, 0 -sw $t0, 196($sp) +sw $t0, 192($sp) move $t0, $sp -lw $t1, 196($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 200($sp) -lw $t1, 192($sp) +sw $a1, 196($sp) +lw $t1, 188($sp) sw $t1, 116($sp) label_10: lw $t1, 116($sp) @@ -2272,19 +2258,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 204($sp) +sw $t0, 200($sp) li $t0, 0 -sw $t0, 208($sp) +sw $t0, 204($sp) move $t0, $sp -lw $t1, 208($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 204($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 212($sp) -lw $t1, 204($sp) +sw $a1, 208($sp) +lw $t1, 200($sp) sw $t1, 80($sp) label_11: lw $t1, 80($sp) @@ -2304,19 +2290,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 216($sp) +sw $t0, 212($sp) li $t0, 1 -sw $t0, 220($sp) +sw $t0, 216($sp) move $t0, $sp -lw $t1, 220($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 216($t0) +lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 224($sp) -lw $t1, 216($sp) +sw $a1, 220($sp) +lw $t1, 212($sp) sw $t1, 44($sp) label_12: lw $t1, 44($sp) @@ -2325,10 +2311,10 @@ b label_13 label_6: lw $t0, 4($sp) lw $t1, 16($t0) -sw $t1, 240($sp) -lw $t1, 240($sp) +sw $t1, 236($sp) +lw $t1, 236($sp) neg $a0, $t1 -sw $a0, 236($sp) +sw $a0, 232($sp) li $a0, 20 li $v0, 9 syscall @@ -2342,35 +2328,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 232($sp) +sw $t0, 228($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 232($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 244($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 248($sp) +sw $a1, 240($sp) move $t0, $sp -lw $t1, 232($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 248($t0) @@ -2379,15 +2351,15 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 228($sp) -lw $t1, 228($sp) +sw $a1, 224($sp) +lw $t1, 224($sp) sw $t1, 8($sp) label_13: lw $t1, 8($sp) -sw $t1, 252($sp) -lw $a1, 252($sp) +sw $t1, 244($sp) +lw $a1, 244($sp) lw $ra, 0($sp) -addi $sp, $sp, 264 +addi $sp, $sp, 256 jr $ra E_init: addi $sp, $sp, -4 @@ -2550,7 +2522,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra A2I.c2i: -addi $sp, $sp, -500 +addi $sp, $sp, -496 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -2582,7 +2554,7 @@ move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2642,7 +2614,7 @@ move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2702,7 +2674,7 @@ move $t0, $sp lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2762,7 +2734,7 @@ move $t0, $sp lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2822,7 +2794,7 @@ move $t0, $sp lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2882,7 +2854,7 @@ move $t0, $sp lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -2942,7 +2914,7 @@ move $t0, $sp lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3002,7 +2974,7 @@ move $t0, $sp lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3062,7 +3034,7 @@ move $t0, $sp lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3122,7 +3094,7 @@ move $t0, $sp lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3153,25 +3125,11 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_23 -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 368($sp) move $t0, $sp -lw $t1, 504($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 500($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3191,19 +3149,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 372($sp) +sw $t0, 368($sp) li $t0, 0 -sw $t0, 376($sp) +sw $t0, 372($sp) move $t0, $sp -lw $t1, 376($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 372($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 380($sp) -lw $t1, 372($sp) +sw $a1, 376($sp) +lw $t1, 368($sp) sw $t1, 328($sp) b label_24 label_23: @@ -3220,19 +3178,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 384($sp) +sw $t0, 380($sp) li $t0, 9 -sw $t0, 388($sp) +sw $t0, 384($sp) move $t0, $sp -lw $t1, 388($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 392($sp) -lw $t1, 384($sp) +sw $a1, 388($sp) +lw $t1, 380($sp) sw $t1, 328($sp) label_24: lw $t1, 328($sp) @@ -3252,19 +3210,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 396($sp) +sw $t0, 392($sp) li $t0, 8 -sw $t0, 400($sp) +sw $t0, 396($sp) move $t0, $sp -lw $t1, 400($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 396($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 404($sp) -lw $t1, 396($sp) +sw $a1, 400($sp) +lw $t1, 392($sp) sw $t1, 292($sp) label_25: lw $t1, 292($sp) @@ -3284,19 +3242,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 408($sp) +sw $t0, 404($sp) li $t0, 7 -sw $t0, 412($sp) +sw $t0, 408($sp) move $t0, $sp -lw $t1, 412($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 416($sp) -lw $t1, 408($sp) +sw $a1, 412($sp) +lw $t1, 404($sp) sw $t1, 256($sp) label_26: lw $t1, 256($sp) @@ -3316,19 +3274,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 420($sp) +sw $t0, 416($sp) li $t0, 6 -sw $t0, 424($sp) +sw $t0, 420($sp) move $t0, $sp -lw $t1, 424($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 420($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 428($sp) -lw $t1, 420($sp) +sw $a1, 424($sp) +lw $t1, 416($sp) sw $t1, 220($sp) label_27: lw $t1, 220($sp) @@ -3348,19 +3306,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 432($sp) +sw $t0, 428($sp) li $t0, 5 -sw $t0, 436($sp) +sw $t0, 432($sp) move $t0, $sp -lw $t1, 436($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 432($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 440($sp) -lw $t1, 432($sp) +sw $a1, 436($sp) +lw $t1, 428($sp) sw $t1, 184($sp) label_28: lw $t1, 184($sp) @@ -3380,19 +3338,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 444($sp) +sw $t0, 440($sp) li $t0, 4 -sw $t0, 448($sp) +sw $t0, 444($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 444($t0) +lw $t1, 440($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 452($sp) -lw $t1, 444($sp) +sw $a1, 448($sp) +lw $t1, 440($sp) sw $t1, 148($sp) label_29: lw $t1, 148($sp) @@ -3412,19 +3370,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 456($sp) +sw $t0, 452($sp) li $t0, 3 -sw $t0, 460($sp) +sw $t0, 456($sp) move $t0, $sp -lw $t1, 460($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 464($sp) -lw $t1, 456($sp) +sw $a1, 460($sp) +lw $t1, 452($sp) sw $t1, 112($sp) label_30: lw $t1, 112($sp) @@ -3444,19 +3402,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 468($sp) +sw $t0, 464($sp) li $t0, 2 -sw $t0, 472($sp) +sw $t0, 468($sp) move $t0, $sp -lw $t1, 472($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 476($sp) -lw $t1, 468($sp) +sw $a1, 472($sp) +lw $t1, 464($sp) sw $t1, 76($sp) label_31: lw $t1, 76($sp) @@ -3476,19 +3434,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 480($sp) +sw $t0, 476($sp) li $t0, 1 -sw $t0, 484($sp) +sw $t0, 480($sp) move $t0, $sp -lw $t1, 484($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 480($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 488($sp) -lw $t1, 480($sp) +sw $a1, 484($sp) +lw $t1, 476($sp) sw $t1, 40($sp) label_32: lw $t1, 40($sp) @@ -3508,27 +3466,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 492($sp) +sw $t0, 488($sp) li $t0, 0 -sw $t0, 496($sp) +sw $t0, 492($sp) move $t0, $sp -lw $t1, 496($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 500($sp) -lw $t1, 492($sp) +sw $a1, 496($sp) +lw $t1, 488($sp) sw $t1, 4($sp) label_33: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 512 +addi $sp, $sp, 508 jr $ra A2I.i2c: -addi $sp, $sp, -500 +addi $sp, $sp, -496 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -3556,7 +3514,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -3617,7 +3575,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 68($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $t0, 60($sp) @@ -3678,7 +3636,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 104($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 88($sp) lw $t0, 96($sp) @@ -3739,7 +3697,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 124($sp) lw $t0, 132($sp) @@ -3800,7 +3758,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 176($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 160($sp) lw $t0, 168($sp) @@ -3861,7 +3819,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 212($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 196($sp) lw $t0, 204($sp) @@ -3922,7 +3880,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 248($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 232($sp) lw $t0, 240($sp) @@ -3983,7 +3941,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 284($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 268($sp) lw $t0, 276($sp) @@ -4044,7 +4002,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 320($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 304($sp) lw $t0, 312($sp) @@ -4105,7 +4063,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 356($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 340($sp) lw $t0, 348($sp) @@ -4141,25 +4099,11 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_43 -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 368($sp) move $t0, $sp -lw $t1, 504($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 500($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4167,7 +4111,7 @@ lw $t3, 0($t2) jal $t3 sw $a1, 364($sp) la $t0, empty_str -sw $t0, 372($sp) +sw $t0, 368($sp) li $a0, 20 li $v0, 9 syscall @@ -4181,22 +4125,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 376($sp) +sw $t0, 372($sp) move $t0, $sp -lw $t1, 372($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 376($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 380($sp) -lw $t1, 376($sp) +sw $a1, 376($sp) +lw $t1, 372($sp) sw $t1, 328($sp) b label_44 label_43: la $t0, s_12 -sw $t0, 384($sp) +sw $t0, 380($sp) li $a0, 20 li $v0, 9 syscall @@ -4210,17 +4154,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 388($sp) +sw $t0, 384($sp) move $t0, $sp -lw $t1, 384($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 388($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 392($sp) -lw $t1, 388($sp) +sw $a1, 388($sp) +lw $t1, 384($sp) sw $t1, 328($sp) label_44: lw $t1, 328($sp) @@ -4228,7 +4172,7 @@ sw $t1, 292($sp) b label_45 label_42: la $t0, s_11 -sw $t0, 396($sp) +sw $t0, 392($sp) li $a0, 20 li $v0, 9 syscall @@ -4242,17 +4186,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 400($sp) +sw $t0, 396($sp) move $t0, $sp -lw $t1, 396($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 400($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 404($sp) -lw $t1, 400($sp) +sw $a1, 400($sp) +lw $t1, 396($sp) sw $t1, 292($sp) label_45: lw $t1, 292($sp) @@ -4260,7 +4204,7 @@ sw $t1, 256($sp) b label_46 label_41: la $t0, s_10 -sw $t0, 408($sp) +sw $t0, 404($sp) li $a0, 20 li $v0, 9 syscall @@ -4274,17 +4218,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 412($sp) +sw $t0, 408($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 412($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 416($sp) -lw $t1, 412($sp) +sw $a1, 412($sp) +lw $t1, 408($sp) sw $t1, 256($sp) label_46: lw $t1, 256($sp) @@ -4292,7 +4236,7 @@ sw $t1, 220($sp) b label_47 label_40: la $t0, s_9 -sw $t0, 420($sp) +sw $t0, 416($sp) li $a0, 20 li $v0, 9 syscall @@ -4306,17 +4250,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 424($sp) +sw $t0, 420($sp) move $t0, $sp -lw $t1, 420($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 424($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 428($sp) -lw $t1, 424($sp) +sw $a1, 424($sp) +lw $t1, 420($sp) sw $t1, 220($sp) label_47: lw $t1, 220($sp) @@ -4324,7 +4268,7 @@ sw $t1, 184($sp) b label_48 label_39: la $t0, s_8 -sw $t0, 432($sp) +sw $t0, 428($sp) li $a0, 20 li $v0, 9 syscall @@ -4338,17 +4282,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 436($sp) +sw $t0, 432($sp) move $t0, $sp -lw $t1, 432($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 436($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 440($sp) -lw $t1, 436($sp) +sw $a1, 436($sp) +lw $t1, 432($sp) sw $t1, 184($sp) label_48: lw $t1, 184($sp) @@ -4356,7 +4300,7 @@ sw $t1, 148($sp) b label_49 label_38: la $t0, s_7 -sw $t0, 444($sp) +sw $t0, 440($sp) li $a0, 20 li $v0, 9 syscall @@ -4370,17 +4314,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 448($sp) +sw $t0, 444($sp) move $t0, $sp -lw $t1, 444($t0) +lw $t1, 440($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 448($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 452($sp) -lw $t1, 448($sp) +sw $a1, 448($sp) +lw $t1, 444($sp) sw $t1, 148($sp) label_49: lw $t1, 148($sp) @@ -4388,7 +4332,7 @@ sw $t1, 112($sp) b label_50 label_37: la $t0, s_6 -sw $t0, 456($sp) +sw $t0, 452($sp) li $a0, 20 li $v0, 9 syscall @@ -4402,17 +4346,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 460($sp) +sw $t0, 456($sp) move $t0, $sp -lw $t1, 456($t0) +lw $t1, 452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 460($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 464($sp) -lw $t1, 460($sp) +sw $a1, 460($sp) +lw $t1, 456($sp) sw $t1, 112($sp) label_50: lw $t1, 112($sp) @@ -4420,7 +4364,7 @@ sw $t1, 76($sp) b label_51 label_36: la $t0, s_5 -sw $t0, 468($sp) +sw $t0, 464($sp) li $a0, 20 li $v0, 9 syscall @@ -4434,17 +4378,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 472($sp) +sw $t0, 468($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 472($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 476($sp) -lw $t1, 472($sp) +sw $a1, 472($sp) +lw $t1, 468($sp) sw $t1, 76($sp) label_51: lw $t1, 76($sp) @@ -4452,7 +4396,7 @@ sw $t1, 40($sp) b label_52 label_35: la $t0, s_4 -sw $t0, 480($sp) +sw $t0, 476($sp) li $a0, 20 li $v0, 9 syscall @@ -4466,17 +4410,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 484($sp) +sw $t0, 480($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 484($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 488($sp) -lw $t1, 484($sp) +sw $a1, 484($sp) +lw $t1, 480($sp) sw $t1, 40($sp) label_52: lw $t1, 40($sp) @@ -4484,7 +4428,7 @@ sw $t1, 4($sp) b label_53 label_34: la $t0, s_3 -sw $t0, 492($sp) +sw $t0, 488($sp) li $a0, 20 li $v0, 9 syscall @@ -4498,32 +4442,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 496($sp) +sw $t0, 492($sp) move $t0, $sp -lw $t1, 492($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 496($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 500($sp) -lw $t1, 496($sp) +sw $a1, 496($sp) +lw $t1, 492($sp) sw $t1, 4($sp) label_53: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 512 +addi $sp, $sp, 508 jr $ra A2I.a2i: -addi $sp, $sp, -324 +addi $sp, $sp, -312 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4648,10 +4592,10 @@ sw $t1, 0($sp) lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4775,10 +4719,10 @@ sw $t1, 0($sp) lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4845,28 +4789,14 @@ sw $a1, 168($sp) lw $t0, 112($sp) lw $a0, 16($t0) bnez $a0, label_56 -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 176($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4878,16 +4808,16 @@ sw $t1, 108($sp) b label_57 label_56: move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 204($sp) +sw $a1, 200($sp) li $a0, 20 li $v0, 9 syscall @@ -4901,28 +4831,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 208($sp) +sw $t0, 204($sp) li $t0, 1 -sw $t0, 212($sp) +sw $t0, 208($sp) move $t0, $sp -lw $t1, 212($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 216($sp) +sw $a1, 212($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 192($sp) lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 196($sp) -lw $t0, 208($sp) -lw $t1, 16($t0) -sw $t1, 200($sp) -lw $a0, 196($sp) -lw $t1, 200($sp) +lw $a0, 192($sp) +lw $t1, 196($sp) sub $a0, $a0, $t1 -sw $a0, 192($sp) +sw $a0, 188($sp) li $a0, 20 li $v0, 9 syscall @@ -4936,16 +4866,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 188($sp) +sw $t0, 184($sp) move $t0, $sp -lw $t1, 192($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 220($sp) +sw $a1, 216($sp) li $a0, 20 li $v0, 9 syscall @@ -4959,64 +4889,50 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 224($sp) +sw $t0, 220($sp) li $t0, 1 -sw $t0, 228($sp) +sw $t0, 224($sp) move $t0, $sp -lw $t1, 228($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 224($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 232($sp) +sw $a1, 228($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 224($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 184($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 236($sp) +sw $a1, 180($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 180($sp) -lw $t1, 180($sp) +sw $a1, 176($sp) +lw $t1, 176($sp) sw $t1, 108($sp) label_57: lw $t1, 108($sp) @@ -5024,16 +4940,16 @@ sw $t1, 44($sp) b label_58 label_55: move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 276($sp) +sw $a1, 268($sp) li $a0, 20 li $v0, 9 syscall @@ -5047,28 +4963,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 280($sp) +sw $t0, 272($sp) li $t0, 1 -sw $t0, 284($sp) +sw $t0, 276($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 280($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 288($sp) -lw $t0, 276($sp) +sw $a1, 280($sp) +lw $t0, 268($sp) lw $t1, 16($t0) -sw $t1, 268($sp) -lw $t0, 280($sp) +sw $t1, 260($sp) +lw $t0, 272($sp) lw $t1, 16($t0) -sw $t1, 272($sp) -lw $a0, 268($sp) -lw $t1, 272($sp) +sw $t1, 264($sp) +lw $a0, 260($sp) +lw $t1, 264($sp) sub $a0, $a0, $t1 -sw $a0, 264($sp) +sw $a0, 256($sp) li $a0, 20 li $v0, 9 syscall @@ -5082,16 +4998,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 260($sp) +sw $t0, 252($sp) move $t0, $sp -lw $t1, 264($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 292($sp) +sw $a1, 284($sp) li $a0, 20 li $v0, 9 syscall @@ -5105,69 +5021,55 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 296($sp) +sw $t0, 288($sp) li $t0, 1 -sw $t0, 300($sp) +sw $t0, 292($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 292($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 304($sp) +sw $a1, 296($sp) move $t0, $sp -lw $t1, 260($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 256($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 308($sp) +sw $a1, 248($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 308($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 252($sp) -lw $t0, 252($sp) +sw $a1, 244($sp) +lw $t0, 244($sp) lw $t1, 16($t0) -sw $t1, 248($sp) -lw $t1, 248($sp) +sw $t1, 240($sp) +lw $t1, 240($sp) neg $a0, $t1 -sw $a0, 244($sp) +sw $a0, 236($sp) li $a0, 20 li $v0, 9 syscall @@ -5181,17 +5083,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 232($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 312($sp) -lw $t1, 240($sp) +sw $a1, 300($sp) +lw $t1, 232($sp) sw $t1, 44($sp) label_58: lw $t1, 44($sp) @@ -5211,27 +5113,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 316($sp) +sw $t0, 304($sp) li $t0, 0 -sw $t0, 320($sp) +sw $t0, 308($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 324($sp) -lw $t1, 316($sp) +sw $a1, 312($sp) +lw $t1, 304($sp) sw $t1, 4($sp) label_59: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 336 +addi $sp, $sp, 324 jr $ra A2I.a2i_aux: -addi $sp, $sp, -192 +addi $sp, $sp, -188 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -5262,10 +5164,10 @@ sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) move $t0, $sp -lw $t1, 200($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 196($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -5430,38 +5332,24 @@ sw $t1, 0($sp) lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 196($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 120($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 136($sp) move $t0, $sp lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 192($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -5500,7 +5388,7 @@ lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 140($sp) +sw $a1, 136($sp) lw $t1, 68($sp) sw $t1, 16($sp) li $a0, 20 @@ -5516,28 +5404,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 164($sp) +sw $t0, 160($sp) li $t0, 1 -sw $t0, 168($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 172($sp) +sw $a1, 168($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 156($sp) -lw $t0, 164($sp) +sw $t1, 152($sp) +lw $t0, 160($sp) lw $t1, 16($t0) -sw $t1, 160($sp) -lw $a0, 156($sp) -lw $t1, 160($sp) +sw $t1, 156($sp) +lw $a0, 152($sp) +lw $t1, 156($sp) add $a0, $a0, $t1 -sw $a0, 152($sp) +sw $a0, 148($sp) li $a0, 20 li $v0, 9 syscall @@ -5551,32 +5439,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 176($sp) -lw $t1, 148($sp) +sw $a1, 172($sp) +lw $t1, 144($sp) sw $t1, 40($sp) b label_60 label_62: lw $t1, 44($sp) +sw $t1, 180($sp) +lw $t1, 180($sp) sw $t1, 184($sp) -lw $t1, 184($sp) -sw $t1, 188($sp) lw $t1, 16($sp) -sw $t1, 192($sp) -lw $a1, 192($sp) +sw $t1, 188($sp) +lw $a1, 188($sp) lw $ra, 0($sp) -addi $sp, $sp, 204 +addi $sp, $sp, 200 jr $ra A2I.i2a: -addi $sp, $sp, -164 +addi $sp, $sp, -156 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -5604,7 +5492,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 172($sp) +lw $t0, 164($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -5668,7 +5556,7 @@ sw $a1, 68($sp) lw $t0, 60($sp) lw $t1, 16($t0) sw $t1, 52($sp) -lw $t0, 172($sp) +lw $t0, 164($sp) lw $t1, 16($t0) sw $t1, 56($sp) lw $a0, 52($sp) @@ -5780,7 +5668,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 136($sp) -lw $t0, 172($sp) +lw $t0, 164($sp) lw $t1, 16($t0) sw $t1, 104($sp) lw $t0, 112($sp) @@ -5813,28 +5701,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 144($sp) move $t0, $sp lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 160($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -5859,35 +5733,21 @@ lw $t1, 76($sp) sw $t1, 40($sp) b label_65 label_64: -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 152($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 160($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 148($sp) -lw $t1, 148($sp) +sw $a1, 144($sp) +lw $t1, 144($sp) sw $t1, 40($sp) label_65: lw $t1, 40($sp) @@ -5895,7 +5755,7 @@ sw $t1, 4($sp) b label_66 label_63: la $t0, s_3 -sw $t0, 156($sp) +sw $t0, 148($sp) li $a0, 20 li $v0, 9 syscall @@ -5909,25 +5769,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 160($sp) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 164($sp) -lw $t1, 160($sp) +sw $a1, 156($sp) +lw $t1, 152($sp) sw $t1, 4($sp) label_66: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 176 +addi $sp, $sp, 168 jr $ra A2I.i2a_aux: -addi $sp, $sp, -160 +addi $sp, $sp, -152 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -5955,7 +5815,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 168($sp) +lw $t0, 160($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -6016,7 +5876,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 64($sp) -lw $t0, 168($sp) +lw $t0, 160($sp) lw $t1, 16($t0) sw $t1, 48($sp) lw $t0, 56($sp) @@ -6052,28 +5912,14 @@ jal Int_init sw $a1, 68($sp) lw $t1, 40($sp) sw $t1, 72($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 84($sp) move $t0, $sp lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -6093,28 +5939,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t0, 120($sp) li $t0, 10 -sw $t0, 128($sp) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 132($sp) +sw $a1, 128($sp) lw $t0, 72($sp) lw $t1, 16($t0) -sw $t1, 116($sp) -lw $t0, 124($sp) +sw $t1, 112($sp) +lw $t0, 120($sp) lw $t1, 16($t0) -sw $t1, 120($sp) -lw $a0, 116($sp) -lw $t1, 120($sp) +sw $t1, 116($sp) +lw $a0, 112($sp) +lw $t1, 116($sp) mul $a0, $a0, $t1 -sw $a0, 112($sp) +sw $a0, 108($sp) li $a0, 20 li $v0, 9 syscall @@ -6128,26 +5974,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 108($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 136($sp) -lw $t0, 168($sp) +sw $a1, 132($sp) +lw $t0, 160($sp) lw $t1, 16($t0) -sw $t1, 100($sp) -lw $t0, 108($sp) +sw $t1, 96($sp) +lw $t0, 104($sp) lw $t1, 16($t0) -sw $t1, 104($sp) -lw $a0, 100($sp) -lw $t1, 104($sp) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) sub $a0, $a0, $t1 -sw $a0, 96($sp) +sw $a0, 92($sp) li $a0, 20 li $v0, 9 syscall @@ -6161,46 +6007,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 92($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 140($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 144($sp) +sw $a1, 136($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 88($sp) +sw $a1, 84($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 80($t0) @@ -6214,13 +6046,13 @@ lw $t3, 16($t2) jal $t3 sw $a1, 76($sp) lw $t1, 76($sp) -sw $t1, 148($sp) -lw $t1, 148($sp) +sw $t1, 140($sp) +lw $t1, 140($sp) sw $t1, 4($sp) b label_68 label_67: la $t0, empty_str -sw $t0, 152($sp) +sw $t0, 144($sp) li $a0, 20 li $v0, 9 syscall @@ -6234,22 +6066,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 156($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 160($sp) -lw $t1, 156($sp) +sw $a1, 152($sp) +lw $t1, 148($sp) sw $t1, 4($sp) label_68: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 172 +addi $sp, $sp, 164 jr $ra Main_init: addi $sp, $sp, -28 @@ -6328,7 +6160,7 @@ lw $ra, 0($sp) addi $sp, $sp, 36 jr $ra Main.menu: -addi $sp, $sp, -464 +addi $sp, $sp, -356 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_15 @@ -6356,67 +6188,39 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 468($sp) +lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 392($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 20($sp) la $t0, s_16 -sw $t0, 40($sp) +sw $t0, 32($sp) li $a0, 20 li $v0, 9 syscall @@ -6430,46 +6234,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 36($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 48($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 52($sp) +sw $a1, 40($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 36($sp) +sw $a1, 28($sp) la $t0, s_17 -sw $t0, 60($sp) +sw $t0, 48($sp) li $a0, 20 li $v0, 9 syscall @@ -6483,77 +6273,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 64($sp) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 68($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 72($sp) +sw $a1, 56($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 56($sp) -lw $t0, 468($sp) +sw $a1, 44($sp) +lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 392($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 76($sp) +sw $a1, 60($sp) la $t0, s_18 -sw $t0, 92($sp) +sw $t0, 72($sp) li $a0, 20 li $v0, 9 syscall @@ -6567,46 +6329,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 100($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 104($sp) +sw $a1, 80($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 88($sp) +sw $a1, 68($sp) la $t0, s_19 -sw $t0, 112($sp) +sw $t0, 88($sp) li $a0, 20 li $v0, 9 syscall @@ -6620,77 +6368,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 116($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 120($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 124($sp) +sw $a1, 96($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 108($sp) -lw $t0, 468($sp) +sw $a1, 84($sp) +lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 392($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 136($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 128($sp) +sw $a1, 100($sp) la $t0, s_20 -sw $t0, 144($sp) +sw $t0, 112($sp) li $a0, 20 li $v0, 9 syscall @@ -6704,46 +6424,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 152($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 156($sp) +sw $a1, 120($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 140($sp) +sw $a1, 108($sp) la $t0, s_21 -sw $t0, 164($sp) +sw $t0, 128($sp) li $a0, 20 li $v0, 9 syscall @@ -6757,77 +6463,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 168($sp) +sw $t0, 132($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 172($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 176($sp) +sw $a1, 136($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 160($sp) -lw $t0, 468($sp) +sw $a1, 124($sp) +lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 392($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 188($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 180($sp) +sw $a1, 140($sp) la $t0, s_22 -sw $t0, 196($sp) +sw $t0, 152($sp) li $a0, 20 li $v0, 9 syscall @@ -6841,46 +6519,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 200($sp) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 196($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 204($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 208($sp) +sw $a1, 160($sp) move $t0, $sp -lw $t1, 200($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 192($sp) +sw $a1, 148($sp) la $t0, s_23 -sw $t0, 216($sp) +sw $t0, 168($sp) li $a0, 20 li $v0, 9 syscall @@ -6894,77 +6558,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 220($sp) +sw $t0, 172($sp) move $t0, $sp -lw $t1, 216($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 224($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 228($sp) +sw $a1, 176($sp) move $t0, $sp -lw $t1, 220($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 228($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 212($sp) -lw $t0, 468($sp) +sw $a1, 164($sp) +lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 392($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 232($sp) +sw $a1, 180($sp) la $t0, s_24 -sw $t0, 248($sp) +sw $t0, 192($sp) li $a0, 20 li $v0, 9 syscall @@ -6978,46 +6614,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 252($sp) +sw $t0, 196($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 256($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 260($sp) +sw $a1, 200($sp) move $t0, $sp -lw $t1, 252($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 244($sp) +sw $a1, 188($sp) la $t0, s_25 -sw $t0, 268($sp) +sw $t0, 208($sp) li $a0, 20 li $v0, 9 syscall @@ -7031,77 +6653,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 272($sp) +sw $t0, 212($sp) move $t0, $sp -lw $t1, 268($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 272($t0) +lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 276($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 280($sp) +sw $a1, 216($sp) move $t0, $sp -lw $t1, 272($t0) +lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 280($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 264($sp) -lw $t0, 468($sp) +sw $a1, 204($sp) +lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 392($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 292($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 292($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 284($sp) +sw $a1, 220($sp) la $t0, s_26 -sw $t0, 300($sp) +sw $t0, 232($sp) li $a0, 20 li $v0, 9 syscall @@ -7115,46 +6709,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 304($sp) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 304($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 308($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 312($sp) +sw $a1, 240($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 312($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 296($sp) +sw $a1, 228($sp) la $t0, s_27 -sw $t0, 320($sp) +sw $t0, 248($sp) li $a0, 20 li $v0, 9 syscall @@ -7168,77 +6748,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 324($sp) +sw $t0, 252($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 324($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 328($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 332($sp) +sw $a1, 256($sp) move $t0, $sp -lw $t1, 324($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 316($sp) -lw $t0, 468($sp) +sw $a1, 244($sp) +lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 392($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 344($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 344($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 336($sp) +sw $a1, 260($sp) la $t0, s_28 -sw $t0, 352($sp) +sw $t0, 272($sp) li $a0, 20 li $v0, 9 syscall @@ -7252,46 +6804,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 356($sp) +sw $t0, 276($sp) move $t0, $sp -lw $t1, 352($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 356($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 360($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 364($sp) +sw $a1, 280($sp) move $t0, $sp -lw $t1, 356($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 364($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 348($sp) +sw $a1, 268($sp) la $t0, s_29 -sw $t0, 372($sp) +sw $t0, 288($sp) li $a0, 20 li $v0, 9 syscall @@ -7305,77 +6843,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 376($sp) +sw $t0, 292($sp) move $t0, $sp -lw $t1, 372($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 376($t0) +lw $t1, 292($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 380($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 384($sp) +sw $a1, 296($sp) move $t0, $sp -lw $t1, 376($t0) +lw $t1, 292($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 368($sp) -lw $t0, 468($sp) +sw $a1, 284($sp) +lw $t0, 360($sp) lw $t1, 20($t0) -sw $t1, 392($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 396($sp) +sw $t1, 304($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 396($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 388($sp) +sw $a1, 300($sp) la $t0, s_30 -sw $t0, 404($sp) +sw $t0, 312($sp) li $a0, 20 li $v0, 9 syscall @@ -7389,46 +6899,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 408($sp) +sw $t0, 316($sp) move $t0, $sp -lw $t1, 404($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 412($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 416($sp) +sw $a1, 320($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 416($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 400($sp) +sw $a1, 308($sp) la $t0, s_31 -sw $t0, 424($sp) +sw $t0, 328($sp) li $a0, 20 li $v0, 9 syscall @@ -7440,48 +6936,34 @@ la $t1, String_name sw $t1, 4($t0) li $t1, 5 sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 428($sp) -move $t0, $sp -lw $t1, 424($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 428($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 432($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods +la $t1, String_methods sw $t1, 12($t0) -sw $t0, 436($sp) +sw $t0, 332($sp) move $t0, $sp -lw $t1, 428($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 436($t0) +jal String_init +sw $a1, 336($sp) +move $t0, $sp +lw $t1, 332($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 420($sp) +sw $a1, 324($sp) la $t0, s_32 -sw $t0, 444($sp) +sw $t0, 344($sp) li $a0, 20 li $v0, 9 syscall @@ -7495,75 +6977,47 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 448($sp) +sw $t0, 348($sp) move $t0, $sp -lw $t1, 444($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 448($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 452($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 456($sp) +sw $a1, 352($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 440($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 464($sp) +sw $a1, 340($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 464($t0) +lw $t1, 360($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 460($sp) -lw $a1, 460($sp) +sw $a1, 356($sp) +lw $a1, 356($sp) lw $ra, 0($sp) -addi $sp, $sp, 472 +addi $sp, $sp, 364 jr $ra Main.prompt: -addi $sp, $sp, -48 +addi $sp, $sp, -36 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_33 @@ -7591,28 +7045,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -7620,7 +7060,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) la $t0, s_34 -sw $t0, 28($sp) +sw $t0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -7634,35 +7074,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 28($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 36($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 40($sp) +sw $a1, 32($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 40($t0) @@ -7671,38 +7097,24 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 24($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 48($sp) +sw $a1, 20($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 44($sp) -lw $a1, 44($sp) +sw $a1, 36($sp) +lw $a1, 36($sp) lw $ra, 0($sp) -addi $sp, $sp, 56 +addi $sp, $sp, 44 jr $ra Main.get_int: -addi $sp, $sp, -36 +addi $sp, $sp, -32 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -7727,25 +7139,11 @@ jal A2I_init sw $a1, 8($sp) lw $t1, 4($sp) sw $t1, 12($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -7753,9 +7151,9 @@ lw $t3, 32($t2) jal $t3 sw $a1, 16($sp) lw $t1, 16($sp) -sw $t1, 24($sp) +sw $t1, 20($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -7767,20 +7165,20 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 28($sp) +sw $a1, 24($sp) +lw $t1, 24($sp) +sw $t1, 28($sp) lw $t1, 28($sp) sw $t1, 32($sp) -lw $t1, 32($sp) -sw $t1, 36($sp) -lw $a1, 36($sp) +lw $a1, 32($sp) lw $ra, 0($sp) -addi $sp, $sp, 44 +addi $sp, $sp, 40 jr $ra Main.is_even: -addi $sp, $sp, -204 +addi $sp, $sp, -196 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t1, 212($sp) +lw $t1, 204($sp) sw $t1, 4($sp) li $a0, 20 li $v0, 9 @@ -8023,28 +7421,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 148($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 152($sp) move $t0, $sp lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 200($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -8068,19 +7452,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 156($sp) +sw $t0, 152($sp) li $t0, 0 -sw $t0, 160($sp) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 160($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 164($sp) -lw $t1, 156($sp) +sw $a1, 160($sp) +lw $t1, 152($sp) sw $t1, 80($sp) label_72: lw $t1, 80($sp) @@ -8100,19 +7484,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 168($sp) +sw $t0, 164($sp) li $t0, 1 -sw $t0, 172($sp) +sw $t0, 168($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 176($sp) -lw $t1, 168($sp) +sw $a1, 172($sp) +lw $t1, 164($sp) sw $t1, 44($sp) label_73: lw $t1, 44($sp) @@ -8121,10 +7505,10 @@ b label_74 label_69: lw $t0, 4($sp) lw $t1, 16($t0) -sw $t1, 192($sp) -lw $t1, 192($sp) +sw $t1, 188($sp) +lw $t1, 188($sp) neg $a0, $t1 -sw $a0, 188($sp) +sw $a0, 184($sp) li $a0, 20 li $v0, 9 syscall @@ -8138,35 +7522,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 184($sp) +sw $t0, 180($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 196($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 200($sp) +sw $a1, 192($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 200($t0) @@ -8175,28 +7545,28 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 180($sp) -lw $t1, 180($sp) +sw $a1, 176($sp) +lw $t1, 176($sp) sw $t1, 8($sp) label_74: lw $t1, 8($sp) -sw $t1, 204($sp) -lw $a1, 204($sp) +sw $t1, 196($sp) +lw $a1, 196($sp) lw $ra, 0($sp) -addi $sp, $sp, 216 +addi $sp, $sp, 208 jr $ra Main.class_type: -addi $sp, $sp, -148 +addi $sp, $sp, -124 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 156($sp) +lw $t0, 132($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_76 b case_void_error label_76: -blt $t1 9 label_77 -bgt $t1 9 label_77 +blt $t1 10 label_77 +bgt $t1 10 label_77 lw $t1, 132($sp) sw $t1, 8($sp) la $t0, s_35 @@ -8223,29 +7593,15 @@ lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 24($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 28($sp) +sw $a1, 24($sp) move $t0, $sp lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -8256,12 +7612,12 @@ lw $t1, 12($sp) sw $t1, 4($sp) b label_75 label_77: -blt $t1 8 label_78 -bgt $t1 8 label_78 +blt $t1 9 label_78 +bgt $t1 10 label_78 lw $t1, 132($sp) sw $t1, 28($sp) la $t0, s_36 -sw $t0, 40($sp) +sw $t0, 36($sp) li $a0, 20 li $v0, 9 syscall @@ -8275,54 +7631,40 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 48($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 52($sp) +sw $a1, 44($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 36($sp) -lw $t1, 36($sp) +sw $a1, 32($sp) +lw $t1, 32($sp) sw $t1, 4($sp) b label_75 label_78: -blt $t1 7 label_79 -bgt $t1 7 label_79 +blt $t1 8 label_79 +bgt $t1 8 label_79 lw $t1, 132($sp) sw $t1, 48($sp) la $t0, s_37 -sw $t0, 64($sp) +sw $t0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -8336,54 +7678,40 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 72($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 76($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 60($sp) -lw $t1, 60($sp) +sw $a1, 52($sp) +lw $t1, 52($sp) sw $t1, 4($sp) b label_75 label_79: -blt $t1 6 label_80 -bgt $t1 6 label_80 +blt $t1 7 label_80 +bgt $t1 10 label_80 lw $t1, 132($sp) sw $t1, 68($sp) la $t0, s_38 -sw $t0, 88($sp) +sw $t0, 76($sp) li $a0, 20 li $v0, 9 syscall @@ -8397,54 +7725,40 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 92($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 96($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 100($sp) +sw $a1, 84($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 84($sp) -lw $t1, 84($sp) +sw $a1, 72($sp) +lw $t1, 72($sp) sw $t1, 4($sp) b label_75 label_80: -blt $t1 5 label_81 -bgt $t1 5 label_81 +blt $t1 6 label_81 +bgt $t1 10 label_81 lw $t1, 132($sp) sw $t1, 88($sp) la $t0, s_39 -sw $t0, 112($sp) +sw $t0, 96($sp) li $a0, 20 li $v0, 9 syscall @@ -8458,54 +7772,40 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 116($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 120($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 124($sp) +sw $a1, 104($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 108($sp) -lw $t1, 108($sp) +sw $a1, 92($sp) +lw $t1, 92($sp) sw $t1, 4($sp) b label_75 label_81: blt $t1 0 label_82 -bgt $t1 11 label_82 +bgt $t1 10 label_82 lw $t1, 132($sp) sw $t1, 108($sp) la $t0, s_40 -sw $t0, 136($sp) +sw $t0, 116($sp) li $a0, 20 li $v0, 9 syscall @@ -8519,45 +7819,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 140($sp) +sw $t0, 120($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 144($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 148($sp) +sw $a1, 124($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 128($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 132($sp) -lw $t1, 132($sp) +sw $a1, 112($sp) +lw $t1, 112($sp) sw $t1, 4($sp) b label_75 label_82: @@ -8565,10 +7851,10 @@ b case_no_match_error label_75: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 160 +addi $sp, $sp, 136 jr $ra Main.print: -addi $sp, $sp, -52 +addi $sp, $sp, -44 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -8594,10 +7880,10 @@ sw $a1, 8($sp) lw $t1, 4($sp) sw $t1, 12($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -8618,28 +7904,14 @@ lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 20($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 28($sp) move $t0, $sp lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -8647,7 +7919,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 16($sp) la $t0, s_41 -sw $t0, 36($sp) +sw $t0, 32($sp) li $a0, 20 li $v0, 9 syscall @@ -8661,35 +7933,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 40($sp) +sw $t0, 36($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 44($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 48($sp) +sw $a1, 40($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 48($t0) @@ -8698,15 +7956,15 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 32($sp) -lw $t1, 32($sp) -sw $t1, 52($sp) -lw $a1, 52($sp) +sw $a1, 28($sp) +lw $t1, 28($sp) +sw $t1, 44($sp) +lw $a1, 44($sp) lw $ra, 0($sp) -addi $sp, $sp, 64 +addi $sp, $sp, 56 jr $ra Main.main: -addi $sp, $sp, -1232 +addi $sp, $sp, -1136 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -8729,11 +7987,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init sw $a1, 8($sp) -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 4($sp) sw $t1, 20($t0) label_83: -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 28($t0) sw $t1, 20($sp) lw $t0, 20($sp) @@ -8762,116 +8020,74 @@ lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 36($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 40($sp) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 36($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 24($sp) -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 44($sp) -lw $t0, 1236($sp) +sw $a1, 40($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 64($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 72($sp) +sw $a1, 56($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 60($sp) -lw $t0, 60($sp) +sw $a1, 52($sp) +lw $t0, 52($sp) lw $a0, 16($t0) bnez $a0, label_86 la $t0, s_43 -sw $t0, 80($sp) +sw $t0, 68($sp) li $a0, 20 li $v0, 9 syscall @@ -8885,50 +8101,36 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 88($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 92($sp) +sw $a1, 76($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 76($sp) -lw $t1, 76($sp) -sw $t1, 56($sp) +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 48($sp) b label_87 label_86: la $t0, s_44 -sw $t0, 100($sp) +sw $t0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -8942,111 +8144,69 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 108($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 112($sp) +sw $a1, 92($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 96($sp) -lw $t1, 96($sp) -sw $t1, 56($sp) +sw $a1, 80($sp) +lw $t1, 80($sp) +sw $t1, 48($sp) label_87: -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 116($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 132($sp) +sw $a1, 96($sp) move $t0, $sp -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 128($sp) -lw $t0, 1236($sp) -lw $t1, 128($sp) +sw $a1, 104($sp) +lw $t0, 1140($sp) +lw $t1, 104($sp) sw $t1, 16($t0) -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_45 -sw $t0, 164($sp) +sw $t0, 136($sp) li $a0, 20 li $v0, 9 syscall @@ -9060,25 +8220,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 168($sp) +sw $t0, 140($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 172($sp) +sw $a1, 144($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 148($sp) +sw $a1, 120($sp) li $a0, 20 li $v0, 9 syscall @@ -9092,24 +8252,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 144($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 176($sp) -lw $t0, 144($sp) +sw $a1, 148($sp) +lw $t0, 116($sp) lw $a0, 16($t0) bnez $a0, label_88 -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_46 -sw $t0, 204($sp) +sw $t0, 176($sp) li $a0, 20 li $v0, 9 syscall @@ -9123,25 +8283,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 208($sp) +sw $t0, 180($sp) move $t0, $sp -lw $t1, 204($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 212($sp) +sw $a1, 184($sp) move $t0, $sp -lw $t1, 208($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 188($sp) +sw $a1, 160($sp) li $a0, 20 li $v0, 9 syscall @@ -9155,24 +8315,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 184($sp) +sw $t0, 156($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 216($sp) -lw $t0, 184($sp) +sw $a1, 188($sp) +lw $t0, 156($sp) lw $a0, 16($t0) bnez $a0, label_89 -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_47 -sw $t0, 244($sp) +sw $t0, 216($sp) li $a0, 20 li $v0, 9 syscall @@ -9186,25 +8346,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 248($sp) +sw $t0, 220($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 248($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 252($sp) +sw $a1, 224($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 228($sp) +sw $a1, 200($sp) li $a0, 20 li $v0, 9 syscall @@ -9218,24 +8378,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 224($sp) +sw $t0, 196($sp) move $t0, $sp -lw $t1, 228($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 224($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 256($sp) -lw $t0, 224($sp) +sw $a1, 228($sp) +lw $t0, 196($sp) lw $a0, 16($t0) bnez $a0, label_90 -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_48 -sw $t0, 284($sp) +sw $t0, 256($sp) li $a0, 20 li $v0, 9 syscall @@ -9249,25 +8409,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 260($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 292($sp) +sw $a1, 264($sp) move $t0, $sp -lw $t1, 288($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 268($sp) +sw $a1, 240($sp) li $a0, 20 li $v0, 9 syscall @@ -9281,24 +8441,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 264($sp) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 268($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 264($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 296($sp) -lw $t0, 264($sp) +sw $a1, 268($sp) +lw $t0, 236($sp) lw $a0, 16($t0) bnez $a0, label_91 -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_49 -sw $t0, 324($sp) +sw $t0, 296($sp) li $a0, 20 li $v0, 9 syscall @@ -9312,25 +8472,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 328($sp) +sw $t0, 300($sp) move $t0, $sp -lw $t1, 324($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 332($sp) +sw $a1, 304($sp) move $t0, $sp -lw $t1, 328($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 308($sp) +sw $a1, 280($sp) li $a0, 20 li $v0, 9 syscall @@ -9344,24 +8504,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 304($sp) +sw $t0, 276($sp) move $t0, $sp -lw $t1, 308($t0) +lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 304($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 336($sp) -lw $t0, 304($sp) +sw $a1, 308($sp) +lw $t0, 276($sp) lw $a0, 16($t0) bnez $a0, label_92 -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_50 -sw $t0, 364($sp) +sw $t0, 336($sp) li $a0, 20 li $v0, 9 syscall @@ -9375,25 +8535,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 368($sp) +sw $t0, 340($sp) move $t0, $sp -lw $t1, 364($t0) +lw $t1, 336($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 340($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 372($sp) +sw $a1, 344($sp) move $t0, $sp -lw $t1, 368($t0) +lw $t1, 340($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 348($sp) +sw $a1, 320($sp) li $a0, 20 li $v0, 9 syscall @@ -9407,24 +8567,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 344($sp) +sw $t0, 316($sp) move $t0, $sp -lw $t1, 348($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 344($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 376($sp) -lw $t0, 344($sp) +sw $a1, 348($sp) +lw $t0, 316($sp) lw $a0, 16($t0) bnez $a0, label_93 -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_51 -sw $t0, 404($sp) +sw $t0, 376($sp) li $a0, 20 li $v0, 9 syscall @@ -9438,25 +8598,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 408($sp) +sw $t0, 380($sp) move $t0, $sp -lw $t1, 404($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 412($sp) +sw $a1, 384($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 388($sp) +sw $a1, 360($sp) li $a0, 20 li $v0, 9 syscall @@ -9470,24 +8630,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 384($sp) +sw $t0, 356($sp) move $t0, $sp -lw $t1, 388($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 356($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 416($sp) -lw $t0, 384($sp) +sw $a1, 388($sp) +lw $t0, 356($sp) lw $a0, 16($t0) bnez $a0, label_94 -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_52 -sw $t0, 444($sp) +sw $t0, 416($sp) li $a0, 20 li $v0, 9 syscall @@ -9501,25 +8661,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 448($sp) +sw $t0, 420($sp) move $t0, $sp -lw $t1, 444($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 448($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 452($sp) +sw $a1, 424($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 428($sp) +sw $a1, 400($sp) li $a0, 20 li $v0, 9 syscall @@ -9533,24 +8693,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 424($sp) +sw $t0, 396($sp) move $t0, $sp -lw $t1, 428($t0) +lw $t1, 400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 424($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 456($sp) -lw $t0, 424($sp) +sw $a1, 428($sp) +lw $t0, 396($sp) lw $a0, 16($t0) bnez $a0, label_95 -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_53 -sw $t0, 484($sp) +sw $t0, 456($sp) li $a0, 20 li $v0, 9 syscall @@ -9564,25 +8724,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 488($sp) +sw $t0, 460($sp) move $t0, $sp -lw $t1, 484($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 488($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 492($sp) +sw $a1, 464($sp) move $t0, $sp -lw $t1, 488($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 468($sp) +sw $a1, 440($sp) li $a0, 20 li $v0, 9 syscall @@ -9596,24 +8756,24 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 464($sp) +sw $t0, 436($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 440($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 464($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 496($sp) -lw $t0, 464($sp) +sw $a1, 468($sp) +lw $t0, 436($sp) lw $a0, 16($t0) bnez $a0, label_96 -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 16($t0) -sw $t1, 520($sp) +sw $t1, 492($sp) la $t0, s_54 -sw $t0, 524($sp) +sw $t0, 496($sp) li $a0, 20 li $v0, 9 syscall @@ -9627,25 +8787,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 528($sp) +sw $t0, 500($sp) move $t0, $sp -lw $t1, 524($t0) +lw $t1, 496($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 528($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 532($sp) +sw $a1, 504($sp) move $t0, $sp -lw $t1, 528($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 520($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 508($sp) +sw $a1, 480($sp) li $a0, 20 li $v0, 9 syscall @@ -9659,17 +8819,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 504($sp) +sw $t0, 476($sp) move $t0, $sp -lw $t1, 508($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 536($sp) -lw $t0, 504($sp) +sw $a1, 508($sp) +lw $t0, 476($sp) lw $a0, 16($t0) bnez $a0, label_97 li $a0, 20 @@ -9685,46 +8845,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 544($sp) +sw $t0, 516($sp) move $t0, $sp -lw $t1, 544($t0) +lw $t1, 516($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 548($sp) -lw $t0, 1236($sp) +sw $a1, 520($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 552($sp) +sw $a1, 524($sp) move $t0, $sp -lw $t1, 552($t0) +lw $t1, 524($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 516($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 516($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 540($sp) -lw $t0, 1236($sp) -lw $t1, 540($sp) +sw $a1, 512($sp) +lw $t0, 1140($sp) +lw $t1, 512($sp) sw $t1, 20($t0) -lw $t1, 540($sp) -sw $t1, 500($sp) +lw $t1, 512($sp) +sw $t1, 472($sp) b label_98 label_97: li $a0, 20 @@ -9740,26 +8900,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 564($sp) +sw $t0, 536($sp) li $t0, 0 -sw $t0, 568($sp) +sw $t0, 540($sp) move $t0, $sp -lw $t1, 568($t0) +lw $t1, 540($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 564($t0) +lw $t1, 536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 572($sp) -lw $t0, 1236($sp) -lw $t1, 564($sp) +sw $a1, 544($sp) +lw $t0, 1140($sp) +lw $t1, 536($sp) sw $t1, 28($t0) -lw $t1, 564($sp) -sw $t1, 500($sp) +lw $t1, 536($sp) +sw $t1, 472($sp) label_98: -lw $t1, 500($sp) -sw $t1, 460($sp) +lw $t1, 472($sp) +sw $t1, 432($sp) b label_99 label_96: li $a0, 20 @@ -9775,25 +8935,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 580($sp) +sw $t0, 552($sp) move $t0, $sp -lw $t1, 580($t0) +lw $t1, 552($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 584($sp) -lw $t0, 1236($sp) -lw $t1, 580($sp) +sw $a1, 556($sp) +lw $t0, 1140($sp) +lw $t1, 552($sp) sw $t1, 20($t0) -lw $t1, 580($sp) -sw $t1, 460($sp) +lw $t1, 552($sp) +sw $t1, 432($sp) label_99: -lw $t1, 460($sp) -sw $t1, 420($sp) +lw $t1, 432($sp) +sw $t1, 392($sp) b label_100 label_95: la $t1, void -sw $t1, 592($sp) +sw $t1, 564($sp) li $a0, 20 li $v0, 9 syscall @@ -9807,68 +8967,68 @@ li $t1, 5 sw $t1, 8($t0) la $t1, E_methods sw $t1, 12($t0) -sw $t0, 600($sp) +sw $t0, 572($sp) move $t0, $sp -lw $t1, 600($t0) +lw $t1, 572($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal E_init -sw $a1, 604($sp) -lw $t0, 1236($sp) +sw $a1, 576($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 608($sp) +sw $a1, 580($sp) move $t0, $sp -lw $t1, 608($t0) +lw $t1, 580($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 600($t0) +lw $t1, 572($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 600($t0) +lw $t1, 572($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 596($sp) -lw $t1, 596($sp) -sw $t1, 592($sp) -lw $t0, 1236($sp) +sw $a1, 568($sp) +lw $t1, 568($sp) +sw $t1, 564($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 636($sp) +sw $a1, 608($sp) move $t0, $sp -lw $t1, 592($t0) +lw $t1, 564($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 592($t0) +lw $t1, 564($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 660($sp) +sw $a1, 632($sp) li $a0, 20 li $v0, 9 syscall @@ -9882,28 +9042,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 664($sp) +sw $t0, 636($sp) li $t0, 8 -sw $t0, 668($sp) +sw $t0, 640($sp) move $t0, $sp -lw $t1, 668($t0) +lw $t1, 640($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 664($t0) +lw $t1, 636($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 672($sp) -lw $t0, 660($sp) +sw $a1, 644($sp) +lw $t0, 632($sp) lw $t1, 16($t0) -sw $t1, 652($sp) -lw $t0, 664($sp) +sw $t1, 624($sp) +lw $t0, 636($sp) lw $t1, 16($t0) -sw $t1, 656($sp) -lw $a0, 652($sp) -lw $t1, 656($sp) +sw $t1, 628($sp) +lw $a0, 624($sp) +lw $t1, 628($sp) mul $a0, $a0, $t1 -sw $a0, 648($sp) +sw $a0, 620($sp) li $a0, 20 li $v0, 9 syscall @@ -9917,26 +9077,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 644($sp) +sw $t0, 616($sp) move $t0, $sp -lw $t1, 648($t0) +lw $t1, 620($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 644($t0) +lw $t1, 616($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 676($sp) -lw $t0, 636($sp) +sw $a1, 648($sp) +lw $t0, 608($sp) lw $t1, 16($t0) -sw $t1, 628($sp) -lw $t0, 644($sp) +sw $t1, 600($sp) +lw $t0, 616($sp) lw $t1, 16($t0) -sw $t1, 632($sp) -lw $a0, 628($sp) -lw $t1, 632($sp) +sw $t1, 604($sp) +lw $a0, 600($sp) +lw $t1, 604($sp) sub $a0, $a0, $t1 -sw $a0, 624($sp) +sw $a0, 596($sp) li $a0, 20 li $v0, 9 syscall @@ -9950,20 +9110,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 620($sp) +sw $t0, 592($sp) move $t0, $sp -lw $t1, 624($t0) +lw $t1, 596($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 620($t0) +lw $t1, 592($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 680($sp) -lw $t1, 620($sp) -sw $t1, 684($sp) +sw $a1, 652($sp) +lw $t1, 592($sp) +sw $t1, 656($sp) la $t0, s_42 -sw $t0, 692($sp) +sw $t0, 664($sp) li $a0, 20 li $v0, 9 syscall @@ -9977,77 +9137,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 696($sp) +sw $t0, 668($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 664($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 696($t0) +lw $t1, 668($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 700($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 704($sp) +sw $a1, 672($sp) move $t0, $sp -lw $t1, 696($t0) +lw $t1, 668($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 704($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 688($sp) -lw $t0, 1236($sp) +sw $a1, 660($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 716($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 716($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 708($sp) +sw $a1, 676($sp) la $t0, s_55 -sw $t0, 724($sp) +sw $t0, 688($sp) li $a0, 20 li $v0, 9 syscall @@ -10061,74 +9193,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 728($sp) +sw $t0, 692($sp) move $t0, $sp -lw $t1, 724($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 728($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 732($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 736($sp) +sw $a1, 696($sp) move $t0, $sp -lw $t1, 728($t0) +lw $t1, 692($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 736($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 720($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 744($sp) +sw $a1, 684($sp) move $t0, $sp -lw $t1, 592($t0) +lw $t1, 564($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 744($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 740($sp) +sw $a1, 700($sp) la $t0, s_56 -sw $t0, 752($sp) +sw $t0, 708($sp) li $a0, 20 li $v0, 9 syscall @@ -10142,44 +9246,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 756($sp) +sw $t0, 712($sp) move $t0, $sp -lw $t1, 752($t0) +lw $t1, 708($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 756($t0) +lw $t1, 712($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 760($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 764($sp) +sw $a1, 716($sp) move $t0, $sp -lw $t1, 756($t0) +lw $t1, 712($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 764($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 748($sp) +sw $a1, 704($sp) li $a0, 16 li $v0, 9 syscall @@ -10193,59 +9283,45 @@ li $t1, 4 sw $t1, 8($t0) la $t1, A2I_methods sw $t1, 12($t0) -sw $t0, 768($sp) +sw $t0, 720($sp) move $t0, $sp -lw $t1, 768($t0) +lw $t1, 720($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A2I_init -sw $a1, 772($sp) -lw $t1, 768($sp) -sw $t1, 776($sp) +sw $a1, 724($sp) +lw $t1, 720($sp) +sw $t1, 728($sp) move $t0, $sp -lw $t1, 684($t0) +lw $t1, 656($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 776($t0) +lw $t1, 728($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 776($t0) +lw $t1, 728($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 784($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 788($sp) +sw $a1, 736($sp) move $t0, $sp -lw $t1, 784($t0) +lw $t1, 736($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 788($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 780($sp) +sw $a1, 732($sp) la $t0, s_33 -sw $t0, 796($sp) +sw $t0, 744($sp) li $a0, 20 li $v0, 9 syscall @@ -10259,58 +9335,44 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 800($sp) -move $t0, $sp -lw $t1, 796($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 800($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 804($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 808($sp) +sw $t0, 748($sp) move $t0, $sp -lw $t1, 800($t0) +lw $t1, 744($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 748($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 752($sp) +move $t0, $sp +lw $t1, 748($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 808($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 792($sp) -lw $t1, 792($sp) -sw $t1, 812($sp) -lw $t1, 812($sp) -sw $t1, 816($sp) -lw $t0, 1236($sp) -lw $t1, 592($sp) +sw $a1, 740($sp) +lw $t1, 740($sp) +sw $t1, 756($sp) +lw $t1, 756($sp) +sw $t1, 760($sp) +lw $t0, 1140($sp) +lw $t1, 564($sp) sw $t1, 20($t0) -lw $t1, 592($sp) -sw $t1, 824($sp) -lw $t1, 824($sp) -sw $t1, 420($sp) +lw $t1, 564($sp) +sw $t1, 768($sp) +lw $t1, 768($sp) +sw $t1, 392($sp) label_100: -lw $t1, 420($sp) -sw $t1, 380($sp) +lw $t1, 392($sp) +sw $t1, 352($sp) b label_101 label_94: li $a0, 20 @@ -10326,46 +9388,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, D_methods sw $t1, 12($t0) -sw $t0, 836($sp) +sw $t0, 780($sp) move $t0, $sp -lw $t1, 836($t0) +lw $t1, 780($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal D_init -sw $a1, 840($sp) -lw $t0, 1236($sp) +sw $a1, 784($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 844($sp) +sw $a1, 788($sp) move $t0, $sp -lw $t1, 844($t0) +lw $t1, 788($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 836($t0) +lw $t1, 780($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 836($t0) +lw $t1, 780($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 832($sp) -lw $t0, 832($sp) +sw $a1, 776($sp) +lw $t0, 776($sp) lw $a0, 16($t0) bnez $a0, label_102 la $t0, s_42 -sw $t0, 856($sp) +sw $t0, 800($sp) li $a0, 20 li $v0, 9 syscall @@ -10379,77 +9441,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 860($sp) +sw $t0, 804($sp) move $t0, $sp -lw $t1, 856($t0) +lw $t1, 800($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 860($t0) +lw $t1, 804($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 864($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 868($sp) +sw $a1, 808($sp) move $t0, $sp -lw $t1, 860($t0) +lw $t1, 804($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 868($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 852($sp) -lw $t0, 1236($sp) +sw $a1, 796($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 880($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 880($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 872($sp) +sw $a1, 812($sp) la $t0, s_57 -sw $t0, 888($sp) +sw $t0, 824($sp) li $a0, 20 li $v0, 9 syscall @@ -10463,50 +9497,36 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 892($sp) +sw $t0, 828($sp) move $t0, $sp -lw $t1, 888($t0) +lw $t1, 824($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 892($t0) +lw $t1, 828($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 896($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 900($sp) +sw $a1, 832($sp) move $t0, $sp -lw $t1, 892($t0) +lw $t1, 828($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 900($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 884($sp) -lw $t1, 884($sp) -sw $t1, 828($sp) +sw $a1, 820($sp) +lw $t1, 820($sp) +sw $t1, 772($sp) b label_103 label_102: la $t0, s_42 -sw $t0, 908($sp) +sw $t0, 840($sp) li $a0, 20 li $v0, 9 syscall @@ -10520,77 +9540,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 912($sp) +sw $t0, 844($sp) move $t0, $sp -lw $t1, 908($t0) +lw $t1, 840($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 912($t0) +lw $t1, 844($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 916($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 920($sp) +sw $a1, 848($sp) move $t0, $sp -lw $t1, 912($t0) +lw $t1, 844($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 920($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 904($sp) -lw $t0, 1236($sp) +sw $a1, 836($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 932($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 932($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 924($sp) +sw $a1, 852($sp) la $t0, s_58 -sw $t0, 940($sp) +sw $t0, 864($sp) li $a0, 20 li $v0, 9 syscall @@ -10604,52 +9596,38 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 944($sp) +sw $t0, 868($sp) move $t0, $sp -lw $t1, 940($t0) +lw $t1, 864($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 944($t0) +lw $t1, 868($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 948($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 952($sp) +sw $a1, 872($sp) move $t0, $sp -lw $t1, 944($t0) +lw $t1, 868($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 952($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 936($sp) -lw $t1, 936($sp) -sw $t1, 828($sp) +sw $a1, 860($sp) +lw $t1, 860($sp) +sw $t1, 772($sp) label_103: -lw $t1, 828($sp) -sw $t1, 380($sp) +lw $t1, 772($sp) +sw $t1, 352($sp) label_101: -lw $t1, 380($sp) -sw $t1, 340($sp) +lw $t1, 352($sp) +sw $t1, 312($sp) b label_104 label_93: li $a0, 20 @@ -10665,27 +9643,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, C_methods sw $t1, 12($t0) -sw $t0, 960($sp) +sw $t0, 880($sp) move $t0, $sp -lw $t1, 960($t0) +lw $t1, 880($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal C_init -sw $a1, 964($sp) -lw $t0, 1236($sp) +sw $a1, 884($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 968($sp) +sw $a1, 888($sp) li $a0, 20 li $v0, 9 syscall @@ -10699,29 +9677,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, C_methods sw $t1, 12($t0) -sw $t0, 976($sp) +sw $t0, 896($sp) move $t0, $sp -lw $t1, 968($t0) +lw $t1, 888($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 960($t0) +lw $t1, 880($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 976($t0) +lw $t1, 896($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 956($sp) -lw $t0, 1236($sp) -lw $t1, 956($sp) +sw $a1, 876($sp) +lw $t0, 1140($sp) +lw $t1, 876($sp) sw $t1, 20($t0) -lw $t1, 956($sp) -sw $t1, 340($sp) +lw $t1, 876($sp) +sw $t1, 312($sp) label_104: -lw $t1, 340($sp) -sw $t1, 300($sp) +lw $t1, 312($sp) +sw $t1, 272($sp) b label_105 label_92: li $a0, 20 @@ -10737,27 +9715,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, C_methods sw $t1, 12($t0) -sw $t0, 988($sp) +sw $t0, 908($sp) move $t0, $sp -lw $t1, 988($t0) +lw $t1, 908($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal C_init -sw $a1, 992($sp) -lw $t0, 1236($sp) +sw $a1, 912($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 996($sp) +sw $a1, 916($sp) li $a0, 20 li $v0, 9 syscall @@ -10771,29 +9749,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, B_methods sw $t1, 12($t0) -sw $t0, 1004($sp) +sw $t0, 924($sp) move $t0, $sp -lw $t1, 996($t0) +lw $t1, 916($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 988($t0) +lw $t1, 908($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1004($t0) +lw $t1, 924($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 984($sp) -lw $t0, 1236($sp) -lw $t1, 984($sp) +sw $a1, 904($sp) +lw $t0, 1140($sp) +lw $t1, 904($sp) sw $t1, 20($t0) -lw $t1, 984($sp) -sw $t1, 300($sp) +lw $t1, 904($sp) +sw $t1, 272($sp) label_105: -lw $t1, 300($sp) -sw $t1, 260($sp) +lw $t1, 272($sp) +sw $t1, 232($sp) b label_106 label_91: li $a0, 20 @@ -10809,27 +9787,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, C_methods sw $t1, 12($t0) -sw $t0, 1016($sp) +sw $t0, 936($sp) move $t0, $sp -lw $t1, 1016($t0) +lw $t1, 936($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal C_init -sw $a1, 1020($sp) -lw $t0, 1236($sp) +sw $a1, 940($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1024($sp) +sw $a1, 944($sp) li $a0, 20 li $v0, 9 syscall @@ -10843,29 +9821,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 1032($sp) +sw $t0, 952($sp) move $t0, $sp -lw $t1, 1024($t0) +lw $t1, 944($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1016($t0) +lw $t1, 936($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1032($t0) +lw $t1, 952($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 1012($sp) -lw $t0, 1236($sp) -lw $t1, 1012($sp) +sw $a1, 932($sp) +lw $t0, 1140($sp) +lw $t1, 932($sp) sw $t1, 20($t0) -lw $t1, 1012($sp) -sw $t1, 260($sp) +lw $t1, 932($sp) +sw $t1, 232($sp) label_106: -lw $t1, 260($sp) -sw $t1, 220($sp) +lw $t1, 232($sp) +sw $t1, 192($sp) b label_107 label_90: li $a0, 20 @@ -10881,54 +9859,40 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 1044($sp) +sw $t0, 964($sp) move $t0, $sp -lw $t1, 1044($t0) +lw $t1, 964($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 1048($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 1056($sp) +sw $a1, 968($sp) move $t0, $sp -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1056($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 1052($sp) +sw $a1, 972($sp) move $t0, $sp -lw $t1, 1052($t0) +lw $t1, 972($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1044($t0) +lw $t1, 964($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1044($t0) +lw $t1, 964($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 1040($sp) -lw $t0, 1236($sp) -lw $t1, 1040($sp) +sw $a1, 960($sp) +lw $t0, 1140($sp) +lw $t1, 960($sp) sw $t1, 24($t0) li $a0, 20 li $v0, 9 @@ -10943,79 +9907,79 @@ li $t1, 5 sw $t1, 8($t0) la $t1, D_methods sw $t1, 12($t0) -sw $t0, 1068($sp) +sw $t0, 984($sp) move $t0, $sp -lw $t1, 1068($t0) +lw $t1, 984($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal D_init -sw $a1, 1072($sp) -lw $t0, 1236($sp) +sw $a1, 988($sp) +lw $t0, 1140($sp) lw $t1, 24($t0) -sw $t1, 1220($sp) +sw $t1, 1124($sp) move $t0, $sp -lw $t1, 1220($t0) +lw $t1, 1124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1220($t0) +lw $t1, 1124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1076($sp) -lw $t0, 1236($sp) +sw $a1, 992($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1084($sp) +sw $a1, 1000($sp) move $t0, $sp -lw $t1, 1076($t0) +lw $t1, 992($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1084($t0) +lw $t1, 1000($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1068($t0) +lw $t1, 984($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1068($t0) +lw $t1, 984($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 1064($sp) -lw $t0, 1236($sp) -lw $t1, 1064($sp) +sw $a1, 980($sp) +lw $t0, 1140($sp) +lw $t1, 980($sp) sw $t1, 20($t0) -lw $t1, 1064($sp) -sw $t1, 220($sp) +lw $t1, 980($sp) +sw $t1, 192($sp) label_107: -lw $t1, 220($sp) -sw $t1, 180($sp) +lw $t1, 192($sp) +sw $t1, 152($sp) b label_108 label_89: -lw $t0, 1236($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) -lw $t0, 1228($sp) +sw $t1, 1132($sp) +lw $t0, 1132($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_110 b case_void_error label_110: -blt $t1 7 label_111 -bgt $t1 7 label_111 +blt $t1 8 label_111 +bgt $t1 8 label_111 lw $t1, 1132($sp) sw $t1, 1020($sp) move $t0, $sp @@ -11050,8 +10014,8 @@ lw $t1, 1024($sp) sw $t1, 1012($sp) b label_109 label_111: -blt $t1 5 label_112 -bgt $t1 5 label_112 +blt $t1 6 label_112 +bgt $t1 10 label_112 lw $t1, 1132($sp) sw $t1, 1036($sp) move $t0, $sp @@ -11087,7 +10051,7 @@ sw $t1, 1012($sp) b label_109 label_112: blt $t1 0 label_113 -bgt $t1 11 label_113 +bgt $t1 10 label_113 lw $t1, 1132($sp) sw $t1, 1052($sp) la $t0, s_40 @@ -11097,7 +10061,7 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 2 +li $t1, 1 sw $t1, 0($t0) la $t1, String_name sw $t1, 4($t0) @@ -11119,29 +10083,10 @@ move $t0, $sp lw $t1, 1064($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1104($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 1108($sp) -lw $t0, 1236($sp) -lw $t1, 1108($sp) -sw $t1, 20($t0) -lw $t1, 1108($sp) -sw $t1, 1096($sp) -b label_109 -label_111: -blt $t1 6 label_112 -bgt $t1 10 label_112 -lw $t1, 1228($sp) -sw $t1, 1120($sp) -move $t0, $sp -lw $t1, 1120($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1120($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -11149,17 +10094,14 @@ lw $t3, 12($t2) jal $t3 sw $a1, 1056($sp) move $t0, $sp -lw $t1, 1128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1120($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1120($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) -lw $t3, 28($t2) +lw $t3, 0($t2) jal $t3 sw $a1, 1072($sp) li $a0, 20 @@ -11167,19 +10109,19 @@ li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 1 +li $t1, 2 sw $t1, 0($t0) -la $t1, String_name +la $t1, Int_name sw $t1, 4($t0) li $t1, 5 sw $t1, 8($t0) -la $t1, String_methods +la $t1, Int_methods sw $t1, 12($t0) sw $t0, 1076($sp) li $t0, 0 sw $t0, 1080($sp) move $t0, $sp -lw $t1, 1172($t0) +lw $t1, 1080($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 1076($t0) @@ -11193,11 +10135,11 @@ b label_109 label_113: b case_no_match_error label_109: -lw $t1, 1096($sp) -sw $t1, 180($sp) +lw $t1, 1012($sp) +sw $t1, 152($sp) label_108: -lw $t1, 180($sp) -sw $t1, 140($sp) +lw $t1, 152($sp) +sw $t1, 112($sp) b label_114 label_88: li $a0, 20 @@ -11213,54 +10155,40 @@ li $t1, 5 sw $t1, 8($t0) la $t1, A_methods sw $t1, 12($t0) -sw $t0, 1184($sp) +sw $t0, 1092($sp) move $t0, $sp -lw $t1, 1184($t0) +lw $t1, 1092($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal A_init -sw $a1, 1188($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 1196($sp) +sw $a1, 1096($sp) move $t0, $sp -lw $t1, 1236($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1196($t0) +lw $t1, 1140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 1192($sp) +sw $a1, 1100($sp) move $t0, $sp -lw $t1, 1192($t0) +lw $t1, 1100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1184($t0) +lw $t1, 1092($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1184($t0) +lw $t1, 1092($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 1180($sp) -lw $t0, 1236($sp) -lw $t1, 1180($sp) +sw $a1, 1088($sp) +lw $t0, 1140($sp) +lw $t1, 1088($sp) sw $t1, 24($t0) li $a0, 20 li $v0, 9 @@ -11275,67 +10203,67 @@ li $t1, 5 sw $t1, 8($t0) la $t1, B_methods sw $t1, 12($t0) -sw $t0, 1208($sp) +sw $t0, 1112($sp) move $t0, $sp -lw $t1, 1208($t0) +lw $t1, 1112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal B_init -sw $a1, 1212($sp) -lw $t0, 1236($sp) +sw $a1, 1116($sp) +lw $t0, 1140($sp) lw $t1, 24($t0) -sw $t1, 1220($sp) +sw $t1, 1124($sp) move $t0, $sp -lw $t1, 1220($t0) +lw $t1, 1124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1220($t0) +lw $t1, 1124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1216($sp) -lw $t0, 1236($sp) +sw $a1, 1120($sp) +lw $t0, 1140($sp) lw $t1, 20($t0) -sw $t1, 1228($sp) +sw $t1, 1132($sp) move $t0, $sp -lw $t1, 1228($t0) +lw $t1, 1132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1228($t0) +lw $t1, 1132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 1224($sp) +sw $a1, 1128($sp) move $t0, $sp -lw $t1, 1216($t0) +lw $t1, 1120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1224($t0) +lw $t1, 1128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1208($t0) +lw $t1, 1112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1208($t0) +lw $t1, 1112($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 1204($sp) -lw $t0, 1236($sp) -lw $t1, 1204($sp) +sw $a1, 1108($sp) +lw $t0, 1140($sp) +lw $t1, 1108($sp) sw $t1, 20($t0) -lw $t1, 1204($sp) -sw $t1, 140($sp) +lw $t1, 1108($sp) +sw $t1, 112($sp) label_114: b label_83 label_85: lw $a1, 16($sp) lw $ra, 0($sp) -addi $sp, $sp, 1240 +addi $sp, $sp, 1144 jr $ra \ No newline at end of file diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index fa631b78..eb25a833 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -639,7 +639,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra A2I.c2i: -addi $sp, $sp, -500 +addi $sp, $sp, -496 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -671,7 +671,7 @@ move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -731,7 +731,7 @@ move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -791,7 +791,7 @@ move $t0, $sp lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -851,7 +851,7 @@ move $t0, $sp lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -911,7 +911,7 @@ move $t0, $sp lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -971,7 +971,7 @@ move $t0, $sp lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1031,7 +1031,7 @@ move $t0, $sp lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1091,7 +1091,7 @@ move $t0, $sp lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1151,7 +1151,7 @@ move $t0, $sp lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1211,7 +1211,7 @@ move $t0, $sp lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -1242,25 +1242,11 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_10 -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 368($sp) move $t0, $sp -lw $t1, 504($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 500($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1280,19 +1266,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 372($sp) +sw $t0, 368($sp) li $t0, 0 -sw $t0, 376($sp) +sw $t0, 372($sp) move $t0, $sp -lw $t1, 376($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 372($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 380($sp) -lw $t1, 372($sp) +sw $a1, 376($sp) +lw $t1, 368($sp) sw $t1, 328($sp) b label_11 label_10: @@ -1309,19 +1295,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 384($sp) +sw $t0, 380($sp) li $t0, 9 -sw $t0, 388($sp) +sw $t0, 384($sp) move $t0, $sp -lw $t1, 388($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 392($sp) -lw $t1, 384($sp) +sw $a1, 388($sp) +lw $t1, 380($sp) sw $t1, 328($sp) label_11: lw $t1, 328($sp) @@ -1341,19 +1327,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 396($sp) +sw $t0, 392($sp) li $t0, 8 -sw $t0, 400($sp) +sw $t0, 396($sp) move $t0, $sp -lw $t1, 400($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 396($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 404($sp) -lw $t1, 396($sp) +sw $a1, 400($sp) +lw $t1, 392($sp) sw $t1, 292($sp) label_12: lw $t1, 292($sp) @@ -1373,19 +1359,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 408($sp) +sw $t0, 404($sp) li $t0, 7 -sw $t0, 412($sp) +sw $t0, 408($sp) move $t0, $sp -lw $t1, 412($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 416($sp) -lw $t1, 408($sp) +sw $a1, 412($sp) +lw $t1, 404($sp) sw $t1, 256($sp) label_13: lw $t1, 256($sp) @@ -1405,19 +1391,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 420($sp) +sw $t0, 416($sp) li $t0, 6 -sw $t0, 424($sp) +sw $t0, 420($sp) move $t0, $sp -lw $t1, 424($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 420($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 428($sp) -lw $t1, 420($sp) +sw $a1, 424($sp) +lw $t1, 416($sp) sw $t1, 220($sp) label_14: lw $t1, 220($sp) @@ -1437,19 +1423,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 432($sp) +sw $t0, 428($sp) li $t0, 5 -sw $t0, 436($sp) +sw $t0, 432($sp) move $t0, $sp -lw $t1, 436($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 432($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 440($sp) -lw $t1, 432($sp) +sw $a1, 436($sp) +lw $t1, 428($sp) sw $t1, 184($sp) label_15: lw $t1, 184($sp) @@ -1469,19 +1455,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 444($sp) +sw $t0, 440($sp) li $t0, 4 -sw $t0, 448($sp) +sw $t0, 444($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 444($t0) +lw $t1, 440($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 452($sp) -lw $t1, 444($sp) +sw $a1, 448($sp) +lw $t1, 440($sp) sw $t1, 148($sp) label_16: lw $t1, 148($sp) @@ -1501,19 +1487,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 456($sp) +sw $t0, 452($sp) li $t0, 3 -sw $t0, 460($sp) +sw $t0, 456($sp) move $t0, $sp -lw $t1, 460($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 464($sp) -lw $t1, 456($sp) +sw $a1, 460($sp) +lw $t1, 452($sp) sw $t1, 112($sp) label_17: lw $t1, 112($sp) @@ -1533,19 +1519,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 468($sp) +sw $t0, 464($sp) li $t0, 2 -sw $t0, 472($sp) +sw $t0, 468($sp) move $t0, $sp -lw $t1, 472($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 476($sp) -lw $t1, 468($sp) +sw $a1, 472($sp) +lw $t1, 464($sp) sw $t1, 76($sp) label_18: lw $t1, 76($sp) @@ -1565,19 +1551,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 480($sp) +sw $t0, 476($sp) li $t0, 1 -sw $t0, 484($sp) +sw $t0, 480($sp) move $t0, $sp -lw $t1, 484($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 480($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 488($sp) -lw $t1, 480($sp) +sw $a1, 484($sp) +lw $t1, 476($sp) sw $t1, 40($sp) label_19: lw $t1, 40($sp) @@ -1597,27 +1583,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 492($sp) +sw $t0, 488($sp) li $t0, 0 -sw $t0, 496($sp) +sw $t0, 492($sp) move $t0, $sp -lw $t1, 496($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 500($sp) -lw $t1, 492($sp) +sw $a1, 496($sp) +lw $t1, 488($sp) sw $t1, 4($sp) label_20: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 512 +addi $sp, $sp, 508 jr $ra A2I.i2c: -addi $sp, $sp, -500 +addi $sp, $sp, -496 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -1645,7 +1631,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -1706,7 +1692,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 68($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $t0, 60($sp) @@ -1767,7 +1753,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 104($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 88($sp) lw $t0, 96($sp) @@ -1828,7 +1814,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 124($sp) lw $t0, 132($sp) @@ -1889,7 +1875,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 176($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 160($sp) lw $t0, 168($sp) @@ -1950,7 +1936,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 212($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 196($sp) lw $t0, 204($sp) @@ -2011,7 +1997,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 248($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 232($sp) lw $t0, 240($sp) @@ -2072,7 +2058,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 284($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 268($sp) lw $t0, 276($sp) @@ -2133,7 +2119,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 320($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 304($sp) lw $t0, 312($sp) @@ -2194,7 +2180,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 356($sp) -lw $t0, 508($sp) +lw $t0, 504($sp) lw $t1, 16($t0) sw $t1, 340($sp) lw $t0, 348($sp) @@ -2230,25 +2216,11 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_30 -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 368($sp) move $t0, $sp -lw $t1, 504($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 500($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2256,7 +2228,7 @@ lw $t3, 0($t2) jal $t3 sw $a1, 364($sp) la $t0, empty_str -sw $t0, 372($sp) +sw $t0, 368($sp) li $a0, 20 li $v0, 9 syscall @@ -2270,22 +2242,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 376($sp) +sw $t0, 372($sp) move $t0, $sp -lw $t1, 372($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 376($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 380($sp) -lw $t1, 376($sp) +sw $a1, 376($sp) +lw $t1, 372($sp) sw $t1, 328($sp) b label_31 label_30: la $t0, s_12 -sw $t0, 384($sp) +sw $t0, 380($sp) li $a0, 20 li $v0, 9 syscall @@ -2299,17 +2271,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 388($sp) +sw $t0, 384($sp) move $t0, $sp -lw $t1, 384($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 388($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 392($sp) -lw $t1, 388($sp) +sw $a1, 388($sp) +lw $t1, 384($sp) sw $t1, 328($sp) label_31: lw $t1, 328($sp) @@ -2317,7 +2289,7 @@ sw $t1, 292($sp) b label_32 label_29: la $t0, s_11 -sw $t0, 396($sp) +sw $t0, 392($sp) li $a0, 20 li $v0, 9 syscall @@ -2331,17 +2303,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 400($sp) +sw $t0, 396($sp) move $t0, $sp -lw $t1, 396($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 400($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 404($sp) -lw $t1, 400($sp) +sw $a1, 400($sp) +lw $t1, 396($sp) sw $t1, 292($sp) label_32: lw $t1, 292($sp) @@ -2349,7 +2321,7 @@ sw $t1, 256($sp) b label_33 label_28: la $t0, s_10 -sw $t0, 408($sp) +sw $t0, 404($sp) li $a0, 20 li $v0, 9 syscall @@ -2363,17 +2335,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 412($sp) +sw $t0, 408($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 412($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 416($sp) -lw $t1, 412($sp) +sw $a1, 412($sp) +lw $t1, 408($sp) sw $t1, 256($sp) label_33: lw $t1, 256($sp) @@ -2381,7 +2353,7 @@ sw $t1, 220($sp) b label_34 label_27: la $t0, s_9 -sw $t0, 420($sp) +sw $t0, 416($sp) li $a0, 20 li $v0, 9 syscall @@ -2395,17 +2367,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 424($sp) +sw $t0, 420($sp) move $t0, $sp -lw $t1, 420($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 424($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 428($sp) -lw $t1, 424($sp) +sw $a1, 424($sp) +lw $t1, 420($sp) sw $t1, 220($sp) label_34: lw $t1, 220($sp) @@ -2413,7 +2385,7 @@ sw $t1, 184($sp) b label_35 label_26: la $t0, s_8 -sw $t0, 432($sp) +sw $t0, 428($sp) li $a0, 20 li $v0, 9 syscall @@ -2427,17 +2399,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 436($sp) +sw $t0, 432($sp) move $t0, $sp -lw $t1, 432($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 436($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 440($sp) -lw $t1, 436($sp) +sw $a1, 436($sp) +lw $t1, 432($sp) sw $t1, 184($sp) label_35: lw $t1, 184($sp) @@ -2445,7 +2417,7 @@ sw $t1, 148($sp) b label_36 label_25: la $t0, s_7 -sw $t0, 444($sp) +sw $t0, 440($sp) li $a0, 20 li $v0, 9 syscall @@ -2459,17 +2431,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 448($sp) +sw $t0, 444($sp) move $t0, $sp -lw $t1, 444($t0) +lw $t1, 440($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 448($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 452($sp) -lw $t1, 448($sp) +sw $a1, 448($sp) +lw $t1, 444($sp) sw $t1, 148($sp) label_36: lw $t1, 148($sp) @@ -2477,7 +2449,7 @@ sw $t1, 112($sp) b label_37 label_24: la $t0, s_6 -sw $t0, 456($sp) +sw $t0, 452($sp) li $a0, 20 li $v0, 9 syscall @@ -2491,17 +2463,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 460($sp) +sw $t0, 456($sp) move $t0, $sp -lw $t1, 456($t0) +lw $t1, 452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 460($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 464($sp) -lw $t1, 460($sp) +sw $a1, 460($sp) +lw $t1, 456($sp) sw $t1, 112($sp) label_37: lw $t1, 112($sp) @@ -2509,7 +2481,7 @@ sw $t1, 76($sp) b label_38 label_23: la $t0, s_5 -sw $t0, 468($sp) +sw $t0, 464($sp) li $a0, 20 li $v0, 9 syscall @@ -2523,17 +2495,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 472($sp) +sw $t0, 468($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 472($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 476($sp) -lw $t1, 472($sp) +sw $a1, 472($sp) +lw $t1, 468($sp) sw $t1, 76($sp) label_38: lw $t1, 76($sp) @@ -2541,7 +2513,7 @@ sw $t1, 40($sp) b label_39 label_22: la $t0, s_4 -sw $t0, 480($sp) +sw $t0, 476($sp) li $a0, 20 li $v0, 9 syscall @@ -2555,17 +2527,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 484($sp) +sw $t0, 480($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 484($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 488($sp) -lw $t1, 484($sp) +sw $a1, 484($sp) +lw $t1, 480($sp) sw $t1, 40($sp) label_39: lw $t1, 40($sp) @@ -2573,7 +2545,7 @@ sw $t1, 4($sp) b label_40 label_21: la $t0, s_3 -sw $t0, 492($sp) +sw $t0, 488($sp) li $a0, 20 li $v0, 9 syscall @@ -2587,32 +2559,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 496($sp) +sw $t0, 492($sp) move $t0, $sp -lw $t1, 492($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 496($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 500($sp) -lw $t1, 496($sp) +sw $a1, 496($sp) +lw $t1, 492($sp) sw $t1, 4($sp) label_40: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 512 +addi $sp, $sp, 508 jr $ra A2I.a2i: -addi $sp, $sp, -324 +addi $sp, $sp, -312 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2737,10 +2709,10 @@ sw $t1, 0($sp) lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2864,10 +2836,10 @@ sw $t1, 0($sp) lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2934,28 +2906,14 @@ sw $a1, 168($sp) lw $t0, 112($sp) lw $a0, 16($t0) bnez $a0, label_43 -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 176($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2967,16 +2925,16 @@ sw $t1, 108($sp) b label_44 label_43: move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 204($sp) +sw $a1, 200($sp) li $a0, 20 li $v0, 9 syscall @@ -2990,28 +2948,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 208($sp) +sw $t0, 204($sp) li $t0, 1 -sw $t0, 212($sp) +sw $t0, 208($sp) move $t0, $sp -lw $t1, 212($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 216($sp) +sw $a1, 212($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 192($sp) lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 196($sp) -lw $t0, 208($sp) -lw $t1, 16($t0) -sw $t1, 200($sp) -lw $a0, 196($sp) -lw $t1, 200($sp) +lw $a0, 192($sp) +lw $t1, 196($sp) sub $a0, $a0, $t1 -sw $a0, 192($sp) +sw $a0, 188($sp) li $a0, 20 li $v0, 9 syscall @@ -3025,16 +2983,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 188($sp) +sw $t0, 184($sp) move $t0, $sp -lw $t1, 192($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 220($sp) +sw $a1, 216($sp) li $a0, 20 li $v0, 9 syscall @@ -3048,64 +3006,50 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 224($sp) +sw $t0, 220($sp) li $t0, 1 -sw $t0, 228($sp) +sw $t0, 224($sp) move $t0, $sp -lw $t1, 228($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 224($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 232($sp) +sw $a1, 228($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 224($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 184($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 236($sp) +sw $a1, 180($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 180($sp) -lw $t1, 180($sp) +sw $a1, 176($sp) +lw $t1, 176($sp) sw $t1, 108($sp) label_44: lw $t1, 108($sp) @@ -3113,16 +3057,16 @@ sw $t1, 44($sp) b label_45 label_42: move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 276($sp) +sw $a1, 268($sp) li $a0, 20 li $v0, 9 syscall @@ -3136,28 +3080,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 280($sp) +sw $t0, 272($sp) li $t0, 1 -sw $t0, 284($sp) +sw $t0, 276($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 280($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 288($sp) -lw $t0, 276($sp) +sw $a1, 280($sp) +lw $t0, 268($sp) lw $t1, 16($t0) -sw $t1, 268($sp) -lw $t0, 280($sp) +sw $t1, 260($sp) +lw $t0, 272($sp) lw $t1, 16($t0) -sw $t1, 272($sp) -lw $a0, 268($sp) -lw $t1, 272($sp) +sw $t1, 264($sp) +lw $a0, 260($sp) +lw $t1, 264($sp) sub $a0, $a0, $t1 -sw $a0, 264($sp) +sw $a0, 256($sp) li $a0, 20 li $v0, 9 syscall @@ -3171,16 +3115,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 260($sp) +sw $t0, 252($sp) move $t0, $sp -lw $t1, 264($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 292($sp) +sw $a1, 284($sp) li $a0, 20 li $v0, 9 syscall @@ -3194,69 +3138,55 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 296($sp) +sw $t0, 288($sp) li $t0, 1 -sw $t0, 300($sp) +sw $t0, 292($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 292($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 304($sp) +sw $a1, 296($sp) move $t0, $sp -lw $t1, 260($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 256($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 308($sp) +sw $a1, 248($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 308($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 252($sp) -lw $t0, 252($sp) +sw $a1, 244($sp) +lw $t0, 244($sp) lw $t1, 16($t0) -sw $t1, 248($sp) -lw $t1, 248($sp) +sw $t1, 240($sp) +lw $t1, 240($sp) neg $a0, $t1 -sw $a0, 244($sp) +sw $a0, 236($sp) li $a0, 20 li $v0, 9 syscall @@ -3270,17 +3200,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 232($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 312($sp) -lw $t1, 240($sp) +sw $a1, 300($sp) +lw $t1, 232($sp) sw $t1, 44($sp) label_45: lw $t1, 44($sp) @@ -3300,27 +3230,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 316($sp) +sw $t0, 304($sp) li $t0, 0 -sw $t0, 320($sp) +sw $t0, 308($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 324($sp) -lw $t1, 316($sp) +sw $a1, 312($sp) +lw $t1, 304($sp) sw $t1, 4($sp) label_46: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 336 +addi $sp, $sp, 324 jr $ra A2I.a2i_aux: -addi $sp, $sp, -192 +addi $sp, $sp, -188 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -3351,10 +3281,10 @@ sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) move $t0, $sp -lw $t1, 200($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 196($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3519,38 +3449,24 @@ sw $t1, 0($sp) lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 196($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 120($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 136($sp) move $t0, $sp lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 192($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3589,7 +3505,7 @@ lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 140($sp) +sw $a1, 136($sp) lw $t1, 68($sp) sw $t1, 16($sp) li $a0, 20 @@ -3605,28 +3521,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 164($sp) +sw $t0, 160($sp) li $t0, 1 -sw $t0, 168($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 172($sp) +sw $a1, 168($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 156($sp) -lw $t0, 164($sp) +sw $t1, 152($sp) +lw $t0, 160($sp) lw $t1, 16($t0) -sw $t1, 160($sp) -lw $a0, 156($sp) -lw $t1, 160($sp) +sw $t1, 156($sp) +lw $a0, 152($sp) +lw $t1, 156($sp) add $a0, $a0, $t1 -sw $a0, 152($sp) +sw $a0, 148($sp) li $a0, 20 li $v0, 9 syscall @@ -3640,32 +3556,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 176($sp) -lw $t1, 148($sp) +sw $a1, 172($sp) +lw $t1, 144($sp) sw $t1, 40($sp) b label_47 label_49: lw $t1, 44($sp) +sw $t1, 180($sp) +lw $t1, 180($sp) sw $t1, 184($sp) -lw $t1, 184($sp) -sw $t1, 188($sp) lw $t1, 16($sp) -sw $t1, 192($sp) -lw $a1, 192($sp) +sw $t1, 188($sp) +lw $a1, 188($sp) lw $ra, 0($sp) -addi $sp, $sp, 204 +addi $sp, $sp, 200 jr $ra A2I.i2a: -addi $sp, $sp, -164 +addi $sp, $sp, -156 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -3693,7 +3609,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 172($sp) +lw $t0, 164($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -3757,7 +3673,7 @@ sw $a1, 68($sp) lw $t0, 60($sp) lw $t1, 16($t0) sw $t1, 52($sp) -lw $t0, 172($sp) +lw $t0, 164($sp) lw $t1, 16($t0) sw $t1, 56($sp) lw $a0, 52($sp) @@ -3869,7 +3785,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 136($sp) -lw $t0, 172($sp) +lw $t0, 164($sp) lw $t1, 16($t0) sw $t1, 104($sp) lw $t0, 112($sp) @@ -3902,28 +3818,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 144($sp) move $t0, $sp lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 160($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3948,35 +3850,21 @@ lw $t1, 76($sp) sw $t1, 40($sp) b label_52 label_51: -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 152($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 160($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 148($sp) -lw $t1, 148($sp) +sw $a1, 144($sp) +lw $t1, 144($sp) sw $t1, 40($sp) label_52: lw $t1, 40($sp) @@ -3984,7 +3872,7 @@ sw $t1, 4($sp) b label_53 label_50: la $t0, s_3 -sw $t0, 156($sp) +sw $t0, 148($sp) li $a0, 20 li $v0, 9 syscall @@ -3998,25 +3886,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 160($sp) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 164($sp) -lw $t1, 160($sp) +sw $a1, 156($sp) +lw $t1, 152($sp) sw $t1, 4($sp) label_53: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 176 +addi $sp, $sp, 168 jr $ra A2I.i2a_aux: -addi $sp, $sp, -160 +addi $sp, $sp, -152 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -4044,7 +3932,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 168($sp) +lw $t0, 160($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -4105,7 +3993,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 64($sp) -lw $t0, 168($sp) +lw $t0, 160($sp) lw $t1, 16($t0) sw $t1, 48($sp) lw $t0, 56($sp) @@ -4141,28 +4029,14 @@ jal Int_init sw $a1, 68($sp) lw $t1, 40($sp) sw $t1, 72($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 84($sp) move $t0, $sp lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4182,28 +4056,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t0, 120($sp) li $t0, 10 -sw $t0, 128($sp) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 132($sp) +sw $a1, 128($sp) lw $t0, 72($sp) lw $t1, 16($t0) -sw $t1, 116($sp) -lw $t0, 124($sp) +sw $t1, 112($sp) +lw $t0, 120($sp) lw $t1, 16($t0) -sw $t1, 120($sp) -lw $a0, 116($sp) -lw $t1, 120($sp) +sw $t1, 116($sp) +lw $a0, 112($sp) +lw $t1, 116($sp) mul $a0, $a0, $t1 -sw $a0, 112($sp) +sw $a0, 108($sp) li $a0, 20 li $v0, 9 syscall @@ -4217,26 +4091,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 108($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 136($sp) -lw $t0, 168($sp) +sw $a1, 132($sp) +lw $t0, 160($sp) lw $t1, 16($t0) -sw $t1, 100($sp) -lw $t0, 108($sp) +sw $t1, 96($sp) +lw $t0, 104($sp) lw $t1, 16($t0) -sw $t1, 104($sp) -lw $a0, 100($sp) -lw $t1, 104($sp) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) sub $a0, $a0, $t1 -sw $a0, 96($sp) +sw $a0, 92($sp) li $a0, 20 li $v0, 9 syscall @@ -4250,46 +4124,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 92($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 140($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 144($sp) +sw $a1, 136($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 88($sp) +sw $a1, 84($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 80($t0) @@ -4303,13 +4163,13 @@ lw $t3, 16($t2) jal $t3 sw $a1, 76($sp) lw $t1, 76($sp) -sw $t1, 148($sp) -lw $t1, 148($sp) +sw $t1, 140($sp) +lw $t1, 140($sp) sw $t1, 4($sp) b label_55 label_54: la $t0, empty_str -sw $t0, 152($sp) +sw $t0, 144($sp) li $a0, 20 li $v0, 9 syscall @@ -4323,22 +4183,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 156($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 160($sp) -lw $t1, 156($sp) +sw $a1, 152($sp) +lw $t1, 148($sp) sw $t1, 4($sp) label_55: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 172 +addi $sp, $sp, 164 jr $ra Main_init: addi $sp, $sp, -4 @@ -4355,7 +4215,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -116 +addi $sp, $sp, -100 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -4480,28 +4340,14 @@ jal $t3 sw $a1, 32($sp) lw $t1, 32($sp) sw $t1, 56($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 64($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4509,7 +4355,7 @@ lw $t3, 16($t2) jal $t3 sw $a1, 60($sp) la $t0, s_16 -sw $t0, 72($sp) +sw $t0, 68($sp) li $a0, 20 li $v0, 9 syscall @@ -4523,74 +4369,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 76($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 80($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 84($sp) +sw $a1, 76($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 68($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 92($sp) +sw $a1, 64($sp) move $t0, $sp lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 88($sp) +sw $a1, 80($sp) la $t0, s_17 -sw $t0, 100($sp) +sw $t0, 88($sp) li $a0, 20 li $v0, 9 syscall @@ -4604,47 +4422,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 108($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 112($sp) +sw $a1, 96($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 96($sp) -lw $t1, 96($sp) -sw $t1, 116($sp) -lw $a1, 116($sp) +sw $a1, 84($sp) +lw $t1, 84($sp) +sw $t1, 100($sp) +lw $a1, 100($sp) lw $ra, 0($sp) -addi $sp, $sp, 124 +addi $sp, $sp, 108 jr $ra \ No newline at end of file diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index b5074892..5fbe8f5e 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -756,7 +756,7 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Book.print: -addi $sp, $sp, -88 +addi $sp, $sp, -80 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -784,39 +784,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 24($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Book_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Book_methods -sw $t1, 12($t0) -sw $t0, 28($sp) move $t0, $sp lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 12($sp) -lw $t0, 92($sp) +lw $t0, 84($sp) lw $t1, 16($t0) -sw $t1, 32($sp) +sw $t1, 28($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -830,7 +816,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 8($sp) la $t0, s_4 -sw $t0, 36($sp) +sw $t0, 32($sp) li $a0, 20 li $v0, 9 syscall @@ -844,18 +830,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 40($sp) +sw $t0, 36($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 44($sp) +sw $a1, 40($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -869,7 +855,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) la $t0, s_5 -sw $t0, 60($sp) +sw $t0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -883,63 +869,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 64($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 68($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Book_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Book_methods -sw $t1, 12($t0) -sw $t0, 72($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 84($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 56($sp) -lw $t0, 92($sp) +sw $a1, 52($sp) +lw $t0, 84($sp) lw $t1, 20($t0) -sw $t1, 76($sp) +sw $t1, 68($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 52($sp) +sw $a1, 48($sp) la $t0, s_4 -sw $t0, 80($sp) +sw $t0, 72($sp) li $a0, 20 li $v0, 9 syscall @@ -953,33 +925,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 88($sp) +sw $a1, 80($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 48($sp) -lw $a1, 92($sp) +sw $a1, 44($sp) +lw $a1, 84($sp) lw $ra, 0($sp) -addi $sp, $sp, 96 +addi $sp, $sp, 88 jr $ra Article_init: addi $sp, $sp, -16 @@ -1024,49 +996,35 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Article.initArticle: -addi $sp, $sp, -12 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Article_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Article_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 12($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 12($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 16($sp) -lw $t1, 28($sp) +lw $t0, 12($sp) +lw $t1, 24($sp) sw $t1, 24($t0) -lw $a1, 16($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 32 +addi $sp, $sp, 28 jr $ra Article.print: -addi $sp, $sp, -52 +addi $sp, $sp, -48 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -1084,7 +1042,7 @@ la $t1, Book_methods sw $t1, 12($t0) sw $t0, 8($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1119,39 +1077,25 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 32($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Article_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Article_methods -sw $t1, 12($t0) -sw $t0, 36($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 52($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 20($sp) -lw $t0, 56($sp) +lw $t0, 52($sp) lw $t1, 24($t0) -sw $t1, 40($sp) +sw $t1, 36($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -1165,7 +1109,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 16($sp) la $t0, s_4 -sw $t0, 44($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -1179,18 +1123,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 52($sp) +sw $a1, 48($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) @@ -1203,9 +1147,9 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 12($sp) -lw $a1, 56($sp) +lw $a1, 52($sp) lw $ra, 0($sp) -addi $sp, $sp, 60 +addi $sp, $sp, 56 jr $ra BookList_init: addi $sp, $sp, -4 @@ -1222,28 +1166,14 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra BookList.isNil: -addi $sp, $sp, -20 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, BookList_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, BookList_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1263,21 +1193,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 12($sp) +sw $t0, 8($sp) li $t0, 1 -sw $t0, 16($sp) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 20($sp) -lw $a1, 12($sp) +sw $a1, 16($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 24 jr $ra BookList.cons: addi $sp, $sp, -20 @@ -1329,28 +1259,14 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra BookList.car: -addi $sp, $sp, -16 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, BookList_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, BookList_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 16($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1370,40 +1286,26 @@ li $t1, 6 sw $t1, 8($t0) la $t1, Book_methods sw $t1, 12($t0) -sw $t0, 12($sp) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Book_init -sw $a1, 16($sp) -lw $a1, 12($sp) +sw $a1, 12($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 20 jr $ra BookList.cdr: -addi $sp, $sp, -16 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, BookList_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, BookList_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 16($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1423,37 +1325,23 @@ li $t1, 4 sw $t1, 8($t0) la $t1, BookList_methods sw $t1, 12($t0) -sw $t0, 12($sp) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal BookList_init -sw $a1, 16($sp) -lw $a1, 12($sp) +sw $a1, 12($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 20 jr $ra BookList.print_list: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, BookList_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, BookList_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1465,7 +1353,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 12 jr $ra Cons_init: addi $sp, $sp, -4 @@ -1557,10 +1445,10 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Cons.print_list: -addi $sp, $sp, -68 +addi $sp, $sp, -60 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 72($sp) +lw $t0, 64($sp) lw $t1, 16($t0) sw $t1, 12($sp) move $t0, $sp @@ -1609,28 +1497,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 32($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Cons_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Cons_methods -sw $t1, 12($t0) -sw $t0, 36($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1642,11 +1516,11 @@ sw $t1, 4($sp) b label_1 label_3: blt $t1 5 label_4 -bgt $t1 5 label_4 +bgt $t1 6 label_4 lw $t1, 8($sp) -sw $t1, 40($sp) +sw $t1, 36($sp) la $t0, s_8 -sw $t0, 48($sp) +sw $t0, 44($sp) li $a0, 20 li $v0, 9 syscall @@ -1660,67 +1534,53 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 56($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Cons_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Cons_methods -sw $t1, 12($t0) -sw $t0, 60($sp) +sw $a1, 52($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 44($sp) -lw $t1, 44($sp) +sw $a1, 40($sp) +lw $t1, 40($sp) sw $t1, 4($sp) b label_1 label_4: b case_no_match_error label_1: -lw $t0, 72($sp) +lw $t0, 64($sp) lw $t1, 20($t0) -sw $t1, 68($sp) +sw $t1, 60($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 60($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 64($sp) -lw $a1, 64($sp) +sw $a1, 56($sp) +lw $a1, 56($sp) lw $ra, 0($sp) -addi $sp, $sp, 76 +addi $sp, $sp, 68 jr $ra Nil_init: addi $sp, $sp, -4 diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index bb18192b..1db5e0b4 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -669,10 +669,10 @@ lw $ra, 0($sp) addi $sp, $sp, 16 jr $ra CellularAutomaton.print: -addi $sp, $sp, -28 +addi $sp, $sp, -24 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 32($sp) +lw $t0, 28($sp) lw $t1, 16($t0) sw $t1, 12($sp) la $t0, s_3 @@ -714,25 +714,11 @@ lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 sw $a1, 8($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 28($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 28($t0) @@ -742,9 +728,9 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) -lw $a1, 32($sp) +lw $a1, 28($sp) lw $ra, 0($sp) -addi $sp, $sp, 36 +addi $sp, $sp, 32 jr $ra CellularAutomaton.num_cells: addi $sp, $sp, -8 @@ -822,7 +808,7 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra CellularAutomaton.cell_left_neighbor: -addi $sp, $sp, -124 +addi $sp, $sp, -112 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -850,7 +836,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 132($sp) +lw $t0, 120($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -911,7 +897,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 68($sp) -lw $t0, 132($sp) +lw $t0, 120($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $t0, 60($sp) @@ -944,28 +930,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 72($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 76($sp) move $t0, $sp lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -976,31 +948,17 @@ lw $t1, 40($sp) sw $t1, 4($sp) b label_2 label_1: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 104($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 100($sp) +sw $a1, 96($sp) li $a0, 20 li $v0, 9 syscall @@ -1014,28 +972,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 108($sp) +sw $t0, 100($sp) li $t0, 1 -sw $t0, 112($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 116($sp) +sw $a1, 108($sp) +lw $t0, 96($sp) +lw $t1, 16($t0) +sw $t1, 88($sp) lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 92($sp) -lw $t0, 108($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) sub $a0, $a0, $t1 -sw $a0, 88($sp) +sw $a0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -1049,74 +1007,46 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 124($sp) +sw $a1, 112($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 80($sp) -lw $t1, 80($sp) +sw $a1, 76($sp) +lw $t1, 76($sp) sw $t1, 4($sp) label_2: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 136 +addi $sp, $sp, 124 jr $ra CellularAutomaton.cell_right_neighbor: -addi $sp, $sp, -124 +addi $sp, $sp, -112 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 44($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1136,22 +1066,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 44($sp) li $t0, 1 -sw $t0, 52($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 56($sp) +sw $a1, 52($sp) lw $t0, 40($sp) lw $t1, 16($t0) sw $t1, 32($sp) -lw $t0, 48($sp) +lw $t0, 44($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $a0, 32($sp) @@ -1180,8 +1110,8 @@ lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 60($sp) -lw $t0, 132($sp) +sw $a1, 56($sp) +lw $t0, 120($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -1213,7 +1143,7 @@ lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 64($sp) +sw $a1, 60($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_3 @@ -1230,28 +1160,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 84($sp) li $t0, 1 -sw $t0, 92($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 96($sp) -lw $t0, 132($sp) +sw $a1, 92($sp) +lw $t0, 120($sp) lw $t1, 16($t0) -sw $t1, 80($sp) -lw $t0, 88($sp) +sw $t1, 76($sp) +lw $t0, 84($sp) lw $t1, 16($t0) -sw $t1, 84($sp) -lw $a0, 80($sp) -lw $t1, 84($sp) +sw $t1, 80($sp) +lw $a0, 76($sp) +lw $t1, 80($sp) add $a0, $a0, $t1 -sw $a0, 76($sp) +sw $a0, 72($sp) li $a0, 20 li $v0, 9 syscall @@ -1265,45 +1195,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 100($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 104($sp) +sw $a1, 96($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 68($sp) -lw $t1, 68($sp) +sw $a1, 64($sp) +lw $t1, 64($sp) sw $t1, 4($sp) b label_4 label_3: @@ -1320,79 +1236,51 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 112($sp) +sw $t0, 104($sp) li $t0, 0 -sw $t0, 116($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 124($sp) +sw $a1, 112($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 108($sp) -lw $t1, 108($sp) +sw $a1, 100($sp) +lw $t1, 100($sp) sw $t1, 4($sp) label_4: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 136 +addi $sp, $sp, 124 jr $ra CellularAutomaton.cell_at_next_evolution: -addi $sp, $sp, -304 +addi $sp, $sp, -292 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 80($sp) move $t0, $sp -lw $t1, 312($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 308($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 296($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1400,7 +1288,7 @@ lw $t3, 40($t2) jal $t3 sw $a1, 76($sp) la $t0, s_4 -sw $t0, 84($sp) +sw $t0, 80($sp) li $a0, 20 li $v0, 9 syscall @@ -1414,18 +1302,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) +sw $a1, 88($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 76($t0) @@ -1455,7 +1343,7 @@ lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 96($sp) +sw $a1, 92($sp) lw $t0, 60($sp) lw $a0, 16($t0) bnez $a0, label_5 @@ -1472,19 +1360,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 96($sp) li $t0, 0 -sw $t0, 104($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 108($sp) -lw $t1, 100($sp) +sw $a1, 104($sp) +lw $t1, 96($sp) sw $t1, 56($sp) b label_6 label_5: @@ -1501,51 +1389,37 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 112($sp) +sw $t0, 108($sp) li $t0, 1 -sw $t0, 116($sp) +sw $t0, 112($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 120($sp) -lw $t1, 112($sp) +sw $a1, 116($sp) +lw $t1, 108($sp) sw $t1, 56($sp) label_6: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 148($sp) move $t0, $sp -lw $t1, 312($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 308($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 296($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 144($sp) +sw $a1, 140($sp) la $t0, s_4 -sw $t0, 152($sp) +sw $t0, 144($sp) li $a0, 20 li $v0, 9 syscall @@ -1559,25 +1433,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 156($sp) +sw $t0, 148($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 160($sp) +sw $a1, 152($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 132($sp) +sw $a1, 128($sp) li $a0, 20 li $v0, 9 syscall @@ -1591,17 +1465,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 128($sp) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 164($sp) -lw $t0, 128($sp) +sw $a1, 156($sp) +lw $t0, 124($sp) lw $a0, 16($t0) bnez $a0, label_7 li $a0, 20 @@ -1617,20 +1491,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 168($sp) +sw $t0, 160($sp) li $t0, 0 -sw $t0, 172($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 176($sp) -lw $t1, 168($sp) -sw $t1, 124($sp) +sw $a1, 168($sp) +lw $t1, 160($sp) +sw $t1, 120($sp) b label_8 label_7: li $a0, 20 @@ -1646,25 +1520,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 180($sp) +sw $t0, 172($sp) li $t0, 1 -sw $t0, 184($sp) +sw $t0, 176($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 188($sp) -lw $t1, 180($sp) -sw $t1, 124($sp) +sw $a1, 180($sp) +lw $t1, 172($sp) +sw $t1, 120($sp) label_8: lw $t0, 56($sp) lw $t1, 16($t0) sw $t1, 48($sp) -lw $t0, 124($sp) +lw $t0, 120($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $a0, 48($sp) @@ -1693,37 +1567,23 @@ lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 192($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 220($sp) +sw $a1, 184($sp) move $t0, $sp -lw $t1, 312($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 308($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 296($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 216($sp) +sw $a1, 208($sp) la $t0, s_4 -sw $t0, 224($sp) +sw $t0, 212($sp) li $a0, 20 li $v0, 9 syscall @@ -1737,25 +1597,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 228($sp) +sw $t0, 216($sp) move $t0, $sp -lw $t1, 224($t0) +lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 228($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 232($sp) +sw $a1, 220($sp) move $t0, $sp -lw $t1, 228($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 216($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 204($sp) +sw $a1, 196($sp) li $a0, 20 li $v0, 9 syscall @@ -1769,17 +1629,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 200($sp) +sw $t0, 192($sp) move $t0, $sp -lw $t1, 204($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 236($sp) -lw $t0, 200($sp) +sw $a1, 224($sp) +lw $t0, 192($sp) lw $a0, 16($t0) bnez $a0, label_9 li $a0, 20 @@ -1795,20 +1655,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 228($sp) li $t0, 0 -sw $t0, 244($sp) +sw $t0, 232($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 248($sp) -lw $t1, 240($sp) -sw $t1, 196($sp) +sw $a1, 236($sp) +lw $t1, 228($sp) +sw $t1, 188($sp) b label_10 label_9: li $a0, 20 @@ -1824,25 +1684,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 252($sp) +sw $t0, 240($sp) li $t0, 1 -sw $t0, 256($sp) +sw $t0, 244($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 252($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 260($sp) -lw $t1, 252($sp) -sw $t1, 196($sp) +sw $a1, 248($sp) +lw $t1, 240($sp) +sw $t1, 188($sp) label_10: lw $t0, 40($sp) lw $t1, 16($t0) sw $t1, 32($sp) -lw $t0, 196($sp) +lw $t0, 188($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $a0, 32($sp) @@ -1871,7 +1731,7 @@ lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 264($sp) +sw $a1, 252($sp) li $a0, 20 li $v0, 9 syscall @@ -1885,22 +1745,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 268($sp) +sw $t0, 256($sp) li $t0, 1 -sw $t0, 272($sp) +sw $t0, 260($sp) move $t0, $sp -lw $t1, 272($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 268($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 276($sp) +sw $a1, 264($sp) lw $t0, 24($sp) lw $t1, 16($t0) sw $t1, 16($sp) -lw $t0, 268($sp) +lw $t0, 256($sp) lw $t1, 16($t0) sw $t1, 20($sp) lw $a0, 16($sp) @@ -1929,12 +1789,12 @@ lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 280($sp) +sw $a1, 268($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_11 la $t0, s_5 -sw $t0, 284($sp) +sw $t0, 272($sp) li $a0, 20 li $v0, 9 syscall @@ -1948,22 +1808,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 276($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 292($sp) -lw $t1, 288($sp) +sw $a1, 280($sp) +lw $t1, 276($sp) sw $t1, 4($sp) b label_12 label_11: la $t0, s_4 -sw $t0, 296($sp) +sw $t0, 284($sp) li $a0, 20 li $v0, 9 syscall @@ -1977,25 +1837,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 300($sp) +sw $t0, 288($sp) move $t0, $sp -lw $t1, 296($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 300($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 304($sp) -lw $t1, 300($sp) +sw $a1, 292($sp) +lw $t1, 288($sp) sw $t1, 4($sp) label_12: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 316 +addi $sp, $sp, 304 jr $ra CellularAutomaton.evolve: -addi $sp, $sp, -136 +addi $sp, $sp, -128 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -2025,25 +1885,11 @@ jal Int_init sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 24($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2051,7 +1897,7 @@ lw $t3, 36($t2) jal $t3 sw $a1, 20($sp) lw $t1, 20($sp) -sw $t1, 28($sp) +sw $t1, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -2065,31 +1911,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 28($sp) la $t0, empty_str -sw $t0, 36($sp) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 40($sp) -lw $t1, 32($sp) -sw $t1, 44($sp) +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) label_13: lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 60($sp) -lw $t0, 28($sp) +sw $t1, 56($sp) +lw $t0, 24($sp) lw $t1, 16($t0) -sw $t1, 64($sp) -lw $a0, 60($sp) -lw $t1, 64($sp) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) slt $a0, $a0, $t1 -sw $a0, 56($sp) +sw $a0, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -2103,65 +1949,51 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 68($sp) -lw $t0, 52($sp) +sw $a1, 64($sp) +lw $t0, 48($sp) lw $a0, 16($t0) bnez $a0, label_14 b label_15 label_14: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 80($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 52($t2) jal $t3 -sw $a1, 76($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 72($sp) -lw $t1, 72($sp) -sw $t1, 44($sp) +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -2175,28 +2007,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 96($sp) li $t0, 1 -sw $t0, 108($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 112($sp) +sw $a1, 104($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 96($sp) -lw $t0, 104($sp) +sw $t1, 88($sp) +lw $t0, 96($sp) lw $t1, 16($t0) -sw $t1, 100($sp) -lw $a0, 96($sp) -lw $t1, 100($sp) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) add $a0, $a0, $t1 -sw $a0, 92($sp) +sw $a0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -2210,32 +2042,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 116($sp) -lw $t1, 88($sp) +sw $a1, 108($sp) +lw $t1, 80($sp) sw $t1, 16($sp) b label_13 label_15: -lw $t0, 140($sp) -lw $t1, 44($sp) +lw $t0, 132($sp) +lw $t1, 40($sp) sw $t1, 16($t0) -lw $t1, 140($sp) -sw $t1, 128($sp) -lw $t1, 128($sp) -sw $t1, 132($sp) lw $t1, 132($sp) -sw $t1, 136($sp) -lw $a1, 136($sp) +sw $t1, 120($sp) +lw $t1, 120($sp) +sw $t1, 124($sp) +lw $t1, 124($sp) +sw $t1, 128($sp) +lw $a1, 128($sp) lw $ra, 0($sp) -addi $sp, $sp, 144 +addi $sp, $sp, 136 jr $ra Main_init: addi $sp, $sp, -4 diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index a74dd64a..b906427f 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -631,7 +631,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -120 +addi $sp, $sp, -112 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -815,28 +815,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 92($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 96($sp) move $t0, $sp lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -848,7 +834,7 @@ sw $t1, 44($sp) b label_2 label_1: la $t0, s_4 -sw $t0, 104($sp) +sw $t0, 100($sp) li $a0, 20 li $v0, 9 syscall @@ -862,35 +848,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 108($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 112($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 116($sp) +sw $a1, 108($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 116($t0) @@ -899,15 +871,15 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 100($sp) -lw $t1, 100($sp) +sw $a1, 96($sp) +lw $t1, 96($sp) sw $t1, 44($sp) label_2: lw $t1, 44($sp) -sw $t1, 120($sp) -lw $a1, 120($sp) +sw $t1, 112($sp) +lw $a1, 112($sp) lw $ra, 0($sp) -addi $sp, $sp, 128 +addi $sp, $sp, 120 jr $ra Complex_init: addi $sp, $sp, -28 @@ -1060,12 +1032,12 @@ lw $ra, 0($sp) addi $sp, $sp, 64 jr $ra Complex.print: -addi $sp, $sp, -104 +addi $sp, $sp, -96 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 108($sp) +lw $t0, 100($sp) lw $t1, 20($t0) -sw $t1, 80($sp) +sw $t1, 76($sp) li $a0, 20 li $v0, 9 syscall @@ -1091,7 +1063,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 36($sp) -lw $t0, 80($sp) +lw $t0, 76($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 28($sp) @@ -1127,31 +1099,17 @@ sw $a1, 40($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_3 -lw $t0, 108($sp) +lw $t0, 100($sp) lw $t1, 16($t0) -sw $t1, 100($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Complex_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Complex_methods -sw $t1, 12($t0) -sw $t0, 64($sp) +sw $t1, 96($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 100($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1159,7 +1117,7 @@ lw $t3, 16($t2) jal $t3 sw $a1, 56($sp) la $t0, s_5 -sw $t0, 68($sp) +sw $t0, 64($sp) li $a0, 20 li $v0, 9 syscall @@ -1173,18 +1131,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 76($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 56($t0) @@ -1197,11 +1155,11 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 52($sp) -lw $t0, 108($sp) +lw $t0, 100($sp) lw $t1, 20($t0) -sw $t1, 80($sp) +sw $t1, 76($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 52($t0) @@ -1215,7 +1173,7 @@ lw $t3, 16($t2) jal $t3 sw $a1, 48($sp) la $t0, s_6 -sw $t0, 84($sp) +sw $t0, 80($sp) li $a0, 20 li $v0, 9 syscall @@ -1229,18 +1187,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) +sw $a1, 88($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 48($t0) @@ -1257,43 +1215,29 @@ lw $t1, 44($sp) sw $t1, 4($sp) b label_4 label_3: -lw $t0, 108($sp) +lw $t0, 100($sp) lw $t1, 16($t0) -sw $t1, 100($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Complex_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Complex_methods -sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t1, 96($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 100($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 96($sp) -lw $t1, 96($sp) +sw $a1, 92($sp) +lw $t1, 92($sp) sw $t1, 4($sp) label_4: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 112 +addi $sp, $sp, 104 jr $ra Complex.reflect_0: addi $sp, $sp, -88 diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index b2724385..945cc8d5 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -616,7 +616,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -64 +addi $sp, $sp, -44 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -644,117 +644,61 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 36($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 32($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 40($sp) +sw $a1, 28($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 28($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 44($sp) +sw $a1, 24($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 20($sp) la $t0, s_4 -sw $t0, 52($sp) +sw $t0, 36($sp) li $a0, 20 li $v0, 9 syscall @@ -768,47 +712,33 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 56($sp) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 60($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 64($sp) +sw $a1, 44($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 48($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 48($sp) -lw $a1, 48($sp) +sw $a1, 32($sp) +lw $a1, 32($sp) lw $ra, 0($sp) -addi $sp, $sp, 72 +addi $sp, $sp, 52 jr $ra Main.fib: addi $sp, $sp, -172 diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index 449cd1c2..c6250ab7 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -1023,57 +1023,43 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Vertice.print: -addi $sp, $sp, -20 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 24($sp) +lw $t0, 20($sp) lw $t1, 16($t0) sw $t1, 8($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Vertice_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Vertice_methods -sw $t1, 12($t0) -sw $t0, 12($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 24($sp) +lw $t0, 20($sp) lw $t1, 20($t0) -sw $t1, 20($sp) +sw $t1, 16($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 16($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 16($sp) -lw $a1, 16($sp) +sw $a1, 12($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 24 jr $ra Edge_init: addi $sp, $sp, -40 @@ -1191,7 +1177,7 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra Edge.print: -addi $sp, $sp, -96 +addi $sp, $sp, -72 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -1219,67 +1205,39 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Edge_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Edge_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 100($sp) +lw $t0, 76($sp) lw $t1, 16($t0) -sw $t1, 28($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Edge_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Edge_methods -sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t1, 24($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 20($sp) la $t0, s_4 -sw $t0, 40($sp) +sw $t0, 32($sp) li $a0, 20 li $v0, 9 syscall @@ -1293,77 +1251,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 36($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 48($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Edge_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Edge_methods -sw $t1, 12($t0) -sw $t0, 52($sp) +sw $a1, 40($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 36($sp) -lw $t0, 100($sp) +sw $a1, 28($sp) +lw $t0, 76($sp) lw $t1, 20($t0) -sw $t1, 60($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Edge_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Edge_methods -sw $t1, 12($t0) -sw $t0, 64($sp) +sw $t1, 48($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 56($sp) +sw $a1, 44($sp) la $t0, s_5 -sw $t0, 72($sp) +sw $t0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -1377,78 +1307,50 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 76($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 80($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Edge_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Edge_methods -sw $t1, 12($t0) -sw $t0, 84($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 68($sp) -lw $t0, 100($sp) +sw $a1, 52($sp) +lw $t0, 76($sp) lw $t1, 24($t0) -sw $t1, 92($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Edge_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Edge_methods -sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t1, 72($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 88($sp) -lw $a1, 88($sp) +sw $a1, 68($sp) +lw $a1, 68($sp) lw $ra, 0($sp) -addi $sp, $sp, 104 +addi $sp, $sp, 80 jr $ra EList_init: addi $sp, $sp, -4 @@ -1501,61 +1403,33 @@ lw $ra, 0($sp) addi $sp, $sp, 20 jr $ra EList.head: -addi $sp, $sp, -12 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, EList_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, EList_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 12($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 16($sp) +lw $t0, 12($sp) lw $t1, 16($t0) -sw $t1, 12($sp) -lw $a1, 12($sp) +sw $t1, 8($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 16 jr $ra EList.tail: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, EList_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, EList_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1565,9 +1439,9 @@ lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $a1, 12($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 12 jr $ra EList.cons: addi $sp, $sp, -12 @@ -1615,14 +1489,14 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra EList.append: -addi $sp, $sp, -32 +addi $sp, $sp, -24 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 28($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1632,25 +1506,11 @@ sw $a1, 8($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_1 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, EList_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, EList_methods -sw $t1, 12($t0) -sw $t0, 24($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 28($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1658,7 +1518,7 @@ lw $t3, 36($t2) jal $t3 sw $a1, 20($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -1671,33 +1531,19 @@ lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 sw $a1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, EList_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, EList_methods -sw $t1, 12($t0) -sw $t0, 32($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 28($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 28($sp) +sw $a1, 24($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) @@ -1714,15 +1560,15 @@ lw $t1, 12($sp) sw $t1, 4($sp) b label_2 label_1: -lw $t1, 40($sp) +lw $t1, 32($sp) sw $t1, 4($sp) label_2: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 44 +addi $sp, $sp, 36 jr $ra EList.print: -addi $sp, $sp, -20 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_6 @@ -1750,25 +1596,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, EList_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, EList_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -1780,7 +1612,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 24 jr $ra ECons_init: addi $sp, $sp, -4 @@ -1955,61 +1787,33 @@ lw $ra, 0($sp) addi $sp, $sp, 20 jr $ra VList.head: -addi $sp, $sp, -12 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, VList_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, VList_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 12($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 16($sp) +lw $t0, 12($sp) lw $t1, 16($t0) -sw $t1, 12($sp) -lw $a1, 12($sp) +sw $t1, 8($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 16 jr $ra VList.tail: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, VList_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, VList_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -2019,9 +1823,9 @@ lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $a1, 12($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 12 jr $ra VList.cons: addi $sp, $sp, -12 @@ -2069,7 +1873,7 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra VList.print: -addi $sp, $sp, -20 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_6 @@ -2097,25 +1901,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, VList_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, VList_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -2127,7 +1917,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 24 jr $ra VCons_init: addi $sp, $sp, -4 @@ -2317,7 +2107,7 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra Parse.read_input: -addi $sp, $sp, -164 +addi $sp, $sp, -152 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -2342,25 +2132,11 @@ jal Graph_init sw $a1, 8($sp) lw $t1, 4($sp) sw $t1, 12($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2368,13 +2144,13 @@ lw $t3, 20($t2) jal $t3 sw $a1, 16($sp) lw $t1, 16($sp) -sw $t1, 24($sp) +sw $t1, 20($sp) label_3: -lw $t0, 168($sp) +lw $t0, 156($sp) lw $t1, 16($t0) -sw $t1, 36($sp) +sw $t1, 32($sp) la $t0, empty_str -sw $t0, 68($sp) +sw $t0, 64($sp) li $a0, 20 li $v0, 9 syscall @@ -2388,25 +2164,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 76($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 56($sp) +sw $a1, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -2420,22 +2196,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 80($sp) -lw $t0, 52($sp) +sw $a1, 76($sp) +lw $t0, 48($sp) lw $t1, 16($t0) -sw $t1, 48($sp) -lw $t1, 48($sp) +sw $t1, 44($sp) +lw $t1, 44($sp) xor $a0, $t1, 1 -sw $a0, 44($sp) +sw $a0, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -2449,18 +2225,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 40($sp) +sw $t0, 36($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 84($sp) +sw $a1, 80($sp) la $t0, s_6 -sw $t0, 116($sp) +sw $t0, 112($sp) li $a0, 20 li $v0, 9 syscall @@ -2474,25 +2250,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 120($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 124($sp) +sw $a1, 120($sp) move $t0, $sp -lw $t1, 120($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 104($sp) +sw $a1, 100($sp) li $a0, 20 li $v0, 9 syscall @@ -2506,22 +2282,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 96($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 128($sp) -lw $t0, 100($sp) +sw $a1, 124($sp) +lw $t0, 96($sp) lw $t1, 16($t0) -sw $t1, 96($sp) -lw $t1, 96($sp) +sw $t1, 92($sp) +lw $t1, 92($sp) xor $a0, $t1, 1 -sw $a0, 92($sp) +sw $a0, 88($sp) li $a0, 20 li $v0, 9 syscall @@ -2535,68 +2311,54 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 132($sp) +sw $a1, 128($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 32($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 32($sp) -lw $t0, 32($sp) +sw $a1, 28($sp) +lw $t0, 28($sp) lw $a0, 16($t0) bnez $a0, label_4 b label_5 label_4: -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 144($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 140($sp) +sw $a1, 136($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -2608,46 +2370,32 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 136($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 152($sp) +sw $a1, 132($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 156($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 148($sp) -lw $t1, 148($sp) -sw $t1, 24($sp) +sw $a1, 140($sp) +lw $t1, 140($sp) +sw $t1, 20($sp) b label_3 label_5: -lw $t1, 28($sp) -sw $t1, 160($sp) +lw $t1, 24($sp) +sw $t1, 148($sp) lw $t1, 12($sp) -sw $t1, 164($sp) -lw $a1, 164($sp) +sw $t1, 152($sp) +lw $a1, 152($sp) lw $ra, 0($sp) -addi $sp, $sp, 172 +addi $sp, $sp, 160 jr $ra Parse.parse_line: -addi $sp, $sp, -148 +addi $sp, $sp, -136 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -2670,28 +2418,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Vertice_init sw $a1, 12($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2713,22 +2447,22 @@ lw $t3, 36($t2) jal $t3 sw $a1, 4($sp) lw $t1, 4($sp) -sw $t1, 24($sp) +sw $t1, 20($sp) label_6: -lw $t0, 152($sp) +lw $t0, 140($sp) lw $t1, 20($t0) -sw $t1, 108($sp) +sw $t1, 100($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 100($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 60($sp) +sw $a1, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -2742,28 +2476,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 64($sp) li $t0, 0 -sw $t0, 72($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 76($sp) -lw $t0, 60($sp) +sw $a1, 72($sp) +lw $t0, 56($sp) lw $t1, 16($t0) -sw $t1, 52($sp) -lw $t0, 68($sp) +sw $t1, 48($sp) +lw $t0, 64($sp) lw $t1, 16($t0) -sw $t1, 56($sp) -lw $a0, 52($sp) -lw $t1, 56($sp) +sw $t1, 52($sp) +lw $a0, 48($sp) +lw $t1, 52($sp) seq $a0, $a0, $t1 -sw $a0, 48($sp) +sw $a0, 44($sp) li $a0, 20 li $v0, 9 syscall @@ -2777,22 +2511,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 40($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 80($sp) -lw $t0, 44($sp) +sw $a1, 76($sp) +lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 40($sp) -lw $t1, 40($sp) +sw $t1, 36($sp) +lw $t1, 36($sp) xor $a0, $t1, 1 -sw $a0, 36($sp) +sw $a0, 32($sp) li $a0, 20 li $v0, 9 syscall @@ -2806,87 +2540,59 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 28($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 84($sp) -lw $t0, 32($sp) +sw $a1, 80($sp) +lw $t0, 28($sp) lw $a0, 16($t0) bnez $a0, label_7 b label_8 label_7: -lw $t0, 152($sp) +lw $t0, 140($sp) lw $t1, 20($t0) -sw $t1, 108($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t1, 100($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 88($sp) -lw $t1, 88($sp) -sw $t1, 100($sp) -lw $t0, 152($sp) -lw $t1, 20($t0) -sw $t1, 108($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 112($sp) +lw $t2, 12($t1) +lw $t3, 40($t2) +jal $t3 +sw $a1, 84($sp) +lw $t1, 84($sp) +sw $t1, 92($sp) +lw $t0, 140($sp) +lw $t1, 20($t0) +sw $t1, 100($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 104($sp) -lw $t1, 104($sp) -sw $t1, 116($sp) +sw $a1, 96($sp) +lw $t1, 96($sp) +sw $t1, 104($sp) li $a0, 28 li $v0, 9 syscall @@ -2900,72 +2606,72 @@ li $t1, 7 sw $t1, 8($t0) la $t1, Edge_methods sw $t1, 12($t0) -sw $t0, 128($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Edge_init -sw $a1, 132($sp) +sw $a1, 120($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 -sw $a1, 136($sp) +sw $a1, 124($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 124($sp) +sw $a1, 112($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 120($sp) -lw $t1, 120($sp) -sw $t1, 140($sp) -lw $t1, 140($sp) -sw $t1, 144($sp) +sw $a1, 108($sp) +lw $t1, 108($sp) +sw $t1, 128($sp) +lw $t1, 128($sp) +sw $t1, 132($sp) b label_6 label_8: -lw $t1, 24($sp) -sw $t1, 148($sp) -lw $a1, 148($sp) +lw $t1, 20($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) lw $ra, 0($sp) -addi $sp, $sp, 160 +addi $sp, $sp, 148 jr $ra Parse.c2i: -addi $sp, $sp, -500 +addi $sp, $sp, -496 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_7 @@ -2997,7 +2703,7 @@ move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3057,7 +2763,7 @@ move $t0, $sp lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3117,7 +2823,7 @@ move $t0, $sp lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3177,7 +2883,7 @@ move $t0, $sp lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3237,7 +2943,7 @@ move $t0, $sp lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3297,7 +3003,7 @@ move $t0, $sp lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3357,7 +3063,7 @@ move $t0, $sp lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3417,7 +3123,7 @@ move $t0, $sp lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3477,7 +3183,7 @@ move $t0, $sp lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3537,7 +3243,7 @@ move $t0, $sp lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals @@ -3568,25 +3274,11 @@ sw $a1, 360($sp) lw $t0, 332($sp) lw $a0, 16($t0) bnez $a0, label_18 -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 368($sp) move $t0, $sp -lw $t1, 504($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 500($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3606,19 +3298,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 372($sp) +sw $t0, 368($sp) li $t0, 0 -sw $t0, 376($sp) +sw $t0, 372($sp) move $t0, $sp -lw $t1, 376($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 372($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 380($sp) -lw $t1, 372($sp) +sw $a1, 376($sp) +lw $t1, 368($sp) sw $t1, 328($sp) b label_19 label_18: @@ -3635,19 +3327,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 384($sp) +sw $t0, 380($sp) li $t0, 9 -sw $t0, 388($sp) +sw $t0, 384($sp) move $t0, $sp -lw $t1, 388($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 392($sp) -lw $t1, 384($sp) +sw $a1, 388($sp) +lw $t1, 380($sp) sw $t1, 328($sp) label_19: lw $t1, 328($sp) @@ -3667,19 +3359,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 396($sp) +sw $t0, 392($sp) li $t0, 8 -sw $t0, 400($sp) +sw $t0, 396($sp) move $t0, $sp -lw $t1, 400($t0) +lw $t1, 396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 396($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 404($sp) -lw $t1, 396($sp) +sw $a1, 400($sp) +lw $t1, 392($sp) sw $t1, 292($sp) label_20: lw $t1, 292($sp) @@ -3699,19 +3391,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 408($sp) +sw $t0, 404($sp) li $t0, 7 -sw $t0, 412($sp) +sw $t0, 408($sp) move $t0, $sp -lw $t1, 412($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 416($sp) -lw $t1, 408($sp) +sw $a1, 412($sp) +lw $t1, 404($sp) sw $t1, 256($sp) label_21: lw $t1, 256($sp) @@ -3731,19 +3423,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 420($sp) +sw $t0, 416($sp) li $t0, 6 -sw $t0, 424($sp) +sw $t0, 420($sp) move $t0, $sp -lw $t1, 424($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 420($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 428($sp) -lw $t1, 420($sp) +sw $a1, 424($sp) +lw $t1, 416($sp) sw $t1, 220($sp) label_22: lw $t1, 220($sp) @@ -3763,19 +3455,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 432($sp) +sw $t0, 428($sp) li $t0, 5 -sw $t0, 436($sp) +sw $t0, 432($sp) move $t0, $sp -lw $t1, 436($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 432($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 440($sp) -lw $t1, 432($sp) +sw $a1, 436($sp) +lw $t1, 428($sp) sw $t1, 184($sp) label_23: lw $t1, 184($sp) @@ -3795,19 +3487,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 444($sp) +sw $t0, 440($sp) li $t0, 4 -sw $t0, 448($sp) +sw $t0, 444($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 444($t0) +lw $t1, 440($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 452($sp) -lw $t1, 444($sp) +sw $a1, 448($sp) +lw $t1, 440($sp) sw $t1, 148($sp) label_24: lw $t1, 148($sp) @@ -3827,19 +3519,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 456($sp) +sw $t0, 452($sp) li $t0, 3 -sw $t0, 460($sp) +sw $t0, 456($sp) move $t0, $sp -lw $t1, 460($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 464($sp) -lw $t1, 456($sp) +sw $a1, 460($sp) +lw $t1, 452($sp) sw $t1, 112($sp) label_25: lw $t1, 112($sp) @@ -3859,19 +3551,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 468($sp) +sw $t0, 464($sp) li $t0, 2 -sw $t0, 472($sp) +sw $t0, 468($sp) move $t0, $sp -lw $t1, 472($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 476($sp) -lw $t1, 468($sp) +sw $a1, 472($sp) +lw $t1, 464($sp) sw $t1, 76($sp) label_26: lw $t1, 76($sp) @@ -3891,19 +3583,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 480($sp) +sw $t0, 476($sp) li $t0, 1 -sw $t0, 484($sp) +sw $t0, 480($sp) move $t0, $sp -lw $t1, 484($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 480($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 488($sp) -lw $t1, 480($sp) +sw $a1, 484($sp) +lw $t1, 476($sp) sw $t1, 40($sp) label_27: lw $t1, 40($sp) @@ -3923,34 +3615,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 492($sp) +sw $t0, 488($sp) li $t0, 0 -sw $t0, 496($sp) +sw $t0, 492($sp) move $t0, $sp -lw $t1, 496($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 500($sp) -lw $t1, 492($sp) +sw $a1, 496($sp) +lw $t1, 488($sp) sw $t1, 4($sp) label_28: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 512 +addi $sp, $sp, 508 jr $ra Parse.a2i: -addi $sp, $sp, -324 +addi $sp, $sp, -312 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4075,10 +3767,10 @@ sw $t1, 0($sp) lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4202,10 +3894,10 @@ sw $t1, 0($sp) lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4272,28 +3964,14 @@ sw $a1, 168($sp) lw $t0, 112($sp) lw $a0, 16($t0) bnez $a0, label_31 -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 176($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4305,16 +3983,16 @@ sw $t1, 108($sp) b label_32 label_31: move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 204($sp) +sw $a1, 200($sp) li $a0, 20 li $v0, 9 syscall @@ -4328,28 +4006,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 208($sp) +sw $t0, 204($sp) li $t0, 1 -sw $t0, 212($sp) +sw $t0, 208($sp) move $t0, $sp -lw $t1, 212($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 216($sp) +sw $a1, 212($sp) +lw $t0, 200($sp) +lw $t1, 16($t0) +sw $t1, 192($sp) lw $t0, 204($sp) lw $t1, 16($t0) sw $t1, 196($sp) -lw $t0, 208($sp) -lw $t1, 16($t0) -sw $t1, 200($sp) -lw $a0, 196($sp) -lw $t1, 200($sp) +lw $a0, 192($sp) +lw $t1, 196($sp) sub $a0, $a0, $t1 -sw $a0, 192($sp) +sw $a0, 188($sp) li $a0, 20 li $v0, 9 syscall @@ -4363,16 +4041,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 188($sp) +sw $t0, 184($sp) move $t0, $sp -lw $t1, 192($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 220($sp) +sw $a1, 216($sp) li $a0, 20 li $v0, 9 syscall @@ -4386,64 +4064,50 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 224($sp) +sw $t0, 220($sp) li $t0, 1 -sw $t0, 228($sp) +sw $t0, 224($sp) move $t0, $sp -lw $t1, 228($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 224($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 232($sp) +sw $a1, 228($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 224($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 184($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 236($sp) +sw $a1, 180($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 180($sp) -lw $t1, 180($sp) +sw $a1, 176($sp) +lw $t1, 176($sp) sw $t1, 108($sp) label_32: lw $t1, 108($sp) @@ -4451,16 +4115,16 @@ sw $t1, 44($sp) b label_33 label_30: move $t0, $sp -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 276($sp) +sw $a1, 268($sp) li $a0, 20 li $v0, 9 syscall @@ -4474,28 +4138,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 280($sp) +sw $t0, 272($sp) li $t0, 1 -sw $t0, 284($sp) +sw $t0, 276($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 280($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 288($sp) -lw $t0, 276($sp) +sw $a1, 280($sp) +lw $t0, 268($sp) lw $t1, 16($t0) -sw $t1, 268($sp) -lw $t0, 280($sp) +sw $t1, 260($sp) +lw $t0, 272($sp) lw $t1, 16($t0) -sw $t1, 272($sp) -lw $a0, 268($sp) -lw $t1, 272($sp) +sw $t1, 264($sp) +lw $a0, 260($sp) +lw $t1, 264($sp) sub $a0, $a0, $t1 -sw $a0, 264($sp) +sw $a0, 256($sp) li $a0, 20 li $v0, 9 syscall @@ -4509,16 +4173,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 260($sp) +sw $t0, 252($sp) move $t0, $sp -lw $t1, 264($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 292($sp) +sw $a1, 284($sp) li $a0, 20 li $v0, 9 syscall @@ -4532,69 +4196,55 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 296($sp) +sw $t0, 288($sp) li $t0, 1 -sw $t0, 300($sp) +sw $t0, 292($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 292($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 304($sp) +sw $a1, 296($sp) move $t0, $sp -lw $t1, 260($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 256($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 308($sp) +sw $a1, 248($sp) move $t0, $sp -lw $t1, 256($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 308($t0) +lw $t1, 316($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 252($sp) -lw $t0, 252($sp) +sw $a1, 244($sp) +lw $t0, 244($sp) lw $t1, 16($t0) -sw $t1, 248($sp) -lw $t1, 248($sp) +sw $t1, 240($sp) +lw $t1, 240($sp) neg $a0, $t1 -sw $a0, 244($sp) +sw $a0, 236($sp) li $a0, 20 li $v0, 9 syscall @@ -4608,17 +4258,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 232($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 312($sp) -lw $t1, 240($sp) +sw $a1, 300($sp) +lw $t1, 232($sp) sw $t1, 44($sp) label_33: lw $t1, 44($sp) @@ -4638,27 +4288,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 316($sp) +sw $t0, 304($sp) li $t0, 0 -sw $t0, 320($sp) +sw $t0, 308($sp) move $t0, $sp -lw $t1, 320($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 324($sp) -lw $t1, 316($sp) +sw $a1, 312($sp) +lw $t1, 304($sp) sw $t1, 4($sp) label_34: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 336 +addi $sp, $sp, 324 jr $ra Parse.a2i_aux: -addi $sp, $sp, -540 +addi $sp, $sp, -536 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -4689,10 +4339,10 @@ sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) move $t0, $sp -lw $t1, 548($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4799,10 +4449,10 @@ sw $t1, 0($sp) lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -5021,38 +4671,24 @@ sw $t1, 0($sp) lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 212($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, Parse_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Parse_methods -sw $t1, 12($t0) -sw $t0, 228($sp) move $t0, $sp lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 544($t0) +lw $t1, 540($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 228($t0) +lw $t1, 540($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -5091,7 +4727,7 @@ lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 232($sp) +sw $a1, 228($sp) lw $t1, 160($sp) sw $t1, 16($sp) li $a0, 20 @@ -5107,28 +4743,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 256($sp) +sw $t0, 252($sp) li $t0, 1 -sw $t0, 260($sp) +sw $t0, 256($sp) move $t0, $sp -lw $t1, 260($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 264($sp) +sw $a1, 260($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 248($sp) -lw $t0, 256($sp) +sw $t1, 244($sp) +lw $t0, 252($sp) lw $t1, 16($t0) -sw $t1, 252($sp) -lw $a0, 248($sp) -lw $t1, 252($sp) +sw $t1, 248($sp) +lw $a0, 244($sp) +lw $t1, 248($sp) add $a0, $a0, $t1 -sw $a0, 244($sp) +sw $a0, 240($sp) li $a0, 20 li $v0, 9 syscall @@ -5142,28 +4778,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 268($sp) -lw $t1, 240($sp) +sw $a1, 264($sp) +lw $t1, 236($sp) sw $t1, 40($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 288($sp) +sw $t1, 284($sp) lw $t0, 24($sp) lw $t1, 16($t0) -sw $t1, 292($sp) -lw $a0, 288($sp) -lw $t1, 292($sp) +sw $t1, 288($sp) +lw $a0, 284($sp) +lw $t1, 288($sp) seq $a0, $a0, $t1 -sw $a0, 284($sp) +sw $a0, 280($sp) li $a0, 20 li $v0, 9 syscall @@ -5177,21 +4813,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 280($sp) +sw $t0, 276($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 280($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 296($sp) -lw $t0, 280($sp) +sw $a1, 292($sp) +lw $t0, 276($sp) lw $a0, 16($t0) bnez $a0, label_40 la $t0, empty_str -sw $t0, 300($sp) +sw $t0, 296($sp) li $a0, 20 li $v0, 9 syscall @@ -5205,22 +4841,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 304($sp) +sw $t0, 300($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 304($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 308($sp) -lw $t1, 304($sp) -sw $t1, 276($sp) +sw $a1, 304($sp) +lw $t1, 300($sp) +sw $t1, 272($sp) b label_41 label_40: la $t0, empty_str -sw $t0, 312($sp) +sw $t0, 308($sp) li $a0, 20 li $v0, 9 syscall @@ -5234,47 +4870,47 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 316($sp) +sw $t0, 312($sp) move $t0, $sp -lw $t1, 312($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 320($sp) -lw $t0, 544($sp) -lw $t1, 316($sp) +sw $a1, 316($sp) +lw $t0, 540($sp) +lw $t1, 312($sp) sw $t1, 20($t0) -lw $t1, 316($sp) -sw $t1, 276($sp) +lw $t1, 312($sp) +sw $t1, 272($sp) label_41: -lw $t1, 276($sp) +lw $t1, 272($sp) sw $t1, 124($sp) b label_42 label_39: move $t0, $sp -lw $t1, 548($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 364($sp) -lw $t0, 364($sp) +sw $a1, 360($sp) +lw $t0, 360($sp) lw $t1, 16($t0) -sw $t1, 356($sp) +sw $t1, 352($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 360($sp) -lw $a0, 356($sp) -lw $t1, 360($sp) +sw $t1, 356($sp) +lw $a0, 352($sp) +lw $t1, 356($sp) sub $a0, $a0, $t1 -sw $a0, 352($sp) +sw $a0, 348($sp) li $a0, 20 li $v0, 9 syscall @@ -5288,16 +4924,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 348($sp) +sw $t0, 344($sp) move $t0, $sp -lw $t1, 352($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 348($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 368($sp) +sw $a1, 364($sp) li $a0, 20 li $v0, 9 syscall @@ -5311,28 +4947,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 372($sp) +sw $t0, 368($sp) li $t0, 1 -sw $t0, 376($sp) +sw $t0, 372($sp) move $t0, $sp -lw $t1, 376($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 372($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 380($sp) -lw $t0, 348($sp) +sw $a1, 376($sp) +lw $t0, 344($sp) lw $t1, 16($t0) -sw $t1, 340($sp) -lw $t0, 372($sp) +sw $t1, 336($sp) +lw $t0, 368($sp) lw $t1, 16($t0) -sw $t1, 344($sp) -lw $a0, 340($sp) -lw $t1, 344($sp) +sw $t1, 340($sp) +lw $a0, 336($sp) +lw $t1, 340($sp) sub $a0, $a0, $t1 -sw $a0, 336($sp) +sw $a0, 332($sp) li $a0, 20 li $v0, 9 syscall @@ -5346,16 +4982,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 332($sp) +sw $t0, 328($sp) move $t0, $sp -lw $t1, 336($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 384($sp) +sw $a1, 380($sp) li $a0, 20 li $v0, 9 syscall @@ -5369,28 +5005,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 404($sp) +sw $t0, 400($sp) li $t0, 1 -sw $t0, 408($sp) +sw $t0, 404($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 404($t0) +lw $t1, 400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 412($sp) +sw $a1, 408($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 396($sp) -lw $t0, 404($sp) +sw $t1, 392($sp) +lw $t0, 400($sp) lw $t1, 16($t0) -sw $t1, 400($sp) -lw $a0, 396($sp) -lw $t1, 400($sp) +sw $t1, 396($sp) +lw $a0, 392($sp) +lw $t1, 396($sp) add $a0, $a0, $t1 -sw $a0, 392($sp) +sw $a0, 388($sp) li $a0, 20 li $v0, 9 syscall @@ -5404,35 +5040,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 388($sp) +sw $t0, 384($sp) move $t0, $sp -lw $t1, 392($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 388($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 416($sp) +sw $a1, 412($sp) move $t0, $sp -lw $t1, 332($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 388($t0) +lw $t1, 384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 328($sp) -lw $t0, 544($sp) -lw $t1, 328($sp) +sw $a1, 324($sp) +lw $t0, 540($sp) +lw $t1, 324($sp) sw $t1, 20($t0) lw $t1, 24($sp) sw $t1, 40($sp) @@ -5444,26 +5080,26 @@ sw $t1, 88($sp) b label_43 label_38: move $t0, $sp -lw $t1, 548($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 464($sp) -lw $t0, 464($sp) +sw $a1, 460($sp) +lw $t0, 460($sp) lw $t1, 16($t0) -sw $t1, 456($sp) +sw $t1, 452($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 460($sp) -lw $a0, 456($sp) -lw $t1, 460($sp) +sw $t1, 456($sp) +lw $a0, 452($sp) +lw $t1, 456($sp) sub $a0, $a0, $t1 -sw $a0, 452($sp) +sw $a0, 448($sp) li $a0, 20 li $v0, 9 syscall @@ -5477,16 +5113,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 448($sp) +sw $t0, 444($sp) move $t0, $sp -lw $t1, 452($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 448($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 468($sp) +sw $a1, 464($sp) li $a0, 20 li $v0, 9 syscall @@ -5500,28 +5136,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 472($sp) +sw $t0, 468($sp) li $t0, 1 -sw $t0, 476($sp) +sw $t0, 472($sp) move $t0, $sp -lw $t1, 476($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 472($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 480($sp) -lw $t0, 448($sp) +sw $a1, 476($sp) +lw $t0, 444($sp) lw $t1, 16($t0) -sw $t1, 440($sp) -lw $t0, 472($sp) +sw $t1, 436($sp) +lw $t0, 468($sp) lw $t1, 16($t0) -sw $t1, 444($sp) -lw $a0, 440($sp) -lw $t1, 444($sp) +sw $t1, 440($sp) +lw $a0, 436($sp) +lw $t1, 440($sp) sub $a0, $a0, $t1 -sw $a0, 436($sp) +sw $a0, 432($sp) li $a0, 20 li $v0, 9 syscall @@ -5535,16 +5171,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 432($sp) +sw $t0, 428($sp) move $t0, $sp -lw $t1, 436($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 432($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 484($sp) +sw $a1, 480($sp) li $a0, 20 li $v0, 9 syscall @@ -5558,28 +5194,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 504($sp) +sw $t0, 500($sp) li $t0, 1 -sw $t0, 508($sp) +sw $t0, 504($sp) move $t0, $sp -lw $t1, 508($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 500($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 512($sp) +sw $a1, 508($sp) lw $t0, 40($sp) lw $t1, 16($t0) -sw $t1, 496($sp) -lw $t0, 504($sp) +sw $t1, 492($sp) +lw $t0, 500($sp) lw $t1, 16($t0) -sw $t1, 500($sp) -lw $a0, 496($sp) -lw $t1, 500($sp) +sw $t1, 496($sp) +lw $a0, 492($sp) +lw $t1, 496($sp) add $a0, $a0, $t1 -sw $a0, 492($sp) +sw $a0, 488($sp) li $a0, 20 li $v0, 9 syscall @@ -5593,35 +5229,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 488($sp) +sw $t0, 484($sp) move $t0, $sp -lw $t1, 492($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 488($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 516($sp) +sw $a1, 512($sp) move $t0, $sp -lw $t1, 432($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 488($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 428($sp) -lw $t0, 544($sp) -lw $t1, 428($sp) +sw $a1, 424($sp) +lw $t0, 540($sp) +lw $t1, 424($sp) sw $t1, 20($t0) lw $t1, 24($sp) sw $t1, 40($sp) @@ -5629,46 +5265,32 @@ lw $t1, 24($sp) sw $t1, 88($sp) label_43: lw $t1, 88($sp) -sw $t1, 528($sp) +sw $t1, 524($sp) b label_35 label_37: lw $t1, 44($sp) +sw $t1, 528($sp) +lw $t1, 528($sp) sw $t1, 532($sp) -lw $t1, 532($sp) -sw $t1, 536($sp) lw $t1, 16($sp) -sw $t1, 540($sp) -lw $a1, 540($sp) +sw $t1, 536($sp) +lw $a1, 536($sp) lw $ra, 0($sp) -addi $sp, $sp, 552 +addi $sp, $sp, 548 jr $ra Main_init: -addi $sp, $sp, -12 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Parse_init sw $a1, 4($sp) move $a1, $zero -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 10 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 12($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -5678,11 +5300,11 @@ lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 8($sp) -lw $t0, 16($sp) +lw $t0, 12($sp) lw $t1, 8($sp) sw $t1, 24($t0) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 16 jr $ra Main.main: addi $sp, $sp, -16 diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 621a4e13..b222bc4d 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -640,33 +640,33 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Foo_init: -addi $sp, $sp, -128 +addi $sp, $sp, -120 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bazz_init sw $a1, 4($sp) move $a1, $zero -lw $t0, 132($sp) +lw $t0, 124($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_2 b case_void_error label_2: -blt $t1 7 label_3 -bgt $t1 7 label_3 +blt $t1 8 label_3 +bgt $t1 8 label_3 lw $t1, 124($sp) sw $t1, 12($sp) lw $t1, 12($sp) sw $t1, 8($sp) b label_1 label_3: -blt $t1 7 label_4 -bgt $t1 8 label_4 -lw $t1, 132($sp) +blt $t1 7 label_4 +bgt $t1 8 label_4 +lw $t1, 124($sp) sw $t1, 16($sp) li $a0, 52 li $v0, 9 @@ -691,17 +691,9 @@ sw $a1, 24($sp) lw $t1, 20($sp) sw $t1, 8($sp) b label_1 -label_3: -blt $t1 6 label_4 -bgt $t1 6 label_4 -lw $t1, 124($sp) -sw $t1, 24($sp) -lw $t1, 24($sp) -sw $t1, 8($sp) -b label_1 label_4: -blt $t1 5 label_5 -bgt $t1 5 label_5 +blt $t1 6 label_5 +bgt $t1 8 label_5 lw $t1, 124($sp) sw $t1, 28($sp) li $a0, 44 @@ -730,10 +722,10 @@ b label_1 label_5: b case_no_match_error label_1: -lw $t0, 132($sp) +lw $t0, 124($sp) lw $t1, 8($sp) sw $t1, 28($t0) -lw $t0, 132($sp) +lw $t0, 124($sp) lw $t1, 28($t0) sw $t1, 92($sp) move $t0, $sp @@ -747,7 +739,7 @@ lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 sw $a1, 88($sp) -lw $t0, 132($sp) +lw $t0, 124($sp) lw $t1, 20($t0) sw $t1, 100($sp) move $t0, $sp @@ -794,25 +786,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 104($sp) -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Foo_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Foo_methods -sw $t1, 12($t0) -sw $t0, 112($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 124($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -851,23 +829,9 @@ lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 116($sp) -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Foo_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Foo_methods -sw $t1, 12($t0) -sw $t0, 124($sp) +sw $a1, 112($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 124($t0) @@ -876,11 +840,11 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 120($sp) +sw $a1, 116($sp) lw $t0, 56($sp) lw $t1, 16($t0) sw $t1, 48($sp) -lw $t0, 120($sp) +lw $t0, 116($sp) lw $t1, 16($t0) sw $t1, 52($sp) lw $a0, 48($sp) @@ -909,12 +873,12 @@ lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 128($sp) -lw $t0, 132($sp) +sw $a1, 120($sp) +lw $t0, 124($sp) lw $t1, 40($sp) sw $t1, 32($t0) lw $ra, 0($sp) -addi $sp, $sp, 136 +addi $sp, $sp, 128 jr $ra Foo.doh: addi $sp, $sp, -56 @@ -999,103 +963,75 @@ lw $ra, 0($sp) addi $sp, $sp, 64 jr $ra Bar_init: -addi $sp, $sp, -20 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Razz_init sw $a1, 4($sp) move $a1, $zero -li $a0, 52 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, Bar_name -sw $t1, 4($t0) -li $t1, 13 -sw $t1, 8($t0) -la $t1, Bar_methods -sw $t1, 12($t0) -sw $t0, 12($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 16($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 sw $a1, 8($sp) -lw $t0, 24($sp) +lw $t0, 16($sp) lw $t1, 8($sp) sw $t1, 44($t0) -li $a0, 52 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, Bar_name -sw $t1, 4($t0) -li $t1, 13 -sw $t1, 8($t0) -la $t1, Bar_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 16($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 16($sp) -lw $t0, 24($sp) -lw $t1, 16($sp) +sw $a1, 12($sp) +lw $t0, 16($sp) +lw $t1, 12($sp) sw $t1, 48($t0) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 20 jr $ra Razz_init: -addi $sp, $sp, -148 +addi $sp, $sp, -140 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Foo_init sw $a1, 4($sp) move $a1, $zero -lw $t0, 152($sp) +lw $t0, 144($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_7 b case_void_error label_7: -blt $t1 7 label_8 -bgt $t1 7 label_8 +blt $t1 8 label_8 +bgt $t1 8 label_8 lw $t1, 144($sp) sw $t1, 12($sp) lw $t1, 12($sp) sw $t1, 8($sp) b label_6 label_8: -blt $t1 7 label_9 -bgt $t1 8 label_9 -lw $t1, 152($sp) +blt $t1 7 label_9 +bgt $t1 8 label_9 +lw $t1, 144($sp) sw $t1, 16($sp) li $a0, 52 li $v0, 9 @@ -1116,25 +1052,17 @@ lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bar_init -sw $a1, 20($sp) -lw $t1, 16($sp) -sw $t1, 8($sp) -b label_6 -label_8: -blt $t1 6 label_9 -bgt $t1 6 label_9 -lw $t1, 144($sp) -sw $t1, 24($sp) -lw $t1, 24($sp) +sw $a1, 24($sp) +lw $t1, 20($sp) sw $t1, 8($sp) b label_6 label_9: b case_no_match_error label_6: -lw $t0, 152($sp) +lw $t0, 144($sp) lw $t1, 8($sp) sw $t1, 36($t0) -lw $t0, 152($sp) +lw $t0, 144($sp) lw $t1, 28($t0) sw $t1, 96($sp) li $a0, 28 @@ -1162,7 +1090,7 @@ lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 sw $a1, 92($sp) -lw $t0, 152($sp) +lw $t0, 144($sp) lw $t1, 20($t0) sw $t1, 108($sp) move $t0, $sp @@ -1209,7 +1137,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 112($sp) -lw $t0, 152($sp) +lw $t0, 144($sp) lw $t1, 36($t0) sw $t1, 120($sp) move $t0, $sp @@ -1256,25 +1184,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 124($sp) -li $a0, 44 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Razz_name -sw $t1, 4($t0) -li $t1, 11 -sw $t1, 8($t0) -la $t1, Razz_methods -sw $t1, 12($t0) -sw $t0, 132($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 144($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1313,23 +1227,9 @@ lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 136($sp) -li $a0, 44 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Razz_name -sw $t1, 4($t0) -li $t1, 11 -sw $t1, 8($t0) -la $t1, Razz_methods -sw $t1, 12($t0) -sw $t0, 144($sp) +sw $a1, 132($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 144($t0) @@ -1338,11 +1238,11 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 140($sp) +sw $a1, 136($sp) lw $t0, 44($sp) lw $t1, 16($t0) sw $t1, 36($sp) -lw $t0, 140($sp) +lw $t0, 136($sp) lw $t1, 16($t0) sw $t1, 40($sp) lw $a0, 36($sp) @@ -1371,19 +1271,19 @@ lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 148($sp) -lw $t0, 152($sp) +sw $a1, 140($sp) +lw $t0, 144($sp) lw $t1, 28($sp) sw $t1, 40($t0) lw $ra, 0($sp) -addi $sp, $sp, 156 +addi $sp, $sp, 148 jr $ra Bazz_init: -addi $sp, $sp, -68 +addi $sp, $sp, -64 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal IO_init @@ -1414,10 +1314,10 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 16($sp) -lw $t0, 72($sp) +lw $t0, 68($sp) lw $t1, 8($sp) sw $t1, 16($t0) -lw $t0, 72($sp) +lw $t0, 68($sp) lw $t1, 0($t0) la $a0, void bne $t1 $a0 label_11 @@ -1427,89 +1327,89 @@ blt $t1 8 label_12 bgt $t1 8 label_12 lw $t1, 68($sp) sw $t1, 24($sp) -li $a0, 36 +lw $t1, 24($sp) +sw $t1, 20($sp) +b label_10 +label_12: +blt $t1 7 label_13 +bgt $t1 8 label_13 +lw $t1, 68($sp) +sw $t1, 28($sp) +li $a0, 52 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 5 +li $t1, 8 sw $t1, 0($t0) -la $t1, Foo_name +la $t1, Bar_name sw $t1, 4($t0) -li $t1, 9 +li $t1, 13 sw $t1, 8($t0) -la $t1, Foo_methods +la $t1, Bar_methods sw $t1, 12($t0) sw $t0, 32($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal Foo_init -sw $a1, 32($sp) -lw $t1, 28($sp) +jal Bar_init +sw $a1, 36($sp) +lw $t1, 32($sp) sw $t1, 20($sp) b label_10 -label_12: -blt $t1 7 label_13 -bgt $t1 7 label_13 +label_13: +blt $t1 6 label_14 +bgt $t1 8 label_14 lw $t1, 68($sp) -sw $t1, 36($sp) -li $a0, 52 +sw $t1, 40($sp) +li $a0, 44 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 7 sw $t1, 0($t0) -la $t1, Bar_name +la $t1, Razz_name sw $t1, 4($t0) -li $t1, 13 +li $t1, 11 sw $t1, 8($t0) -la $t1, Bar_methods +la $t1, Razz_methods sw $t1, 12($t0) sw $t0, 44($sp) move $t0, $sp lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal Bar_init -sw $a1, 44($sp) -lw $t1, 40($sp) -sw $t1, 20($sp) -b label_10 -label_13: -blt $t1 6 label_14 -bgt $t1 6 label_14 -lw $t1, 68($sp) -sw $t1, 48($sp) -lw $t1, 48($sp) +jal Razz_init +sw $a1, 48($sp) +lw $t1, 44($sp) sw $t1, 20($sp) b label_10 label_14: blt $t1 5 label_15 -bgt $t1 5 label_15 +bgt $t1 8 label_15 lw $t1, 68($sp) sw $t1, 52($sp) -li $a0, 44 +li $a0, 36 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 7 +li $t1, 6 sw $t1, 0($t0) -la $t1, Razz_name +la $t1, Foo_name sw $t1, 4($t0) -li $t1, 11 +li $t1, 9 sw $t1, 8($t0) -la $t1, Razz_methods +la $t1, Foo_methods sw $t1, 12($t0) sw $t0, 56($sp) move $t0, $sp lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal Razz_init +jal Foo_init sw $a1, 60($sp) lw $t1, 56($sp) sw $t1, 20($sp) @@ -1517,25 +1417,11 @@ b label_10 label_15: b case_no_match_error label_10: -lw $t0, 72($sp) +lw $t0, 68($sp) lw $t1, 20($sp) sw $t1, 20($t0) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Bazz_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Bazz_methods -sw $t1, 12($t0) -sw $t0, 68($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 68($t0) @@ -1545,41 +1431,27 @@ lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 64($sp) -lw $t0, 72($sp) +lw $t0, 68($sp) lw $t1, 64($sp) sw $t1, 24($t0) lw $ra, 0($sp) -addi $sp, $sp, 76 +addi $sp, $sp, 72 jr $ra Bazz.printh: -addi $sp, $sp, -24 +addi $sp, $sp, -20 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 28($sp) +lw $t0, 24($sp) lw $t1, 16($t0) sw $t1, 8($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Bazz_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Bazz_methods -sw $t1, 12($t0) -sw $t0, 12($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 24($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1599,21 +1471,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 16($sp) +sw $t0, 12($sp) li $t0, 0 -sw $t0, 20($sp) +sw $t0, 16($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 24($sp) -lw $a1, 16($sp) +sw $a1, 20($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 32 +addi $sp, $sp, 28 jr $ra Bazz.doh: addi $sp, $sp, -56 diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index 0ae9baac..35a172d4 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -614,7 +614,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -20 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_3 @@ -642,25 +642,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -672,5 +658,5 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 24 jr $ra \ No newline at end of file diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index 51341aaf..c68a1e21 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -803,7 +803,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra C.out_c: -addi $sp, $sp, -20 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_5 @@ -831,25 +831,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -861,7 +847,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 24 jr $ra D_init: addi $sp, $sp, -4 @@ -878,7 +864,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra D.out_d: -addi $sp, $sp, -20 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_6 @@ -906,25 +892,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 20($t0) @@ -936,7 +908,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 24 jr $ra Main_init: addi $sp, $sp, -4 @@ -953,7 +925,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -68 +addi $sp, $sp, -64 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -1105,25 +1077,11 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 64($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 68($sp) move $t0, $sp lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 68($t0) @@ -1135,5 +1093,5 @@ jal $t3 sw $a1, 52($sp) lw $a1, 52($sp) lw $ra, 0($sp) -addi $sp, $sp, 76 +addi $sp, $sp, 72 jr $ra \ No newline at end of file diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 81ef0ac0..89d2da74 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -834,31 +834,17 @@ lw $ra, 0($sp) addi $sp, $sp, 16 jr $ra Board.board_init: -addi $sp, $sp, -484 +addi $sp, $sp, -480 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 28 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Board_name -sw $t1, 4($t0) -li $t1, 7 -sw $t1, 8($t0) -la $t1, Board_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 492($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 488($t0) +lw $t1, 484($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 484($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -866,7 +852,7 @@ lw $t3, 28($t2) jal $t3 sw $a1, 4($sp) lw $t1, 4($sp) -sw $t1, 12($sp) +sw $t1, 8($sp) li $a0, 20 li $v0, 9 syscall @@ -880,28 +866,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 36($sp) +sw $t0, 32($sp) li $t0, 15 -sw $t0, 40($sp) +sw $t0, 36($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 44($sp) -lw $t0, 12($sp) +sw $a1, 40($sp) +lw $t0, 8($sp) lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t0, 36($sp) +sw $t1, 24($sp) +lw $t0, 32($sp) lw $t1, 16($t0) -sw $t1, 32($sp) -lw $a0, 28($sp) -lw $t1, 32($sp) +sw $t1, 28($sp) +lw $a0, 24($sp) +lw $t1, 28($sp) seq $a0, $a0, $t1 -sw $a0, 24($sp) +sw $a0, 20($sp) li $a0, 20 li $v0, 9 syscall @@ -915,17 +901,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 20($sp) +sw $t0, 16($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 48($sp) -lw $t0, 20($sp) +sw $a1, 44($sp) +lw $t0, 16($sp) lw $a0, 16($t0) bnez $a0, label_1 li $a0, 20 @@ -941,28 +927,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 68($sp) li $t0, 16 -sw $t0, 76($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 80($sp) -lw $t0, 12($sp) +sw $a1, 76($sp) +lw $t0, 8($sp) lw $t1, 16($t0) -sw $t1, 64($sp) -lw $t0, 72($sp) +sw $t1, 60($sp) +lw $t0, 68($sp) lw $t1, 16($t0) -sw $t1, 68($sp) -lw $a0, 64($sp) -lw $t1, 68($sp) +sw $t1, 64($sp) +lw $a0, 60($sp) +lw $t1, 64($sp) seq $a0, $a0, $t1 -sw $a0, 60($sp) +sw $a0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -976,17 +962,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 56($sp) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 84($sp) -lw $t0, 56($sp) +sw $a1, 80($sp) +lw $t0, 52($sp) lw $a0, 16($t0) bnez $a0, label_2 li $a0, 20 @@ -1002,28 +988,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 108($sp) +sw $t0, 104($sp) li $t0, 20 -sw $t0, 112($sp) +sw $t0, 108($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 116($sp) -lw $t0, 12($sp) +sw $a1, 112($sp) +lw $t0, 8($sp) lw $t1, 16($t0) -sw $t1, 100($sp) -lw $t0, 108($sp) +sw $t1, 96($sp) +lw $t0, 104($sp) lw $t1, 16($t0) -sw $t1, 104($sp) -lw $a0, 100($sp) -lw $t1, 104($sp) +sw $t1, 100($sp) +lw $a0, 96($sp) +lw $t1, 100($sp) seq $a0, $a0, $t1 -sw $a0, 96($sp) +sw $a0, 92($sp) li $a0, 20 li $v0, 9 syscall @@ -1037,17 +1023,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 92($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 120($sp) -lw $t0, 92($sp) +sw $a1, 116($sp) +lw $t0, 88($sp) lw $a0, 16($t0) bnez $a0, label_3 li $a0, 20 @@ -1063,28 +1049,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 144($sp) +sw $t0, 140($sp) li $t0, 21 -sw $t0, 148($sp) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 152($sp) -lw $t0, 12($sp) +sw $a1, 148($sp) +lw $t0, 8($sp) lw $t1, 16($t0) -sw $t1, 136($sp) -lw $t0, 144($sp) +sw $t1, 132($sp) +lw $t0, 140($sp) lw $t1, 16($t0) -sw $t1, 140($sp) -lw $a0, 136($sp) -lw $t1, 140($sp) +sw $t1, 136($sp) +lw $a0, 132($sp) +lw $t1, 136($sp) seq $a0, $a0, $t1 -sw $a0, 132($sp) +sw $a0, 128($sp) li $a0, 20 li $v0, 9 syscall @@ -1098,17 +1084,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 128($sp) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 156($sp) -lw $t0, 128($sp) +sw $a1, 152($sp) +lw $t0, 124($sp) lw $a0, 16($t0) bnez $a0, label_4 li $a0, 20 @@ -1124,28 +1110,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 180($sp) +sw $t0, 176($sp) li $t0, 25 -sw $t0, 184($sp) +sw $t0, 180($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 188($sp) -lw $t0, 12($sp) +sw $a1, 184($sp) +lw $t0, 8($sp) lw $t1, 16($t0) -sw $t1, 172($sp) -lw $t0, 180($sp) +sw $t1, 168($sp) +lw $t0, 176($sp) lw $t1, 16($t0) -sw $t1, 176($sp) -lw $a0, 172($sp) -lw $t1, 176($sp) +sw $t1, 172($sp) +lw $a0, 168($sp) +lw $t1, 172($sp) seq $a0, $a0, $t1 -sw $a0, 168($sp) +sw $a0, 164($sp) li $a0, 20 li $v0, 9 syscall @@ -1159,17 +1145,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 164($sp) +sw $t0, 160($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 192($sp) -lw $t0, 164($sp) +sw $a1, 188($sp) +lw $t0, 160($sp) lw $a0, 16($t0) bnez $a0, label_5 li $a0, 20 @@ -1185,28 +1171,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 216($sp) +sw $t0, 212($sp) li $t0, 28 -sw $t0, 220($sp) +sw $t0, 216($sp) move $t0, $sp -lw $t1, 220($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 216($t0) +lw $t1, 212($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 224($sp) -lw $t0, 12($sp) +sw $a1, 220($sp) +lw $t0, 8($sp) lw $t1, 16($t0) -sw $t1, 208($sp) -lw $t0, 216($sp) +sw $t1, 204($sp) +lw $t0, 212($sp) lw $t1, 16($t0) -sw $t1, 212($sp) -lw $a0, 208($sp) -lw $t1, 212($sp) +sw $t1, 208($sp) +lw $a0, 204($sp) +lw $t1, 208($sp) seq $a0, $a0, $t1 -sw $a0, 204($sp) +sw $a0, 200($sp) li $a0, 20 li $v0, 9 syscall @@ -1220,17 +1206,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 200($sp) +sw $t0, 196($sp) move $t0, $sp -lw $t1, 204($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 228($sp) -lw $t0, 200($sp) +sw $a1, 224($sp) +lw $t0, 196($sp) lw $a0, 16($t0) bnez $a0, label_6 li $a0, 20 @@ -1246,20 +1232,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 232($sp) +sw $t0, 228($sp) li $t0, 5 -sw $t0, 236($sp) +sw $t0, 232($sp) move $t0, $sp -lw $t1, 236($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 232($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 240($sp) -lw $t0, 488($sp) -lw $t1, 232($sp) +sw $a1, 236($sp) +lw $t0, 484($sp) +lw $t1, 228($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 @@ -1274,26 +1260,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 248($sp) +sw $t0, 244($sp) li $t0, 5 -sw $t0, 252($sp) +sw $t0, 248($sp) move $t0, $sp -lw $t1, 252($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 248($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 256($sp) -lw $t0, 488($sp) -lw $t1, 248($sp) +sw $a1, 252($sp) +lw $t0, 484($sp) +lw $t1, 244($sp) sw $t1, 20($t0) -lw $t0, 488($sp) -lw $t1, 12($sp) +lw $t0, 484($sp) +lw $t1, 8($sp) sw $t1, 24($t0) -lw $t1, 12($sp) -sw $t1, 196($sp) +lw $t1, 8($sp) +sw $t1, 192($sp) b label_7 label_6: li $a0, 20 @@ -1309,20 +1295,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 268($sp) +sw $t0, 264($sp) li $t0, 7 -sw $t0, 272($sp) +sw $t0, 268($sp) move $t0, $sp -lw $t1, 272($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 268($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 276($sp) -lw $t0, 488($sp) -lw $t1, 268($sp) +sw $a1, 272($sp) +lw $t0, 484($sp) +lw $t1, 264($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 @@ -1337,29 +1323,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 284($sp) +sw $t0, 280($sp) li $t0, 4 -sw $t0, 288($sp) +sw $t0, 284($sp) move $t0, $sp -lw $t1, 288($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) +lw $t1, 280($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) jal Int_init -sw $a1, 292($sp) -lw $t0, 488($sp) -lw $t1, 284($sp) +sw $a1, 288($sp) +lw $t0, 484($sp) +lw $t1, 280($sp) sw $t1, 20($t0) -lw $t0, 488($sp) -lw $t1, 12($sp) +lw $t0, 484($sp) +lw $t1, 8($sp) sw $t1, 24($t0) -lw $t1, 12($sp) -sw $t1, 196($sp) +lw $t1, 8($sp) +sw $t1, 192($sp) label_7: -lw $t1, 196($sp) -sw $t1, 160($sp) +lw $t1, 192($sp) +sw $t1, 156($sp) b label_8 label_5: li $a0, 20 @@ -1375,20 +1361,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 304($sp) +sw $t0, 300($sp) li $t0, 5 -sw $t0, 308($sp) +sw $t0, 304($sp) move $t0, $sp -lw $t1, 308($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 304($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 312($sp) -lw $t0, 488($sp) -lw $t1, 304($sp) +sw $a1, 308($sp) +lw $t0, 484($sp) +lw $t1, 300($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 @@ -1403,29 +1389,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 320($sp) +sw $t0, 316($sp) li $t0, 5 -sw $t0, 324($sp) +sw $t0, 320($sp) move $t0, $sp -lw $t1, 324($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 320($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 328($sp) -lw $t0, 488($sp) -lw $t1, 320($sp) +sw $a1, 324($sp) +lw $t0, 484($sp) +lw $t1, 316($sp) sw $t1, 20($t0) -lw $t0, 488($sp) -lw $t1, 12($sp) +lw $t0, 484($sp) +lw $t1, 8($sp) sw $t1, 24($t0) -lw $t1, 12($sp) -sw $t1, 160($sp) +lw $t1, 8($sp) +sw $t1, 156($sp) label_8: -lw $t1, 160($sp) -sw $t1, 124($sp) +lw $t1, 156($sp) +sw $t1, 120($sp) b label_9 label_4: li $a0, 20 @@ -1441,20 +1427,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 340($sp) +sw $t0, 336($sp) li $t0, 3 -sw $t0, 344($sp) +sw $t0, 340($sp) move $t0, $sp -lw $t1, 344($t0) +lw $t1, 340($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 340($t0) +lw $t1, 336($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 348($sp) -lw $t0, 488($sp) -lw $t1, 340($sp) +sw $a1, 344($sp) +lw $t0, 484($sp) +lw $t1, 336($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 @@ -1469,29 +1455,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 356($sp) +sw $t0, 352($sp) li $t0, 7 -sw $t0, 360($sp) +sw $t0, 356($sp) move $t0, $sp -lw $t1, 360($t0) +lw $t1, 356($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 356($t0) +lw $t1, 352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 364($sp) -lw $t0, 488($sp) -lw $t1, 356($sp) +sw $a1, 360($sp) +lw $t0, 484($sp) +lw $t1, 352($sp) sw $t1, 20($t0) -lw $t0, 488($sp) -lw $t1, 12($sp) +lw $t0, 484($sp) +lw $t1, 8($sp) sw $t1, 24($t0) -lw $t1, 12($sp) -sw $t1, 124($sp) +lw $t1, 8($sp) +sw $t1, 120($sp) label_9: -lw $t1, 124($sp) -sw $t1, 88($sp) +lw $t1, 120($sp) +sw $t1, 84($sp) b label_10 label_3: li $a0, 20 @@ -1507,20 +1493,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 376($sp) +sw $t0, 372($sp) li $t0, 4 -sw $t0, 380($sp) +sw $t0, 376($sp) move $t0, $sp -lw $t1, 380($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 376($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 384($sp) -lw $t0, 488($sp) -lw $t1, 376($sp) +sw $a1, 380($sp) +lw $t0, 484($sp) +lw $t1, 372($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 @@ -1535,29 +1521,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 392($sp) +sw $t0, 388($sp) li $t0, 5 -sw $t0, 396($sp) +sw $t0, 392($sp) move $t0, $sp -lw $t1, 396($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 392($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 400($sp) -lw $t0, 488($sp) -lw $t1, 392($sp) +sw $a1, 396($sp) +lw $t0, 484($sp) +lw $t1, 388($sp) sw $t1, 20($t0) -lw $t0, 488($sp) -lw $t1, 12($sp) +lw $t0, 484($sp) +lw $t1, 8($sp) sw $t1, 24($t0) -lw $t1, 12($sp) -sw $t1, 88($sp) +lw $t1, 8($sp) +sw $t1, 84($sp) label_10: -lw $t1, 88($sp) -sw $t1, 52($sp) +lw $t1, 84($sp) +sw $t1, 48($sp) b label_11 label_2: li $a0, 20 @@ -1573,20 +1559,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 412($sp) +sw $t0, 408($sp) li $t0, 4 -sw $t0, 416($sp) +sw $t0, 412($sp) move $t0, $sp -lw $t1, 416($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 412($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 420($sp) -lw $t0, 488($sp) -lw $t1, 412($sp) +sw $a1, 416($sp) +lw $t0, 484($sp) +lw $t1, 408($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 @@ -1601,29 +1587,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 428($sp) +sw $t0, 424($sp) li $t0, 4 -sw $t0, 432($sp) +sw $t0, 428($sp) move $t0, $sp -lw $t1, 432($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 428($t0) +lw $t1, 424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 436($sp) -lw $t0, 488($sp) -lw $t1, 428($sp) +sw $a1, 432($sp) +lw $t0, 484($sp) +lw $t1, 424($sp) sw $t1, 20($t0) -lw $t0, 488($sp) -lw $t1, 12($sp) +lw $t0, 484($sp) +lw $t1, 8($sp) sw $t1, 24($t0) -lw $t1, 12($sp) -sw $t1, 52($sp) +lw $t1, 8($sp) +sw $t1, 48($sp) label_11: -lw $t1, 52($sp) -sw $t1, 16($sp) +lw $t1, 48($sp) +sw $t1, 12($sp) b label_12 label_1: li $a0, 20 @@ -1639,20 +1625,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 448($sp) +sw $t0, 444($sp) li $t0, 3 -sw $t0, 452($sp) +sw $t0, 448($sp) move $t0, $sp -lw $t1, 452($t0) +lw $t1, 448($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 448($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 456($sp) -lw $t0, 488($sp) -lw $t1, 448($sp) +sw $a1, 452($sp) +lw $t0, 484($sp) +lw $t1, 444($sp) sw $t1, 16($t0) li $a0, 20 li $v0, 9 @@ -1667,32 +1653,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 464($sp) +sw $t0, 460($sp) li $t0, 5 -sw $t0, 468($sp) +sw $t0, 464($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 464($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 472($sp) -lw $t0, 488($sp) -lw $t1, 464($sp) +sw $a1, 468($sp) +lw $t0, 484($sp) +lw $t1, 460($sp) sw $t1, 20($t0) -lw $t0, 488($sp) -lw $t1, 12($sp) +lw $t0, 484($sp) +lw $t1, 8($sp) sw $t1, 24($t0) -lw $t1, 12($sp) -sw $t1, 16($sp) +lw $t1, 8($sp) +sw $t1, 12($sp) label_12: -lw $t1, 488($sp) -sw $t1, 484($sp) -lw $a1, 484($sp) +lw $t1, 484($sp) +sw $t1, 480($sp) +lw $a1, 480($sp) lw $ra, 0($sp) -addi $sp, $sp, 496 +addi $sp, $sp, 492 jr $ra CellularAutomaton_init: addi $sp, $sp, -16 @@ -1737,31 +1723,17 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra CellularAutomaton.init: -addi $sp, $sp, -12 +addi $sp, $sp, -8 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t1, 20($sp) +lw $t0, 12($sp) +lw $t1, 16($sp) sw $t1, 28($t0) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 12($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 12($t0) @@ -1771,12 +1743,12 @@ lw $t2, 12($t1) lw $t3, 32($t2) jal $t3 sw $a1, 8($sp) -lw $a1, 16($sp) +lw $a1, 12($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 20 jr $ra CellularAutomaton.print: -addi $sp, $sp, -164 +addi $sp, $sp, -148 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -1806,7 +1778,7 @@ jal Int_init sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) -lw $t0, 168($sp) +lw $t0, 152($sp) lw $t1, 24($t0) sw $t1, 20($sp) lw $t1, 20($sp) @@ -1836,28 +1808,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 40($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 44($sp) move $t0, $sp lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1867,14 +1825,14 @@ sw $a1, 28($sp) label_13: lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 60($sp) +sw $t1, 56($sp) lw $t0, 24($sp) lw $t1, 16($t0) -sw $t1, 64($sp) -lw $a0, 60($sp) -lw $t1, 64($sp) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) slt $a0, $a0, $t1 -sw $a0, 56($sp) +sw $a0, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -1888,74 +1846,60 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 68($sp) -lw $t0, 52($sp) +sw $a1, 64($sp) +lw $t0, 48($sp) lw $a0, 16($t0) bnez $a0, label_14 b label_15 label_14: -lw $t0, 168($sp) +lw $t0, 152($sp) lw $t1, 28($t0) -sw $t1, 80($sp) -lw $t0, 168($sp) +sw $t1, 76($sp) +lw $t0, 152($sp) lw $t1, 20($t0) -sw $t1, 128($sp) +sw $t1, 116($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 76($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 76($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 88($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 72($sp) +sw $a1, 68($sp) la $t0, s_3 -sw $t0, 96($sp) +sw $t0, 88($sp) li $a0, 20 li $v0, 9 syscall @@ -1969,57 +1913,43 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 92($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 104($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 108($sp) +sw $a1, 96($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 92($sp) -lw $t0, 168($sp) +sw $a1, 84($sp) +lw $t0, 152($sp) lw $t1, 20($t0) -sw $t1, 128($sp) +sw $t1, 116($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 120($sp) -lw $t0, 128($sp) +sw $t1, 108($sp) +lw $t0, 116($sp) lw $t1, 16($t0) -sw $t1, 124($sp) -lw $a0, 120($sp) -lw $t1, 124($sp) +sw $t1, 112($sp) +lw $a0, 108($sp) +lw $t1, 112($sp) add $a0, $a0, $t1 -sw $a0, 116($sp) +sw $a0, 104($sp) li $a0, 20 li $v0, 9 syscall @@ -2033,22 +1963,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 112($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 132($sp) -lw $t1, 112($sp) +sw $a1, 120($sp) +lw $t1, 100($sp) sw $t1, 16($sp) b label_13 label_15: la $t0, s_3 -sw $t0, 144($sp) +sw $t0, 132($sp) li $a0, 20 li $v0, 9 syscall @@ -2062,51 +1992,37 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 136($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 152($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 156($sp) +sw $a1, 140($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 152($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 140($sp) -lw $t1, 168($sp) -sw $t1, 160($sp) -lw $t1, 160($sp) -sw $t1, 164($sp) -lw $a1, 164($sp) +sw $a1, 128($sp) +lw $t1, 152($sp) +sw $t1, 144($sp) +lw $t1, 144($sp) +sw $t1, 148($sp) +lw $a1, 148($sp) lw $ra, 0($sp) -addi $sp, $sp, 172 +addi $sp, $sp, 156 jr $ra CellularAutomaton.num_cells: addi $sp, $sp, -8 @@ -2313,13 +2229,13 @@ lw $ra, 0($sp) addi $sp, $sp, 104 jr $ra CellularAutomaton.north: -addi $sp, $sp, -104 +addi $sp, $sp, -100 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 108($sp) +lw $t0, 104($sp) lw $t1, 20($t0) sw $t1, 84($sp) -lw $t0, 112($sp) +lw $t0, 108($sp) lw $t1, 16($t0) sw $t1, 32($sp) lw $t0, 84($sp) @@ -2413,10 +2329,10 @@ sw $a1, 60($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_18 -lw $t0, 108($sp) +lw $t0, 104($sp) lw $t1, 20($t0) sw $t1, 84($sp) -lw $t0, 112($sp) +lw $t0, 108($sp) lw $t1, 16($t0) sw $t1, 76($sp) lw $t0, 84($sp) @@ -2449,28 +2365,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 88($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 92($sp) move $t0, $sp lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2482,7 +2384,7 @@ sw $t1, 4($sp) b label_19 label_18: la $t0, s_4 -sw $t0, 96($sp) +sw $t0, 92($sp) li $a0, 20 li $v0, 9 syscall @@ -2496,34 +2398,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 100($sp) +sw $t0, 96($sp) move $t0, $sp -lw $t1, 96($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 104($sp) -lw $t1, 100($sp) +sw $a1, 100($sp) +lw $t1, 96($sp) sw $t1, 4($sp) label_19: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 116 +addi $sp, $sp, 112 jr $ra CellularAutomaton.south: -addi $sp, $sp, -96 +addi $sp, $sp, -92 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 100($sp) +lw $t0, 96($sp) lw $t1, 24($t0) sw $t1, 24($sp) -lw $t0, 100($sp) +lw $t0, 96($sp) lw $t1, 20($t0) sw $t1, 76($sp) -lw $t0, 104($sp) +lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $t0, 76($sp) @@ -2592,10 +2494,10 @@ sw $a1, 52($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_20 -lw $t0, 100($sp) +lw $t0, 96($sp) lw $t1, 20($t0) sw $t1, 76($sp) -lw $t0, 104($sp) +lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 68($sp) lw $t0, 76($sp) @@ -2628,28 +2530,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 80($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 84($sp) move $t0, $sp lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 100($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -2661,7 +2549,7 @@ sw $t1, 4($sp) b label_21 label_20: la $t0, s_4 -sw $t0, 88($sp) +sw $t0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -2675,25 +2563,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 92($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 96($sp) -lw $t1, 92($sp) +sw $a1, 92($sp) +lw $t1, 88($sp) sw $t1, 4($sp) label_21: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 108 +addi $sp, $sp, 104 jr $ra CellularAutomaton.east: -addi $sp, $sp, -188 +addi $sp, $sp, -184 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -2721,7 +2609,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 80($sp) -lw $t0, 196($sp) +lw $t0, 192($sp) lw $t1, 16($t0) sw $t1, 64($sp) lw $t0, 72($sp) @@ -2754,7 +2642,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 84($sp) -lw $t0, 192($sp) +lw $t0, 188($sp) lw $t1, 20($t0) sw $t1, 96($sp) lw $t0, 56($sp) @@ -2791,7 +2679,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 92($sp) -lw $t0, 192($sp) +lw $t0, 188($sp) lw $t1, 20($t0) sw $t1, 96($sp) lw $t0, 40($sp) @@ -2852,7 +2740,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 128($sp) -lw $t0, 196($sp) +lw $t0, 192($sp) lw $t1, 16($t0) sw $t1, 112($sp) lw $t0, 120($sp) @@ -2946,7 +2834,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 168($sp) -lw $t0, 196($sp) +lw $t0, 192($sp) lw $t1, 16($t0) sw $t1, 152($sp) lw $t0, 160($sp) @@ -2979,28 +2867,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 172($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 176($sp) move $t0, $sp lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 188($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3012,7 +2886,7 @@ sw $t1, 4($sp) b label_23 label_22: la $t0, s_4 -sw $t0, 180($sp) +sw $t0, 176($sp) li $a0, 20 li $v0, 9 syscall @@ -3026,25 +2900,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 184($sp) +sw $t0, 180($sp) move $t0, $sp -lw $t1, 180($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 188($sp) -lw $t1, 184($sp) +sw $a1, 184($sp) +lw $t1, 180($sp) sw $t1, 4($sp) label_23: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 200 +addi $sp, $sp, 196 jr $ra CellularAutomaton.west: -addi $sp, $sp, -172 +addi $sp, $sp, -168 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -3072,7 +2946,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 32($sp) -lw $t0, 180($sp) +lw $t0, 176($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 24($sp) @@ -3108,10 +2982,10 @@ sw $a1, 36($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_24 -lw $t0, 176($sp) +lw $t0, 172($sp) lw $t1, 20($t0) sw $t1, 100($sp) -lw $t0, 180($sp) +lw $t0, 176($sp) lw $t1, 16($t0) sw $t1, 84($sp) lw $t0, 100($sp) @@ -3145,7 +3019,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 96($sp) -lw $t0, 176($sp) +lw $t0, 172($sp) lw $t1, 20($t0) sw $t1, 100($sp) lw $t0, 76($sp) @@ -3184,7 +3058,7 @@ sw $a1, 104($sp) lw $t0, 60($sp) lw $t1, 16($t0) sw $t1, 52($sp) -lw $t0, 180($sp) +lw $t0, 176($sp) lw $t1, 16($t0) sw $t1, 56($sp) lw $a0, 52($sp) @@ -3242,7 +3116,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -lw $t0, 180($sp) +lw $t0, 176($sp) lw $t1, 16($t0) sw $t1, 124($sp) lw $t0, 132($sp) @@ -3275,28 +3149,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 144($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 148($sp) move $t0, $sp lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 172($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3308,7 +3168,7 @@ sw $t1, 40($sp) b label_26 label_25: la $t0, s_4 -sw $t0, 152($sp) +sw $t0, 148($sp) li $a0, 20 li $v0, 9 syscall @@ -3322,17 +3182,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 156($sp) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 160($sp) -lw $t1, 156($sp) +sw $a1, 156($sp) +lw $t1, 152($sp) sw $t1, 40($sp) label_26: lw $t1, 40($sp) @@ -3340,7 +3200,7 @@ sw $t1, 4($sp) b label_27 label_24: la $t0, s_4 -sw $t0, 164($sp) +sw $t0, 160($sp) li $a0, 20 li $v0, 9 syscall @@ -3354,31 +3214,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 168($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 172($sp) -lw $t1, 168($sp) +sw $a1, 168($sp) +lw $t1, 164($sp) sw $t1, 4($sp) label_27: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 184 +addi $sp, $sp, 180 jr $ra CellularAutomaton.northwest: -addi $sp, $sp, -196 +addi $sp, $sp, -192 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 200($sp) +lw $t0, 196($sp) lw $t1, 20($t0) sw $t1, 124($sp) -lw $t0, 204($sp) +lw $t0, 200($sp) lw $t1, 16($t0) sw $t1, 32($sp) lw $t0, 124($sp) @@ -3472,10 +3332,10 @@ sw $a1, 60($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_28 -lw $t0, 200($sp) +lw $t0, 196($sp) lw $t1, 20($t0) sw $t1, 124($sp) -lw $t0, 204($sp) +lw $t0, 200($sp) lw $t1, 16($t0) sw $t1, 108($sp) lw $t0, 124($sp) @@ -3509,7 +3369,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 120($sp) -lw $t0, 200($sp) +lw $t0, 196($sp) lw $t1, 20($t0) sw $t1, 124($sp) lw $t0, 100($sp) @@ -3548,7 +3408,7 @@ sw $a1, 128($sp) lw $t0, 84($sp) lw $t1, 16($t0) sw $t1, 76($sp) -lw $t0, 204($sp) +lw $t0, 200($sp) lw $t1, 16($t0) sw $t1, 80($sp) lw $a0, 76($sp) @@ -3606,7 +3466,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 164($sp) -lw $t0, 204($sp) +lw $t0, 200($sp) lw $t1, 16($t0) sw $t1, 148($sp) lw $t0, 156($sp) @@ -3639,28 +3499,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 168($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 172($sp) move $t0, $sp lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 200($t0) +lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 196($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -3672,7 +3518,7 @@ sw $t1, 64($sp) b label_30 label_29: la $t0, s_4 -sw $t0, 176($sp) +sw $t0, 172($sp) li $a0, 20 li $v0, 9 syscall @@ -3686,17 +3532,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 180($sp) +sw $t0, 176($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 184($sp) -lw $t1, 180($sp) +sw $a1, 180($sp) +lw $t1, 176($sp) sw $t1, 64($sp) label_30: lw $t1, 64($sp) @@ -3704,7 +3550,7 @@ sw $t1, 4($sp) b label_31 label_28: la $t0, s_4 -sw $t0, 188($sp) +sw $t0, 184($sp) li $a0, 20 li $v0, 9 syscall @@ -3718,31 +3564,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 192($sp) +sw $t0, 188($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 196($sp) -lw $t1, 192($sp) +sw $a1, 192($sp) +lw $t1, 188($sp) sw $t1, 4($sp) label_31: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 208 +addi $sp, $sp, 204 jr $ra CellularAutomaton.northeast: -addi $sp, $sp, -260 +addi $sp, $sp, -256 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 264($sp) +lw $t0, 260($sp) lw $t1, 20($t0) sw $t1, 156($sp) -lw $t0, 268($sp) +lw $t0, 264($sp) lw $t1, 16($t0) sw $t1, 32($sp) lw $t0, 156($sp) @@ -3861,7 +3707,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 140($sp) -lw $t0, 268($sp) +lw $t0, 264($sp) lw $t1, 16($t0) sw $t1, 124($sp) lw $t0, 132($sp) @@ -3894,7 +3740,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 144($sp) -lw $t0, 264($sp) +lw $t0, 260($sp) lw $t1, 20($t0) sw $t1, 156($sp) lw $t0, 116($sp) @@ -3931,7 +3777,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 152($sp) -lw $t0, 264($sp) +lw $t0, 260($sp) lw $t1, 20($t0) sw $t1, 156($sp) lw $t0, 100($sp) @@ -3992,7 +3838,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 188($sp) -lw $t0, 268($sp) +lw $t0, 264($sp) lw $t1, 16($t0) sw $t1, 172($sp) lw $t0, 180($sp) @@ -4086,7 +3932,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 228($sp) -lw $t0, 268($sp) +lw $t0, 264($sp) lw $t1, 16($t0) sw $t1, 212($sp) lw $t0, 220($sp) @@ -4119,28 +3965,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 232($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 236($sp) move $t0, $sp lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 264($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 260($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4152,7 +3984,7 @@ sw $t1, 64($sp) b label_34 label_33: la $t0, s_4 -sw $t0, 240($sp) +sw $t0, 236($sp) li $a0, 20 li $v0, 9 syscall @@ -4166,17 +3998,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 244($sp) +sw $t0, 240($sp) move $t0, $sp -lw $t1, 240($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 244($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 248($sp) -lw $t1, 244($sp) +sw $a1, 244($sp) +lw $t1, 240($sp) sw $t1, 64($sp) label_34: lw $t1, 64($sp) @@ -4184,7 +4016,7 @@ sw $t1, 4($sp) b label_35 label_32: la $t0, s_4 -sw $t0, 252($sp) +sw $t0, 248($sp) li $a0, 20 li $v0, 9 syscall @@ -4198,34 +4030,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 256($sp) +sw $t0, 252($sp) move $t0, $sp -lw $t1, 252($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 260($sp) -lw $t1, 256($sp) +sw $a1, 256($sp) +lw $t1, 252($sp) sw $t1, 4($sp) label_35: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 272 +addi $sp, $sp, 268 jr $ra CellularAutomaton.southeast: -addi $sp, $sp, -252 +addi $sp, $sp, -248 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 256($sp) +lw $t0, 252($sp) lw $t1, 24($t0) sw $t1, 24($sp) -lw $t0, 256($sp) +lw $t0, 252($sp) lw $t1, 20($t0) sw $t1, 148($sp) -lw $t0, 260($sp) +lw $t0, 256($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $t0, 148($sp) @@ -4319,7 +4151,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 132($sp) -lw $t0, 260($sp) +lw $t0, 256($sp) lw $t1, 16($t0) sw $t1, 116($sp) lw $t0, 124($sp) @@ -4352,7 +4184,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 136($sp) -lw $t0, 256($sp) +lw $t0, 252($sp) lw $t1, 20($t0) sw $t1, 148($sp) lw $t0, 108($sp) @@ -4389,7 +4221,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 144($sp) -lw $t0, 256($sp) +lw $t0, 252($sp) lw $t1, 20($t0) sw $t1, 148($sp) lw $t0, 92($sp) @@ -4450,7 +4282,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 180($sp) -lw $t0, 260($sp) +lw $t0, 256($sp) lw $t1, 16($t0) sw $t1, 164($sp) lw $t0, 172($sp) @@ -4544,7 +4376,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 220($sp) -lw $t0, 260($sp) +lw $t0, 256($sp) lw $t1, 16($t0) sw $t1, 204($sp) lw $t0, 212($sp) @@ -4577,28 +4409,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 224($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 228($sp) move $t0, $sp lw $t1, 196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 228($t0) +lw $t1, 252($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4610,7 +4428,7 @@ sw $t1, 56($sp) b label_38 label_37: la $t0, s_4 -sw $t0, 232($sp) +sw $t0, 228($sp) li $a0, 20 li $v0, 9 syscall @@ -4624,17 +4442,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 236($sp) +sw $t0, 232($sp) move $t0, $sp -lw $t1, 232($t0) +lw $t1, 228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 236($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 240($sp) -lw $t1, 236($sp) +sw $a1, 236($sp) +lw $t1, 232($sp) sw $t1, 56($sp) label_38: lw $t1, 56($sp) @@ -4642,7 +4460,7 @@ sw $t1, 4($sp) b label_39 label_36: la $t0, s_4 -sw $t0, 244($sp) +sw $t0, 240($sp) li $a0, 20 li $v0, 9 syscall @@ -4656,34 +4474,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 248($sp) +sw $t0, 244($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 248($t0) +lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 252($sp) -lw $t1, 248($sp) +sw $a1, 248($sp) +lw $t1, 244($sp) sw $t1, 4($sp) label_39: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 264 +addi $sp, $sp, 260 jr $ra CellularAutomaton.southwest: -addi $sp, $sp, -188 +addi $sp, $sp, -184 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 192($sp) +lw $t0, 188($sp) lw $t1, 24($t0) sw $t1, 24($sp) -lw $t0, 192($sp) +lw $t0, 188($sp) lw $t1, 20($t0) sw $t1, 116($sp) -lw $t0, 196($sp) +lw $t0, 192($sp) lw $t1, 16($t0) sw $t1, 36($sp) lw $t0, 116($sp) @@ -4752,10 +4570,10 @@ sw $a1, 52($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_40 -lw $t0, 192($sp) +lw $t0, 188($sp) lw $t1, 20($t0) sw $t1, 116($sp) -lw $t0, 196($sp) +lw $t0, 192($sp) lw $t1, 16($t0) sw $t1, 100($sp) lw $t0, 116($sp) @@ -4789,7 +4607,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 112($sp) -lw $t0, 192($sp) +lw $t0, 188($sp) lw $t1, 20($t0) sw $t1, 116($sp) lw $t0, 92($sp) @@ -4828,7 +4646,7 @@ sw $a1, 120($sp) lw $t0, 76($sp) lw $t1, 16($t0) sw $t1, 68($sp) -lw $t0, 196($sp) +lw $t0, 192($sp) lw $t1, 16($t0) sw $t1, 72($sp) lw $a0, 68($sp) @@ -4886,7 +4704,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 156($sp) -lw $t0, 196($sp) +lw $t0, 192($sp) lw $t1, 16($t0) sw $t1, 140($sp) lw $t0, 148($sp) @@ -4919,28 +4737,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 160($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 164($sp) move $t0, $sp lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 192($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 188($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -4952,7 +4756,7 @@ sw $t1, 56($sp) b label_42 label_41: la $t0, s_4 -sw $t0, 168($sp) +sw $t0, 164($sp) li $a0, 20 li $v0, 9 syscall @@ -4966,17 +4770,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 172($sp) +sw $t0, 168($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 176($sp) -lw $t1, 172($sp) +sw $a1, 172($sp) +lw $t1, 168($sp) sw $t1, 56($sp) label_42: lw $t1, 56($sp) @@ -4984,7 +4788,7 @@ sw $t1, 4($sp) b label_43 label_40: la $t0, s_4 -sw $t0, 180($sp) +sw $t0, 176($sp) li $a0, 20 li $v0, 9 syscall @@ -4998,49 +4802,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 184($sp) +sw $t0, 180($sp) move $t0, $sp -lw $t1, 180($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 188($sp) -lw $t1, 184($sp) +sw $a1, 184($sp) +lw $t1, 180($sp) sw $t1, 4($sp) label_43: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 200 +addi $sp, $sp, 196 jr $ra CellularAutomaton.neighbors: -addi $sp, $sp, -684 +addi $sp, $sp, -652 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 140($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 688($t0) +lw $t1, 656($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 656($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -5048,7 +4838,7 @@ lw $t3, 52($t2) jal $t3 sw $a1, 136($sp) la $t0, s_5 -sw $t0, 144($sp) +sw $t0, 140($sp) li $a0, 20 li $v0, 9 syscall @@ -5062,18 +4852,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 152($sp) +sw $a1, 148($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 136($t0) @@ -5103,7 +4893,7 @@ lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 156($sp) +sw $a1, 152($sp) lw $t0, 120($sp) lw $a0, 16($t0) bnez $a0, label_44 @@ -5120,19 +4910,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 160($sp) +sw $t0, 156($sp) li $t0, 0 -sw $t0, 164($sp) +sw $t0, 160($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 160($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 168($sp) -lw $t1, 160($sp) +sw $a1, 164($sp) +lw $t1, 156($sp) sw $t1, 116($sp) b label_45 label_44: @@ -5149,51 +4939,37 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 172($sp) +sw $t0, 168($sp) li $t0, 1 -sw $t0, 176($sp) +sw $t0, 172($sp) move $t0, $sp -lw $t1, 176($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 180($sp) -lw $t1, 172($sp) +sw $a1, 176($sp) +lw $t1, 168($sp) sw $t1, 116($sp) label_45: -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 208($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 688($t0) +lw $t1, 656($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 208($t0) +lw $t1, 656($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 56($t2) jal $t3 -sw $a1, 204($sp) +sw $a1, 200($sp) la $t0, s_5 -sw $t0, 212($sp) +sw $t0, 204($sp) li $a0, 20 li $v0, 9 syscall @@ -5207,25 +4983,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 216($sp) +sw $t0, 208($sp) move $t0, $sp -lw $t1, 212($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 216($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 220($sp) +sw $a1, 212($sp) move $t0, $sp -lw $t1, 216($t0) +lw $t1, 208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 204($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 192($sp) +sw $a1, 188($sp) li $a0, 20 li $v0, 9 syscall @@ -5239,17 +5015,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 188($sp) +sw $t0, 184($sp) move $t0, $sp -lw $t1, 192($t0) +lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 188($t0) +lw $t1, 184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 224($sp) -lw $t0, 188($sp) +sw $a1, 216($sp) +lw $t0, 184($sp) lw $a0, 16($t0) bnez $a0, label_46 li $a0, 20 @@ -5265,20 +5041,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 228($sp) +sw $t0, 220($sp) li $t0, 0 -sw $t0, 232($sp) +sw $t0, 224($sp) move $t0, $sp -lw $t1, 232($t0) +lw $t1, 224($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 228($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 236($sp) -lw $t1, 228($sp) -sw $t1, 184($sp) +sw $a1, 228($sp) +lw $t1, 220($sp) +sw $t1, 180($sp) b label_47 label_46: li $a0, 20 @@ -5294,25 +5070,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 232($sp) li $t0, 1 -sw $t0, 244($sp) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 248($sp) -lw $t1, 240($sp) -sw $t1, 184($sp) +sw $a1, 240($sp) +lw $t1, 232($sp) +sw $t1, 180($sp) label_47: lw $t0, 116($sp) lw $t1, 16($t0) sw $t1, 108($sp) -lw $t0, 184($sp) +lw $t0, 180($sp) lw $t1, 16($t0) sw $t1, 112($sp) lw $a0, 108($sp) @@ -5341,37 +5117,23 @@ lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 252($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 280($sp) +sw $a1, 244($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 688($t0) +lw $t1, 656($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 280($t0) +lw $t1, 656($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 60($t2) jal $t3 -sw $a1, 276($sp) +sw $a1, 268($sp) la $t0, s_5 -sw $t0, 284($sp) +sw $t0, 272($sp) li $a0, 20 li $v0, 9 syscall @@ -5385,25 +5147,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 276($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 292($sp) +sw $a1, 280($sp) move $t0, $sp -lw $t1, 288($t0) +lw $t1, 276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 276($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 264($sp) +sw $a1, 256($sp) li $a0, 20 li $v0, 9 syscall @@ -5417,17 +5179,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 260($sp) +sw $t0, 252($sp) move $t0, $sp -lw $t1, 264($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 296($sp) -lw $t0, 260($sp) +sw $a1, 284($sp) +lw $t0, 252($sp) lw $a0, 16($t0) bnez $a0, label_48 li $a0, 20 @@ -5443,20 +5205,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 300($sp) +sw $t0, 288($sp) li $t0, 0 -sw $t0, 304($sp) +sw $t0, 292($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 292($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 300($t0) +lw $t1, 288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 308($sp) -lw $t1, 300($sp) -sw $t1, 256($sp) +sw $a1, 296($sp) +lw $t1, 288($sp) +sw $t1, 248($sp) b label_49 label_48: li $a0, 20 @@ -5472,25 +5234,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 312($sp) +sw $t0, 300($sp) li $t0, 1 -sw $t0, 316($sp) +sw $t0, 304($sp) move $t0, $sp -lw $t1, 316($t0) +lw $t1, 304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 312($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 320($sp) -lw $t1, 312($sp) -sw $t1, 256($sp) +sw $a1, 308($sp) +lw $t1, 300($sp) +sw $t1, 248($sp) label_49: lw $t0, 100($sp) lw $t1, 16($t0) sw $t1, 92($sp) -lw $t0, 256($sp) +lw $t0, 248($sp) lw $t1, 16($t0) sw $t1, 96($sp) lw $a0, 92($sp) @@ -5519,37 +5281,23 @@ lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 324($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 352($sp) +sw $a1, 312($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 688($t0) +lw $t1, 656($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 352($t0) +lw $t1, 656($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 64($t2) jal $t3 -sw $a1, 348($sp) +sw $a1, 336($sp) la $t0, s_5 -sw $t0, 356($sp) +sw $t0, 340($sp) li $a0, 20 li $v0, 9 syscall @@ -5563,25 +5311,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 360($sp) +sw $t0, 344($sp) move $t0, $sp -lw $t1, 356($t0) +lw $t1, 340($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 360($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 364($sp) +sw $a1, 348($sp) move $t0, $sp -lw $t1, 360($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 348($t0) +lw $t1, 336($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 336($sp) +sw $a1, 324($sp) li $a0, 20 li $v0, 9 syscall @@ -5595,17 +5343,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 332($sp) +sw $t0, 320($sp) move $t0, $sp -lw $t1, 336($t0) +lw $t1, 324($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 332($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 368($sp) -lw $t0, 332($sp) +sw $a1, 352($sp) +lw $t0, 320($sp) lw $a0, 16($t0) bnez $a0, label_50 li $a0, 20 @@ -5621,20 +5369,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 372($sp) +sw $t0, 356($sp) li $t0, 0 -sw $t0, 376($sp) +sw $t0, 360($sp) move $t0, $sp -lw $t1, 376($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 372($t0) +lw $t1, 356($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 380($sp) -lw $t1, 372($sp) -sw $t1, 328($sp) +sw $a1, 364($sp) +lw $t1, 356($sp) +sw $t1, 316($sp) b label_51 label_50: li $a0, 20 @@ -5650,25 +5398,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 384($sp) +sw $t0, 368($sp) li $t0, 1 -sw $t0, 388($sp) +sw $t0, 372($sp) move $t0, $sp -lw $t1, 388($t0) +lw $t1, 372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 384($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 392($sp) -lw $t1, 384($sp) -sw $t1, 328($sp) +sw $a1, 376($sp) +lw $t1, 368($sp) +sw $t1, 316($sp) label_51: lw $t0, 84($sp) lw $t1, 16($t0) sw $t1, 76($sp) -lw $t0, 328($sp) +lw $t0, 316($sp) lw $t1, 16($t0) sw $t1, 80($sp) lw $a0, 76($sp) @@ -5697,37 +5445,23 @@ lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 396($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 424($sp) +sw $a1, 380($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 688($t0) +lw $t1, 656($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 424($t0) +lw $t1, 656($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 72($t2) jal $t3 -sw $a1, 420($sp) +sw $a1, 404($sp) la $t0, s_5 -sw $t0, 428($sp) +sw $t0, 408($sp) li $a0, 20 li $v0, 9 syscall @@ -5741,25 +5475,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 432($sp) +sw $t0, 412($sp) move $t0, $sp -lw $t1, 428($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 432($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 436($sp) +sw $a1, 416($sp) move $t0, $sp -lw $t1, 432($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 420($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 408($sp) +sw $a1, 392($sp) li $a0, 20 li $v0, 9 syscall @@ -5773,17 +5507,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 404($sp) +sw $t0, 388($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 404($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 440($sp) -lw $t0, 404($sp) +sw $a1, 420($sp) +lw $t0, 388($sp) lw $a0, 16($t0) bnez $a0, label_52 li $a0, 20 @@ -5799,20 +5533,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 444($sp) +sw $t0, 424($sp) li $t0, 0 -sw $t0, 448($sp) +sw $t0, 428($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 428($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 444($t0) +lw $t1, 424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 452($sp) -lw $t1, 444($sp) -sw $t1, 400($sp) +sw $a1, 432($sp) +lw $t1, 424($sp) +sw $t1, 384($sp) b label_53 label_52: li $a0, 20 @@ -5828,25 +5562,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 456($sp) +sw $t0, 436($sp) li $t0, 1 -sw $t0, 460($sp) +sw $t0, 440($sp) move $t0, $sp -lw $t1, 460($t0) +lw $t1, 440($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 464($sp) -lw $t1, 456($sp) -sw $t1, 400($sp) +sw $a1, 444($sp) +lw $t1, 436($sp) +sw $t1, 384($sp) label_53: lw $t0, 68($sp) lw $t1, 16($t0) sw $t1, 60($sp) -lw $t0, 400($sp) +lw $t0, 384($sp) lw $t1, 16($t0) sw $t1, 64($sp) lw $a0, 60($sp) @@ -5875,37 +5609,23 @@ lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 468($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 496($sp) +sw $a1, 448($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 688($t0) +lw $t1, 656($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 496($t0) +lw $t1, 656($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 68($t2) jal $t3 -sw $a1, 492($sp) +sw $a1, 472($sp) la $t0, s_5 -sw $t0, 500($sp) +sw $t0, 476($sp) li $a0, 20 li $v0, 9 syscall @@ -5919,25 +5639,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 504($sp) +sw $t0, 480($sp) move $t0, $sp -lw $t1, 500($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 504($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 508($sp) +sw $a1, 484($sp) move $t0, $sp -lw $t1, 504($t0) +lw $t1, 480($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 480($sp) +sw $a1, 460($sp) li $a0, 20 li $v0, 9 syscall @@ -5951,17 +5671,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 476($sp) +sw $t0, 456($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 460($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 476($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 512($sp) -lw $t0, 476($sp) +sw $a1, 488($sp) +lw $t0, 456($sp) lw $a0, 16($t0) bnez $a0, label_54 li $a0, 20 @@ -5977,20 +5697,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 516($sp) +sw $t0, 492($sp) li $t0, 0 -sw $t0, 520($sp) +sw $t0, 496($sp) move $t0, $sp -lw $t1, 520($t0) +lw $t1, 496($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 516($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 524($sp) -lw $t1, 516($sp) -sw $t1, 472($sp) +sw $a1, 500($sp) +lw $t1, 492($sp) +sw $t1, 452($sp) b label_55 label_54: li $a0, 20 @@ -6006,25 +5726,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 528($sp) +sw $t0, 504($sp) li $t0, 1 -sw $t0, 532($sp) +sw $t0, 508($sp) move $t0, $sp -lw $t1, 532($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 528($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 536($sp) -lw $t1, 528($sp) -sw $t1, 472($sp) +sw $a1, 512($sp) +lw $t1, 504($sp) +sw $t1, 452($sp) label_55: lw $t0, 52($sp) lw $t1, 16($t0) sw $t1, 44($sp) -lw $t0, 472($sp) +lw $t0, 452($sp) lw $t1, 16($t0) sw $t1, 48($sp) lw $a0, 44($sp) @@ -6053,37 +5773,23 @@ lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 540($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 568($sp) +sw $a1, 516($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 688($t0) +lw $t1, 656($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 568($t0) +lw $t1, 656($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 76($t2) jal $t3 -sw $a1, 564($sp) +sw $a1, 540($sp) la $t0, s_5 -sw $t0, 572($sp) +sw $t0, 544($sp) li $a0, 20 li $v0, 9 syscall @@ -6097,25 +5803,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 576($sp) +sw $t0, 548($sp) move $t0, $sp -lw $t1, 572($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 576($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 580($sp) +sw $a1, 552($sp) move $t0, $sp -lw $t1, 576($t0) +lw $t1, 548($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 564($t0) +lw $t1, 540($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 552($sp) +sw $a1, 528($sp) li $a0, 20 li $v0, 9 syscall @@ -6129,17 +5835,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 548($sp) +sw $t0, 524($sp) move $t0, $sp -lw $t1, 552($t0) +lw $t1, 528($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 524($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 584($sp) -lw $t0, 548($sp) +sw $a1, 556($sp) +lw $t0, 524($sp) lw $a0, 16($t0) bnez $a0, label_56 li $a0, 20 @@ -6155,20 +5861,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 588($sp) +sw $t0, 560($sp) li $t0, 0 -sw $t0, 592($sp) +sw $t0, 564($sp) move $t0, $sp -lw $t1, 592($t0) +lw $t1, 564($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 588($t0) +lw $t1, 560($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 596($sp) -lw $t1, 588($sp) -sw $t1, 544($sp) +sw $a1, 568($sp) +lw $t1, 560($sp) +sw $t1, 520($sp) b label_57 label_56: li $a0, 20 @@ -6184,25 +5890,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 600($sp) +sw $t0, 572($sp) li $t0, 1 -sw $t0, 604($sp) +sw $t0, 576($sp) move $t0, $sp -lw $t1, 604($t0) +lw $t1, 576($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 600($t0) +lw $t1, 572($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 608($sp) -lw $t1, 600($sp) -sw $t1, 544($sp) +sw $a1, 580($sp) +lw $t1, 572($sp) +sw $t1, 520($sp) label_57: lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 28($sp) -lw $t0, 544($sp) +lw $t0, 520($sp) lw $t1, 16($t0) sw $t1, 32($sp) lw $a0, 28($sp) @@ -6231,37 +5937,23 @@ lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 612($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 640($sp) +sw $a1, 584($sp) move $t0, $sp -lw $t1, 692($t0) +lw $t1, 660($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 688($t0) +lw $t1, 656($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 640($t0) +lw $t1, 656($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 80($t2) jal $t3 -sw $a1, 636($sp) +sw $a1, 608($sp) la $t0, s_5 -sw $t0, 644($sp) +sw $t0, 612($sp) li $a0, 20 li $v0, 9 syscall @@ -6275,25 +5967,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 648($sp) +sw $t0, 616($sp) move $t0, $sp -lw $t1, 644($t0) +lw $t1, 612($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 648($t0) +lw $t1, 616($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 652($sp) +sw $a1, 620($sp) move $t0, $sp -lw $t1, 648($t0) +lw $t1, 616($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 636($t0) +lw $t1, 608($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 624($sp) +sw $a1, 596($sp) li $a0, 20 li $v0, 9 syscall @@ -6307,17 +5999,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 620($sp) +sw $t0, 592($sp) move $t0, $sp -lw $t1, 624($t0) +lw $t1, 596($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 620($t0) +lw $t1, 592($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 656($sp) -lw $t0, 620($sp) +sw $a1, 624($sp) +lw $t0, 592($sp) lw $a0, 16($t0) bnez $a0, label_58 li $a0, 20 @@ -6333,20 +6025,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 660($sp) +sw $t0, 628($sp) li $t0, 0 -sw $t0, 664($sp) +sw $t0, 632($sp) move $t0, $sp -lw $t1, 664($t0) +lw $t1, 632($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 660($t0) +lw $t1, 628($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 668($sp) -lw $t1, 660($sp) -sw $t1, 616($sp) +sw $a1, 636($sp) +lw $t1, 628($sp) +sw $t1, 588($sp) b label_59 label_58: li $a0, 20 @@ -6362,25 +6054,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 672($sp) +sw $t0, 640($sp) li $t0, 1 -sw $t0, 676($sp) +sw $t0, 644($sp) move $t0, $sp -lw $t1, 676($t0) +lw $t1, 644($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 672($t0) +lw $t1, 640($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 680($sp) -lw $t1, 672($sp) -sw $t1, 616($sp) +sw $a1, 648($sp) +lw $t1, 640($sp) +sw $t1, 588($sp) label_59: lw $t0, 20($sp) lw $t1, 16($t0) sw $t1, 12($sp) -lw $t0, 616($sp) +lw $t0, 588($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $a0, 12($sp) @@ -6409,37 +6101,23 @@ lw $t1, 4($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 684($sp) +sw $a1, 652($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 696 +addi $sp, $sp, 664 jr $ra CellularAutomaton.cell_at_next_evolution: -addi $sp, $sp, -180 +addi $sp, $sp, -168 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 28($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 172($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -6459,22 +6137,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 28($sp) li $t0, 3 -sw $t0, 36($sp) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 40($sp) +sw $a1, 36($sp) lw $t0, 24($sp) lw $t1, 16($t0) sw $t1, 16($sp) -lw $t0, 32($sp) +lw $t0, 28($sp) lw $t1, 16($t0) sw $t1, 20($sp) lw $a0, 16($sp) @@ -6503,38 +6181,24 @@ lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 44($sp) +sw $a1, 40($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_60 -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 72($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 172($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 84($t2) jal $t3 -sw $a1, 68($sp) +sw $a1, 64($sp) li $a0, 20 li $v0, 9 syscall @@ -6548,28 +6212,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 76($sp) +sw $t0, 68($sp) li $t0, 2 -sw $t0, 80($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 84($sp) +sw $a1, 76($sp) +lw $t0, 64($sp) +lw $t1, 16($t0) +sw $t1, 56($sp) lw $t0, 68($sp) lw $t1, 16($t0) sw $t1, 60($sp) -lw $t0, 76($sp) -lw $t1, 16($t0) -sw $t1, 64($sp) -lw $a0, 60($sp) -lw $t1, 64($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) seq $a0, $a0, $t1 -sw $a0, 56($sp) +sw $a0, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -6583,21 +6247,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 88($sp) -lw $t0, 52($sp) +sw $a1, 80($sp) +lw $t0, 48($sp) lw $a0, 16($t0) bnez $a0, label_61 la $t0, s_6 -sw $t0, 92($sp) +sw $t0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -6611,50 +6275,36 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 100($sp) -lw $t1, 96($sp) -sw $t1, 48($sp) +sw $a1, 92($sp) +lw $t1, 88($sp) +sw $t1, 44($sp) b label_62 label_61: -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 128($sp) move $t0, $sp -lw $t1, 188($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 172($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 124($sp) +sw $a1, 116($sp) la $t0, s_5 -sw $t0, 132($sp) +sw $t0, 120($sp) li $a0, 20 li $v0, 9 syscall @@ -6668,25 +6318,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 136($sp) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 140($sp) +sw $a1, 128($sp) move $t0, $sp -lw $t1, 136($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 112($sp) +sw $a1, 104($sp) li $a0, 20 li $v0, 9 syscall @@ -6700,21 +6350,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 108($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 144($sp) -lw $t0, 108($sp) +sw $a1, 132($sp) +lw $t0, 100($sp) lw $a0, 16($t0) bnez $a0, label_63 la $t0, s_6 -sw $t0, 148($sp) +sw $t0, 136($sp) li $a0, 20 li $v0, 9 syscall @@ -6728,22 +6378,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 152($sp) +sw $t0, 140($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 156($sp) -lw $t1, 152($sp) -sw $t1, 104($sp) +sw $a1, 144($sp) +lw $t1, 140($sp) +sw $t1, 96($sp) b label_64 label_63: la $t0, s_5 -sw $t0, 160($sp) +sw $t0, 148($sp) li $a0, 20 li $v0, 9 syscall @@ -6757,28 +6407,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 164($sp) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 160($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 168($sp) -lw $t1, 164($sp) -sw $t1, 104($sp) +sw $a1, 156($sp) +lw $t1, 152($sp) +sw $t1, 96($sp) label_64: -lw $t1, 104($sp) -sw $t1, 48($sp) +lw $t1, 96($sp) +sw $t1, 44($sp) label_62: -lw $t1, 48($sp) +lw $t1, 44($sp) sw $t1, 4($sp) b label_65 label_60: la $t0, s_5 -sw $t0, 172($sp) +sw $t0, 160($sp) li $a0, 20 li $v0, 9 syscall @@ -6792,25 +6442,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 176($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 160($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 180($sp) -lw $t1, 176($sp) +sw $a1, 168($sp) +lw $t1, 164($sp) sw $t1, 4($sp) label_65: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 192 +addi $sp, $sp, 180 jr $ra CellularAutomaton.evolve: -addi $sp, $sp, -136 +addi $sp, $sp, -128 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -6840,25 +6490,11 @@ jal Int_init sw $a1, 12($sp) lw $t1, 4($sp) sw $t1, 16($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 24($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -6866,7 +6502,7 @@ lw $t3, 44($t2) jal $t3 sw $a1, 20($sp) lw $t1, 20($sp) -sw $t1, 28($sp) +sw $t1, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -6880,31 +6516,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 28($sp) la $t0, empty_str -sw $t0, 36($sp) +sw $t0, 32($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 40($sp) -lw $t1, 32($sp) -sw $t1, 44($sp) +sw $a1, 36($sp) +lw $t1, 28($sp) +sw $t1, 40($sp) label_66: lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 60($sp) -lw $t0, 28($sp) +sw $t1, 56($sp) +lw $t0, 24($sp) lw $t1, 16($t0) -sw $t1, 64($sp) -lw $a0, 60($sp) -lw $t1, 64($sp) +sw $t1, 60($sp) +lw $a0, 56($sp) +lw $t1, 60($sp) slt $a0, $a0, $t1 -sw $a0, 56($sp) +sw $a0, 52($sp) li $a0, 20 li $v0, 9 syscall @@ -6918,65 +6554,51 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 52($sp) +sw $t0, 48($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 68($sp) -lw $t0, 52($sp) +sw $a1, 64($sp) +lw $t0, 48($sp) lw $a0, 16($t0) bnez $a0, label_67 b label_68 label_67: -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 80($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 132($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 88($t2) jal $t3 -sw $a1, 76($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 72($sp) -lw $t1, 72($sp) -sw $t1, 44($sp) +sw $a1, 68($sp) +lw $t1, 68($sp) +sw $t1, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -6990,28 +6612,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 96($sp) li $t0, 1 -sw $t0, 108($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 112($sp) +sw $a1, 104($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 96($sp) -lw $t0, 104($sp) +sw $t1, 88($sp) +lw $t0, 96($sp) lw $t1, 16($t0) -sw $t1, 100($sp) -lw $a0, 96($sp) -lw $t1, 100($sp) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) add $a0, $a0, $t1 -sw $a0, 92($sp) +sw $a0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -7025,35 +6647,35 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 116($sp) -lw $t1, 88($sp) +sw $a1, 108($sp) +lw $t1, 80($sp) sw $t1, 16($sp) b label_66 label_68: -lw $t0, 140($sp) -lw $t1, 44($sp) +lw $t0, 132($sp) +lw $t1, 40($sp) sw $t1, 28($t0) -lw $t1, 140($sp) -sw $t1, 128($sp) -lw $t1, 128($sp) -sw $t1, 132($sp) lw $t1, 132($sp) -sw $t1, 136($sp) -lw $a1, 136($sp) +sw $t1, 120($sp) +lw $t1, 120($sp) +sw $t1, 124($sp) +lw $t1, 124($sp) +sw $t1, 128($sp) +lw $a1, 128($sp) lw $ra, 0($sp) -addi $sp, $sp, 144 +addi $sp, $sp, 136 jr $ra CellularAutomaton.option: -addi $sp, $sp, -1532 +addi $sp, $sp, -1432 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -7108,28 +6730,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 32($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 36($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -7137,7 +6745,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 20($sp) la $t0, s_8 -sw $t0, 44($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -7151,46 +6759,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 52($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 56($sp) +sw $a1, 48($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 40($sp) +sw $a1, 36($sp) la $t0, s_9 -sw $t0, 64($sp) +sw $t0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -7204,46 +6798,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 72($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 76($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 60($sp) +sw $a1, 52($sp) la $t0, s_10 -sw $t0, 84($sp) +sw $t0, 72($sp) li $a0, 20 li $v0, 9 syscall @@ -7257,45 +6837,70 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) -li $a0, 32 +sw $a1, 80($sp) +move $t0, $sp +lw $t1, 76($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1436($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1436($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 68($sp) +la $t0, s_11 +sw $t0, 88($sp) +li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 1 sw $t1, 0($t0) -la $t1, CellularAutomaton_name +la $t1, String_name sw $t1, 4($t0) -li $t1, 8 +li $t1, 5 sw $t1, 8($t0) -la $t1, CellularAutomaton_methods +la $t1, String_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 92($sp) move $t0, $sp lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 92($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +jal String_init +sw $a1, 96($sp) +move $t0, $sp +lw $t1, 92($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1436($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 80($sp) -la $t0, s_11 +sw $a1, 84($sp) +la $t0, s_12 sw $t0, 104($sp) li $a0, 20 li $v0, 9 @@ -7320,36 +6925,22 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 112($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 116($sp) move $t0, $sp lw $t1, 108($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 100($sp) -la $t0, s_12 -sw $t0, 124($sp) +la $t0, s_13 +sw $t0, 120($sp) li $a0, 20 li $v0, 9 syscall @@ -7363,46 +6954,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 128($sp) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 124($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 132($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 136($sp) +sw $a1, 128($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 136($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 120($sp) -la $t0, s_13 -sw $t0, 144($sp) +sw $a1, 116($sp) +la $t0, s_14 +sw $t0, 136($sp) li $a0, 20 li $v0, 9 syscall @@ -7416,46 +6993,71 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 140($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 152($sp) -li $a0, 32 +sw $a1, 144($sp) +move $t0, $sp +lw $t1, 140($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1436($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1436($t0) +la $t0, void +beq $t1, $t0, dispatch_void_error +lw $t2, 12($t1) +lw $t3, 12($t2) +jal $t3 +sw $a1, 132($sp) +la $t0, s_15 +sw $t0, 152($sp) +li $a0, 20 li $v0, 9 syscall bge $v0, $sp heap_error move $t0, $v0 -li $t1, 6 +li $t1, 1 sw $t1, 0($t0) -la $t1, CellularAutomaton_name +la $t1, String_name sw $t1, 4($t0) -li $t1, 8 +li $t1, 5 sw $t1, 8($t0) -la $t1, CellularAutomaton_methods +la $t1, String_methods sw $t1, 12($t0) sw $t0, 156($sp) move $t0, $sp -lw $t1, 148($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) +jal String_init +sw $a1, 160($sp) +move $t0, $sp lw $t1, 156($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1436($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 140($sp) -la $t0, s_14 -sw $t0, 164($sp) +sw $a1, 148($sp) +la $t0, s_16 +sw $t0, 168($sp) li $a0, 20 li $v0, 9 syscall @@ -7469,45 +7071,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 168($sp) +sw $t0, 172($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 172($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 176($sp) +sw $a1, 176($sp) move $t0, $sp -lw $t1, 168($t0) +lw $t1, 172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 176($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 160($sp) -la $t0, s_15 +sw $a1, 164($sp) +la $t0, s_17 sw $t0, 184($sp) li $a0, 20 li $v0, 9 @@ -7532,142 +7120,22 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 192($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 196($sp) move $t0, $sp lw $t1, 188($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 180($sp) -la $t0, s_16 -sw $t0, 204($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 208($sp) -move $t0, $sp -lw $t1, 204($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 212($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 216($sp) -move $t0, $sp -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1536($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 216($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 200($sp) -la $t0, s_17 -sw $t0, 224($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 1 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 228($sp) -move $t0, $sp -lw $t1, 224($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 232($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 236($sp) -move $t0, $sp -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1536($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 236($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 220($sp) la $t0, s_18 -sw $t0, 244($sp) +sw $t0, 200($sp) li $a0, 20 li $v0, 9 syscall @@ -7681,46 +7149,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 248($sp) +sw $t0, 204($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 248($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 252($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 256($sp) +sw $a1, 208($sp) move $t0, $sp -lw $t1, 248($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 240($sp) +sw $a1, 196($sp) la $t0, s_19 -sw $t0, 264($sp) +sw $t0, 216($sp) li $a0, 20 li $v0, 9 syscall @@ -7734,46 +7188,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 268($sp) +sw $t0, 220($sp) move $t0, $sp -lw $t1, 264($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 268($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 272($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 276($sp) +sw $a1, 224($sp) move $t0, $sp -lw $t1, 268($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 276($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 260($sp) +sw $a1, 212($sp) la $t0, s_20 -sw $t0, 284($sp) +sw $t0, 232($sp) li $a0, 20 li $v0, 9 syscall @@ -7787,46 +7227,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 288($sp) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 284($t0) +lw $t1, 232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 292($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 296($sp) +sw $a1, 240($sp) move $t0, $sp -lw $t1, 288($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 280($sp) +sw $a1, 228($sp) la $t0, s_21 -sw $t0, 304($sp) +sw $t0, 248($sp) li $a0, 20 li $v0, 9 syscall @@ -7840,46 +7266,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 308($sp) +sw $t0, 252($sp) move $t0, $sp -lw $t1, 304($t0) +lw $t1, 248($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 308($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 312($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 316($sp) +sw $a1, 256($sp) move $t0, $sp -lw $t1, 308($t0) +lw $t1, 252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 316($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 300($sp) +sw $a1, 244($sp) la $t0, s_22 -sw $t0, 324($sp) +sw $t0, 264($sp) li $a0, 20 li $v0, 9 syscall @@ -7893,46 +7305,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 328($sp) +sw $t0, 268($sp) move $t0, $sp -lw $t1, 324($t0) +lw $t1, 264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 328($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 332($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 336($sp) +sw $a1, 272($sp) move $t0, $sp -lw $t1, 328($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 336($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 320($sp) +sw $a1, 260($sp) la $t0, s_23 -sw $t0, 344($sp) +sw $t0, 280($sp) li $a0, 20 li $v0, 9 syscall @@ -7946,46 +7344,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 348($sp) +sw $t0, 284($sp) move $t0, $sp -lw $t1, 344($t0) +lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 348($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 352($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 356($sp) +sw $a1, 288($sp) move $t0, $sp -lw $t1, 348($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 356($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 340($sp) +sw $a1, 276($sp) la $t0, s_24 -sw $t0, 364($sp) +sw $t0, 296($sp) li $a0, 20 li $v0, 9 syscall @@ -7999,46 +7383,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 368($sp) +sw $t0, 300($sp) move $t0, $sp -lw $t1, 364($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 372($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 376($sp) +sw $a1, 304($sp) move $t0, $sp -lw $t1, 368($t0) +lw $t1, 300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 376($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 360($sp) +sw $a1, 292($sp) la $t0, s_25 -sw $t0, 384($sp) +sw $t0, 312($sp) li $a0, 20 li $v0, 9 syscall @@ -8052,46 +7422,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 388($sp) +sw $t0, 316($sp) move $t0, $sp -lw $t1, 384($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 388($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 392($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 396($sp) +sw $a1, 320($sp) move $t0, $sp -lw $t1, 388($t0) +lw $t1, 316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 396($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 380($sp) +sw $a1, 308($sp) la $t0, s_26 -sw $t0, 404($sp) +sw $t0, 328($sp) li $a0, 20 li $v0, 9 syscall @@ -8105,46 +7461,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 408($sp) +sw $t0, 332($sp) move $t0, $sp -lw $t1, 404($t0) +lw $t1, 328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 408($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 412($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 416($sp) +sw $a1, 336($sp) move $t0, $sp -lw $t1, 408($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 416($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 400($sp) +sw $a1, 324($sp) la $t0, s_27 -sw $t0, 424($sp) +sw $t0, 344($sp) li $a0, 20 li $v0, 9 syscall @@ -8158,46 +7500,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 428($sp) +sw $t0, 348($sp) move $t0, $sp -lw $t1, 424($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 428($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 432($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 436($sp) +sw $a1, 352($sp) move $t0, $sp -lw $t1, 428($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 436($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 420($sp) +sw $a1, 340($sp) la $t0, s_28 -sw $t0, 444($sp) +sw $t0, 360($sp) li $a0, 20 li $v0, 9 syscall @@ -8211,46 +7539,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 448($sp) +sw $t0, 364($sp) move $t0, $sp -lw $t1, 444($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 448($t0) +lw $t1, 360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -jal String_init -sw $a1, 452($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 456($sp) +lw $t1, 364($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 368($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 364($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 456($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 440($sp) +sw $a1, 356($sp) la $t0, s_29 -sw $t0, 464($sp) +sw $t0, 376($sp) li $a0, 20 li $v0, 9 syscall @@ -8264,73 +7578,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 468($sp) +sw $t0, 380($sp) move $t0, $sp -lw $t1, 464($t0) +lw $t1, 376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 468($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 472($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 476($sp) +sw $a1, 384($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 380($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 476($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 460($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 484($sp) +sw $a1, 372($sp) move $t0, $sp -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 484($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 480($sp) -lw $t1, 480($sp) +sw $a1, 388($sp) +lw $t1, 388($sp) sw $t1, 16($sp) la $t0, s_3 -sw $t0, 496($sp) +sw $t0, 400($sp) li $a0, 20 li $v0, 9 syscall @@ -8344,44 +7630,30 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 500($sp) +sw $t0, 404($sp) move $t0, $sp -lw $t1, 496($t0) +lw $t1, 400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 500($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 504($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 508($sp) +sw $a1, 408($sp) move $t0, $sp -lw $t1, 500($t0) +lw $t1, 404($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1536($t0) +lw $t1, 1436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 508($t0) +lw $t1, 1436($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 492($sp) +sw $a1, 396($sp) li $a0, 20 li $v0, 9 syscall @@ -8395,28 +7667,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 532($sp) +sw $t0, 432($sp) li $t0, 1 -sw $t0, 536($sp) +sw $t0, 436($sp) move $t0, $sp -lw $t1, 536($t0) +lw $t1, 436($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 532($t0) +lw $t1, 432($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 540($sp) +sw $a1, 440($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 524($sp) -lw $t0, 532($sp) +sw $t1, 424($sp) +lw $t0, 432($sp) lw $t1, 16($t0) -sw $t1, 528($sp) -lw $a0, 524($sp) -lw $t1, 528($sp) +sw $t1, 428($sp) +lw $a0, 424($sp) +lw $t1, 428($sp) seq $a0, $a0, $t1 -sw $a0, 520($sp) +sw $a0, 420($sp) li $a0, 20 li $v0, 9 syscall @@ -8430,17 +7702,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 516($sp) +sw $t0, 416($sp) move $t0, $sp -lw $t1, 520($t0) +lw $t1, 420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 516($t0) +lw $t1, 416($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 544($sp) -lw $t0, 516($sp) +sw $a1, 444($sp) +lw $t0, 416($sp) lw $a0, 16($t0) bnez $a0, label_69 li $a0, 20 @@ -8456,28 +7728,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 568($sp) +sw $t0, 468($sp) li $t0, 2 -sw $t0, 572($sp) +sw $t0, 472($sp) move $t0, $sp -lw $t1, 572($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 568($t0) +lw $t1, 468($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 576($sp) +sw $a1, 476($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 560($sp) -lw $t0, 568($sp) +sw $t1, 460($sp) +lw $t0, 468($sp) lw $t1, 16($t0) -sw $t1, 564($sp) -lw $a0, 560($sp) -lw $t1, 564($sp) +sw $t1, 464($sp) +lw $a0, 460($sp) +lw $t1, 464($sp) seq $a0, $a0, $t1 -sw $a0, 556($sp) +sw $a0, 456($sp) li $a0, 20 li $v0, 9 syscall @@ -8491,17 +7763,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 552($sp) +sw $t0, 452($sp) move $t0, $sp -lw $t1, 556($t0) +lw $t1, 456($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 552($t0) +lw $t1, 452($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 580($sp) -lw $t0, 552($sp) +sw $a1, 480($sp) +lw $t0, 452($sp) lw $a0, 16($t0) bnez $a0, label_70 li $a0, 20 @@ -8517,28 +7789,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 604($sp) +sw $t0, 504($sp) li $t0, 3 -sw $t0, 608($sp) +sw $t0, 508($sp) move $t0, $sp -lw $t1, 608($t0) +lw $t1, 508($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 604($t0) +lw $t1, 504($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 612($sp) +sw $a1, 512($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 596($sp) -lw $t0, 604($sp) +sw $t1, 496($sp) +lw $t0, 504($sp) lw $t1, 16($t0) -sw $t1, 600($sp) -lw $a0, 596($sp) -lw $t1, 600($sp) +sw $t1, 500($sp) +lw $a0, 496($sp) +lw $t1, 500($sp) seq $a0, $a0, $t1 -sw $a0, 592($sp) +sw $a0, 492($sp) li $a0, 20 li $v0, 9 syscall @@ -8552,17 +7824,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 588($sp) +sw $t0, 488($sp) move $t0, $sp -lw $t1, 592($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 588($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 616($sp) -lw $t0, 588($sp) +sw $a1, 516($sp) +lw $t0, 488($sp) lw $a0, 16($t0) bnez $a0, label_71 li $a0, 20 @@ -8578,28 +7850,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 640($sp) +sw $t0, 540($sp) li $t0, 4 -sw $t0, 644($sp) +sw $t0, 544($sp) move $t0, $sp -lw $t1, 644($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 640($t0) +lw $t1, 540($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 648($sp) +sw $a1, 548($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 632($sp) -lw $t0, 640($sp) +sw $t1, 532($sp) +lw $t0, 540($sp) lw $t1, 16($t0) -sw $t1, 636($sp) -lw $a0, 632($sp) -lw $t1, 636($sp) +sw $t1, 536($sp) +lw $a0, 532($sp) +lw $t1, 536($sp) seq $a0, $a0, $t1 -sw $a0, 628($sp) +sw $a0, 528($sp) li $a0, 20 li $v0, 9 syscall @@ -8613,17 +7885,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 624($sp) +sw $t0, 524($sp) move $t0, $sp -lw $t1, 628($t0) +lw $t1, 528($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 624($t0) +lw $t1, 524($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 652($sp) -lw $t0, 624($sp) +sw $a1, 552($sp) +lw $t0, 524($sp) lw $a0, 16($t0) bnez $a0, label_72 li $a0, 20 @@ -8639,28 +7911,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 676($sp) +sw $t0, 576($sp) li $t0, 5 -sw $t0, 680($sp) +sw $t0, 580($sp) move $t0, $sp -lw $t1, 680($t0) +lw $t1, 580($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 676($t0) +lw $t1, 576($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 684($sp) +sw $a1, 584($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 668($sp) -lw $t0, 676($sp) +sw $t1, 568($sp) +lw $t0, 576($sp) lw $t1, 16($t0) -sw $t1, 672($sp) -lw $a0, 668($sp) -lw $t1, 672($sp) +sw $t1, 572($sp) +lw $a0, 568($sp) +lw $t1, 572($sp) seq $a0, $a0, $t1 -sw $a0, 664($sp) +sw $a0, 564($sp) li $a0, 20 li $v0, 9 syscall @@ -8674,17 +7946,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 660($sp) +sw $t0, 560($sp) move $t0, $sp -lw $t1, 664($t0) +lw $t1, 564($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 660($t0) +lw $t1, 560($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 688($sp) -lw $t0, 660($sp) +sw $a1, 588($sp) +lw $t0, 560($sp) lw $a0, 16($t0) bnez $a0, label_73 li $a0, 20 @@ -8700,28 +7972,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 712($sp) +sw $t0, 612($sp) li $t0, 6 -sw $t0, 716($sp) +sw $t0, 616($sp) move $t0, $sp -lw $t1, 716($t0) +lw $t1, 616($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 712($t0) +lw $t1, 612($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 720($sp) +sw $a1, 620($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 704($sp) -lw $t0, 712($sp) +sw $t1, 604($sp) +lw $t0, 612($sp) lw $t1, 16($t0) -sw $t1, 708($sp) -lw $a0, 704($sp) -lw $t1, 708($sp) +sw $t1, 608($sp) +lw $a0, 604($sp) +lw $t1, 608($sp) seq $a0, $a0, $t1 -sw $a0, 700($sp) +sw $a0, 600($sp) li $a0, 20 li $v0, 9 syscall @@ -8735,17 +8007,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 696($sp) +sw $t0, 596($sp) move $t0, $sp -lw $t1, 700($t0) +lw $t1, 600($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 696($t0) +lw $t1, 596($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 724($sp) -lw $t0, 696($sp) +sw $a1, 624($sp) +lw $t0, 596($sp) lw $a0, 16($t0) bnez $a0, label_74 li $a0, 20 @@ -8761,28 +8033,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 748($sp) +sw $t0, 648($sp) li $t0, 7 -sw $t0, 752($sp) +sw $t0, 652($sp) move $t0, $sp -lw $t1, 752($t0) +lw $t1, 652($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 748($t0) +lw $t1, 648($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 756($sp) +sw $a1, 656($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 740($sp) -lw $t0, 748($sp) +sw $t1, 640($sp) +lw $t0, 648($sp) lw $t1, 16($t0) -sw $t1, 744($sp) -lw $a0, 740($sp) -lw $t1, 744($sp) +sw $t1, 644($sp) +lw $a0, 640($sp) +lw $t1, 644($sp) seq $a0, $a0, $t1 -sw $a0, 736($sp) +sw $a0, 636($sp) li $a0, 20 li $v0, 9 syscall @@ -8796,17 +8068,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 732($sp) +sw $t0, 632($sp) move $t0, $sp -lw $t1, 736($t0) +lw $t1, 636($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 732($t0) +lw $t1, 632($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 760($sp) -lw $t0, 732($sp) +sw $a1, 660($sp) +lw $t0, 632($sp) lw $a0, 16($t0) bnez $a0, label_75 li $a0, 20 @@ -8822,28 +8094,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 784($sp) +sw $t0, 684($sp) li $t0, 8 -sw $t0, 788($sp) +sw $t0, 688($sp) move $t0, $sp -lw $t1, 788($t0) +lw $t1, 688($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 784($t0) +lw $t1, 684($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 792($sp) +sw $a1, 692($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 776($sp) -lw $t0, 784($sp) +sw $t1, 676($sp) +lw $t0, 684($sp) lw $t1, 16($t0) -sw $t1, 780($sp) -lw $a0, 776($sp) -lw $t1, 780($sp) +sw $t1, 680($sp) +lw $a0, 676($sp) +lw $t1, 680($sp) seq $a0, $a0, $t1 -sw $a0, 772($sp) +sw $a0, 672($sp) li $a0, 20 li $v0, 9 syscall @@ -8857,17 +8129,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 768($sp) +sw $t0, 668($sp) move $t0, $sp -lw $t1, 772($t0) +lw $t1, 672($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 768($t0) +lw $t1, 668($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 796($sp) -lw $t0, 768($sp) +sw $a1, 696($sp) +lw $t0, 668($sp) lw $a0, 16($t0) bnez $a0, label_76 li $a0, 20 @@ -8883,28 +8155,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 820($sp) +sw $t0, 720($sp) li $t0, 9 -sw $t0, 824($sp) +sw $t0, 724($sp) move $t0, $sp -lw $t1, 824($t0) +lw $t1, 724($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 820($t0) +lw $t1, 720($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 828($sp) +sw $a1, 728($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 812($sp) -lw $t0, 820($sp) +sw $t1, 712($sp) +lw $t0, 720($sp) lw $t1, 16($t0) -sw $t1, 816($sp) -lw $a0, 812($sp) -lw $t1, 816($sp) +sw $t1, 716($sp) +lw $a0, 712($sp) +lw $t1, 716($sp) seq $a0, $a0, $t1 -sw $a0, 808($sp) +sw $a0, 708($sp) li $a0, 20 li $v0, 9 syscall @@ -8918,17 +8190,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 804($sp) +sw $t0, 704($sp) move $t0, $sp -lw $t1, 808($t0) +lw $t1, 708($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 804($t0) +lw $t1, 704($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 832($sp) -lw $t0, 804($sp) +sw $a1, 732($sp) +lw $t0, 704($sp) lw $a0, 16($t0) bnez $a0, label_77 li $a0, 20 @@ -8944,28 +8216,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 856($sp) +sw $t0, 756($sp) li $t0, 10 -sw $t0, 860($sp) +sw $t0, 760($sp) move $t0, $sp -lw $t1, 860($t0) +lw $t1, 760($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 856($t0) +lw $t1, 756($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 864($sp) +sw $a1, 764($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 848($sp) -lw $t0, 856($sp) +sw $t1, 748($sp) +lw $t0, 756($sp) lw $t1, 16($t0) -sw $t1, 852($sp) -lw $a0, 848($sp) -lw $t1, 852($sp) +sw $t1, 752($sp) +lw $a0, 748($sp) +lw $t1, 752($sp) seq $a0, $a0, $t1 -sw $a0, 844($sp) +sw $a0, 744($sp) li $a0, 20 li $v0, 9 syscall @@ -8979,17 +8251,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 840($sp) +sw $t0, 740($sp) move $t0, $sp -lw $t1, 844($t0) +lw $t1, 744($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 840($t0) +lw $t1, 740($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 868($sp) -lw $t0, 840($sp) +sw $a1, 768($sp) +lw $t0, 740($sp) lw $a0, 16($t0) bnez $a0, label_78 li $a0, 20 @@ -9005,28 +8277,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 892($sp) +sw $t0, 792($sp) li $t0, 11 -sw $t0, 896($sp) +sw $t0, 796($sp) move $t0, $sp -lw $t1, 896($t0) +lw $t1, 796($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 892($t0) +lw $t1, 792($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 900($sp) +sw $a1, 800($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 884($sp) -lw $t0, 892($sp) +sw $t1, 784($sp) +lw $t0, 792($sp) lw $t1, 16($t0) -sw $t1, 888($sp) -lw $a0, 884($sp) -lw $t1, 888($sp) +sw $t1, 788($sp) +lw $a0, 784($sp) +lw $t1, 788($sp) seq $a0, $a0, $t1 -sw $a0, 880($sp) +sw $a0, 780($sp) li $a0, 20 li $v0, 9 syscall @@ -9040,17 +8312,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 876($sp) +sw $t0, 776($sp) move $t0, $sp -lw $t1, 880($t0) +lw $t1, 780($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 876($t0) +lw $t1, 776($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 904($sp) -lw $t0, 876($sp) +sw $a1, 804($sp) +lw $t0, 776($sp) lw $a0, 16($t0) bnez $a0, label_79 li $a0, 20 @@ -9066,28 +8338,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 928($sp) +sw $t0, 828($sp) li $t0, 12 -sw $t0, 932($sp) +sw $t0, 832($sp) move $t0, $sp -lw $t1, 932($t0) +lw $t1, 832($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 928($t0) +lw $t1, 828($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 936($sp) +sw $a1, 836($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 920($sp) -lw $t0, 928($sp) +sw $t1, 820($sp) +lw $t0, 828($sp) lw $t1, 16($t0) -sw $t1, 924($sp) -lw $a0, 920($sp) -lw $t1, 924($sp) +sw $t1, 824($sp) +lw $a0, 820($sp) +lw $t1, 824($sp) seq $a0, $a0, $t1 -sw $a0, 916($sp) +sw $a0, 816($sp) li $a0, 20 li $v0, 9 syscall @@ -9101,17 +8373,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 912($sp) +sw $t0, 812($sp) move $t0, $sp -lw $t1, 916($t0) +lw $t1, 816($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 912($t0) +lw $t1, 812($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 940($sp) -lw $t0, 912($sp) +sw $a1, 840($sp) +lw $t0, 812($sp) lw $a0, 16($t0) bnez $a0, label_80 li $a0, 20 @@ -9127,28 +8399,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 964($sp) +sw $t0, 864($sp) li $t0, 13 -sw $t0, 968($sp) +sw $t0, 868($sp) move $t0, $sp -lw $t1, 968($t0) +lw $t1, 868($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 964($t0) +lw $t1, 864($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 972($sp) +sw $a1, 872($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 956($sp) -lw $t0, 964($sp) +sw $t1, 856($sp) +lw $t0, 864($sp) lw $t1, 16($t0) -sw $t1, 960($sp) -lw $a0, 956($sp) -lw $t1, 960($sp) +sw $t1, 860($sp) +lw $a0, 856($sp) +lw $t1, 860($sp) seq $a0, $a0, $t1 -sw $a0, 952($sp) +sw $a0, 852($sp) li $a0, 20 li $v0, 9 syscall @@ -9162,17 +8434,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 948($sp) +sw $t0, 848($sp) move $t0, $sp -lw $t1, 952($t0) +lw $t1, 852($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 948($t0) +lw $t1, 848($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 976($sp) -lw $t0, 948($sp) +sw $a1, 876($sp) +lw $t0, 848($sp) lw $a0, 16($t0) bnez $a0, label_81 li $a0, 20 @@ -9188,28 +8460,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1000($sp) +sw $t0, 900($sp) li $t0, 14 -sw $t0, 1004($sp) +sw $t0, 904($sp) move $t0, $sp -lw $t1, 1004($t0) +lw $t1, 904($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1000($t0) +lw $t1, 900($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1008($sp) +sw $a1, 908($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 992($sp) -lw $t0, 1000($sp) +sw $t1, 892($sp) +lw $t0, 900($sp) lw $t1, 16($t0) -sw $t1, 996($sp) -lw $a0, 992($sp) -lw $t1, 996($sp) +sw $t1, 896($sp) +lw $a0, 892($sp) +lw $t1, 896($sp) seq $a0, $a0, $t1 -sw $a0, 988($sp) +sw $a0, 888($sp) li $a0, 20 li $v0, 9 syscall @@ -9223,17 +8495,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 984($sp) +sw $t0, 884($sp) move $t0, $sp -lw $t1, 988($t0) +lw $t1, 888($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 984($t0) +lw $t1, 884($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1012($sp) -lw $t0, 984($sp) +sw $a1, 912($sp) +lw $t0, 884($sp) lw $a0, 16($t0) bnez $a0, label_82 li $a0, 20 @@ -9249,28 +8521,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1036($sp) +sw $t0, 936($sp) li $t0, 15 -sw $t0, 1040($sp) +sw $t0, 940($sp) move $t0, $sp -lw $t1, 1040($t0) +lw $t1, 940($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1036($t0) +lw $t1, 936($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1044($sp) +sw $a1, 944($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1028($sp) -lw $t0, 1036($sp) +sw $t1, 928($sp) +lw $t0, 936($sp) lw $t1, 16($t0) -sw $t1, 1032($sp) -lw $a0, 1028($sp) -lw $t1, 1032($sp) +sw $t1, 932($sp) +lw $a0, 928($sp) +lw $t1, 932($sp) seq $a0, $a0, $t1 -sw $a0, 1024($sp) +sw $a0, 924($sp) li $a0, 20 li $v0, 9 syscall @@ -9284,17 +8556,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1020($sp) +sw $t0, 920($sp) move $t0, $sp -lw $t1, 1024($t0) +lw $t1, 924($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1020($t0) +lw $t1, 920($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1048($sp) -lw $t0, 1020($sp) +sw $a1, 948($sp) +lw $t0, 920($sp) lw $a0, 16($t0) bnez $a0, label_83 li $a0, 20 @@ -9310,28 +8582,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1072($sp) +sw $t0, 972($sp) li $t0, 16 -sw $t0, 1076($sp) +sw $t0, 976($sp) move $t0, $sp -lw $t1, 1076($t0) +lw $t1, 976($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1072($t0) +lw $t1, 972($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1080($sp) +sw $a1, 980($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1064($sp) -lw $t0, 1072($sp) +sw $t1, 964($sp) +lw $t0, 972($sp) lw $t1, 16($t0) -sw $t1, 1068($sp) -lw $a0, 1064($sp) -lw $t1, 1068($sp) +sw $t1, 968($sp) +lw $a0, 964($sp) +lw $t1, 968($sp) seq $a0, $a0, $t1 -sw $a0, 1060($sp) +sw $a0, 960($sp) li $a0, 20 li $v0, 9 syscall @@ -9345,17 +8617,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1056($sp) +sw $t0, 956($sp) move $t0, $sp -lw $t1, 1060($t0) +lw $t1, 960($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1056($t0) +lw $t1, 956($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1084($sp) -lw $t0, 1056($sp) +sw $a1, 984($sp) +lw $t0, 956($sp) lw $a0, 16($t0) bnez $a0, label_84 li $a0, 20 @@ -9371,28 +8643,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1108($sp) +sw $t0, 1008($sp) li $t0, 17 -sw $t0, 1112($sp) +sw $t0, 1012($sp) move $t0, $sp -lw $t1, 1112($t0) +lw $t1, 1012($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1108($t0) +lw $t1, 1008($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1116($sp) +sw $a1, 1016($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1100($sp) -lw $t0, 1108($sp) +sw $t1, 1000($sp) +lw $t0, 1008($sp) lw $t1, 16($t0) -sw $t1, 1104($sp) -lw $a0, 1100($sp) -lw $t1, 1104($sp) +sw $t1, 1004($sp) +lw $a0, 1000($sp) +lw $t1, 1004($sp) seq $a0, $a0, $t1 -sw $a0, 1096($sp) +sw $a0, 996($sp) li $a0, 20 li $v0, 9 syscall @@ -9406,17 +8678,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1092($sp) +sw $t0, 992($sp) move $t0, $sp -lw $t1, 1096($t0) +lw $t1, 996($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1092($t0) +lw $t1, 992($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1120($sp) -lw $t0, 1092($sp) +sw $a1, 1020($sp) +lw $t0, 992($sp) lw $a0, 16($t0) bnez $a0, label_85 li $a0, 20 @@ -9432,28 +8704,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1144($sp) +sw $t0, 1044($sp) li $t0, 18 -sw $t0, 1148($sp) +sw $t0, 1048($sp) move $t0, $sp -lw $t1, 1148($t0) +lw $t1, 1048($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1144($t0) +lw $t1, 1044($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1152($sp) +sw $a1, 1052($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1136($sp) -lw $t0, 1144($sp) +sw $t1, 1036($sp) +lw $t0, 1044($sp) lw $t1, 16($t0) -sw $t1, 1140($sp) -lw $a0, 1136($sp) -lw $t1, 1140($sp) +sw $t1, 1040($sp) +lw $a0, 1036($sp) +lw $t1, 1040($sp) seq $a0, $a0, $t1 -sw $a0, 1132($sp) +sw $a0, 1032($sp) li $a0, 20 li $v0, 9 syscall @@ -9467,17 +8739,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1128($sp) +sw $t0, 1028($sp) move $t0, $sp -lw $t1, 1132($t0) +lw $t1, 1032($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1128($t0) +lw $t1, 1028($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1156($sp) -lw $t0, 1128($sp) +sw $a1, 1056($sp) +lw $t0, 1028($sp) lw $a0, 16($t0) bnez $a0, label_86 li $a0, 20 @@ -9493,28 +8765,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1180($sp) +sw $t0, 1080($sp) li $t0, 19 -sw $t0, 1184($sp) +sw $t0, 1084($sp) move $t0, $sp -lw $t1, 1184($t0) +lw $t1, 1084($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1180($t0) +lw $t1, 1080($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1188($sp) +sw $a1, 1088($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1172($sp) -lw $t0, 1180($sp) +sw $t1, 1072($sp) +lw $t0, 1080($sp) lw $t1, 16($t0) -sw $t1, 1176($sp) -lw $a0, 1172($sp) -lw $t1, 1176($sp) +sw $t1, 1076($sp) +lw $a0, 1072($sp) +lw $t1, 1076($sp) seq $a0, $a0, $t1 -sw $a0, 1168($sp) +sw $a0, 1068($sp) li $a0, 20 li $v0, 9 syscall @@ -9528,17 +8800,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1164($sp) +sw $t0, 1064($sp) move $t0, $sp -lw $t1, 1168($t0) +lw $t1, 1068($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1164($t0) +lw $t1, 1064($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1192($sp) -lw $t0, 1164($sp) +sw $a1, 1092($sp) +lw $t0, 1064($sp) lw $a0, 16($t0) bnez $a0, label_87 li $a0, 20 @@ -9554,28 +8826,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1216($sp) +sw $t0, 1116($sp) li $t0, 20 -sw $t0, 1220($sp) +sw $t0, 1120($sp) move $t0, $sp -lw $t1, 1220($t0) +lw $t1, 1120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1216($t0) +lw $t1, 1116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1224($sp) +sw $a1, 1124($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1208($sp) -lw $t0, 1216($sp) +sw $t1, 1108($sp) +lw $t0, 1116($sp) lw $t1, 16($t0) -sw $t1, 1212($sp) -lw $a0, 1208($sp) -lw $t1, 1212($sp) +sw $t1, 1112($sp) +lw $a0, 1108($sp) +lw $t1, 1112($sp) seq $a0, $a0, $t1 -sw $a0, 1204($sp) +sw $a0, 1104($sp) li $a0, 20 li $v0, 9 syscall @@ -9589,17 +8861,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1200($sp) +sw $t0, 1100($sp) move $t0, $sp -lw $t1, 1204($t0) +lw $t1, 1104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1200($t0) +lw $t1, 1100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1228($sp) -lw $t0, 1200($sp) +sw $a1, 1128($sp) +lw $t0, 1100($sp) lw $a0, 16($t0) bnez $a0, label_88 li $a0, 20 @@ -9615,28 +8887,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 1252($sp) +sw $t0, 1152($sp) li $t0, 21 -sw $t0, 1256($sp) +sw $t0, 1156($sp) move $t0, $sp -lw $t1, 1256($t0) +lw $t1, 1156($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1252($t0) +lw $t1, 1152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 1260($sp) +sw $a1, 1160($sp) lw $t0, 16($sp) lw $t1, 16($t0) -sw $t1, 1244($sp) -lw $t0, 1252($sp) +sw $t1, 1144($sp) +lw $t0, 1152($sp) lw $t1, 16($t0) -sw $t1, 1248($sp) -lw $a0, 1244($sp) -lw $t1, 1248($sp) +sw $t1, 1148($sp) +lw $a0, 1144($sp) +lw $t1, 1148($sp) seq $a0, $a0, $t1 -sw $a0, 1240($sp) +sw $a0, 1140($sp) li $a0, 20 li $v0, 9 syscall @@ -9650,21 +8922,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 1236($sp) +sw $t0, 1136($sp) move $t0, $sp -lw $t1, 1240($t0) +lw $t1, 1140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1236($t0) +lw $t1, 1136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 1264($sp) -lw $t0, 1236($sp) +sw $a1, 1164($sp) +lw $t0, 1136($sp) lw $a0, 16($t0) bnez $a0, label_89 la $t0, s_30 -sw $t0, 1268($sp) +sw $t0, 1168($sp) li $a0, 20 li $v0, 9 syscall @@ -9678,22 +8950,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1272($sp) +sw $t0, 1172($sp) move $t0, $sp -lw $t1, 1268($t0) +lw $t1, 1168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1272($t0) +lw $t1, 1172($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1276($sp) -lw $t1, 1272($sp) -sw $t1, 1232($sp) +sw $a1, 1176($sp) +lw $t1, 1172($sp) +sw $t1, 1132($sp) b label_90 label_89: la $t0, s_31 -sw $t0, 1280($sp) +sw $t0, 1180($sp) li $a0, 20 li $v0, 9 syscall @@ -9707,25 +8979,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1284($sp) +sw $t0, 1184($sp) move $t0, $sp -lw $t1, 1280($t0) +lw $t1, 1180($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1284($t0) +lw $t1, 1184($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1288($sp) -lw $t1, 1284($sp) -sw $t1, 1232($sp) +sw $a1, 1188($sp) +lw $t1, 1184($sp) +sw $t1, 1132($sp) label_90: -lw $t1, 1232($sp) -sw $t1, 1196($sp) +lw $t1, 1132($sp) +sw $t1, 1096($sp) b label_91 label_88: la $t0, s_32 -sw $t0, 1292($sp) +sw $t0, 1192($sp) li $a0, 20 li $v0, 9 syscall @@ -9739,25 +9011,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1296($sp) +sw $t0, 1196($sp) move $t0, $sp -lw $t1, 1292($t0) +lw $t1, 1192($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1296($t0) +lw $t1, 1196($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1300($sp) -lw $t1, 1296($sp) -sw $t1, 1196($sp) -label_91: +sw $a1, 1200($sp) lw $t1, 1196($sp) -sw $t1, 1160($sp) +sw $t1, 1096($sp) +label_91: +lw $t1, 1096($sp) +sw $t1, 1060($sp) b label_92 label_87: la $t0, s_33 -sw $t0, 1304($sp) +sw $t0, 1204($sp) li $a0, 20 li $v0, 9 syscall @@ -9771,25 +9043,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1308($sp) +sw $t0, 1208($sp) move $t0, $sp -lw $t1, 1304($t0) +lw $t1, 1204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1308($t0) +lw $t1, 1208($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1312($sp) -lw $t1, 1308($sp) -sw $t1, 1160($sp) +sw $a1, 1212($sp) +lw $t1, 1208($sp) +sw $t1, 1060($sp) label_92: -lw $t1, 1160($sp) -sw $t1, 1124($sp) +lw $t1, 1060($sp) +sw $t1, 1024($sp) b label_93 label_86: la $t0, s_34 -sw $t0, 1316($sp) +sw $t0, 1216($sp) li $a0, 20 li $v0, 9 syscall @@ -9803,25 +9075,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1320($sp) +sw $t0, 1220($sp) move $t0, $sp -lw $t1, 1316($t0) +lw $t1, 1216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1320($t0) +lw $t1, 1220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1324($sp) -lw $t1, 1320($sp) -sw $t1, 1124($sp) +sw $a1, 1224($sp) +lw $t1, 1220($sp) +sw $t1, 1024($sp) label_93: -lw $t1, 1124($sp) -sw $t1, 1088($sp) +lw $t1, 1024($sp) +sw $t1, 988($sp) b label_94 label_85: la $t0, s_35 -sw $t0, 1328($sp) +sw $t0, 1228($sp) li $a0, 20 li $v0, 9 syscall @@ -9835,25 +9107,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1332($sp) +sw $t0, 1232($sp) move $t0, $sp -lw $t1, 1328($t0) +lw $t1, 1228($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1332($t0) +lw $t1, 1232($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1336($sp) -lw $t1, 1332($sp) -sw $t1, 1088($sp) +sw $a1, 1236($sp) +lw $t1, 1232($sp) +sw $t1, 988($sp) label_94: -lw $t1, 1088($sp) -sw $t1, 1052($sp) +lw $t1, 988($sp) +sw $t1, 952($sp) b label_95 label_84: la $t0, s_36 -sw $t0, 1340($sp) +sw $t0, 1240($sp) li $a0, 20 li $v0, 9 syscall @@ -9867,25 +9139,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1344($sp) +sw $t0, 1244($sp) move $t0, $sp -lw $t1, 1340($t0) +lw $t1, 1240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1344($t0) +lw $t1, 1244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1348($sp) -lw $t1, 1344($sp) -sw $t1, 1052($sp) +sw $a1, 1248($sp) +lw $t1, 1244($sp) +sw $t1, 952($sp) label_95: -lw $t1, 1052($sp) -sw $t1, 1016($sp) +lw $t1, 952($sp) +sw $t1, 916($sp) b label_96 label_83: la $t0, s_37 -sw $t0, 1352($sp) +sw $t0, 1252($sp) li $a0, 20 li $v0, 9 syscall @@ -9899,25 +9171,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1356($sp) +sw $t0, 1256($sp) move $t0, $sp -lw $t1, 1352($t0) +lw $t1, 1252($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1356($t0) +lw $t1, 1256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1360($sp) -lw $t1, 1356($sp) -sw $t1, 1016($sp) +sw $a1, 1260($sp) +lw $t1, 1256($sp) +sw $t1, 916($sp) label_96: -lw $t1, 1016($sp) -sw $t1, 980($sp) +lw $t1, 916($sp) +sw $t1, 880($sp) b label_97 label_82: la $t0, s_38 -sw $t0, 1364($sp) +sw $t0, 1264($sp) li $a0, 20 li $v0, 9 syscall @@ -9931,25 +9203,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1368($sp) +sw $t0, 1268($sp) move $t0, $sp -lw $t1, 1364($t0) +lw $t1, 1264($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1368($t0) +lw $t1, 1268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1372($sp) -lw $t1, 1368($sp) -sw $t1, 980($sp) +sw $a1, 1272($sp) +lw $t1, 1268($sp) +sw $t1, 880($sp) label_97: -lw $t1, 980($sp) -sw $t1, 944($sp) +lw $t1, 880($sp) +sw $t1, 844($sp) b label_98 label_81: la $t0, s_39 -sw $t0, 1376($sp) +sw $t0, 1276($sp) li $a0, 20 li $v0, 9 syscall @@ -9963,25 +9235,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1380($sp) +sw $t0, 1280($sp) move $t0, $sp -lw $t1, 1376($t0) +lw $t1, 1276($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1380($t0) +lw $t1, 1280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1384($sp) -lw $t1, 1380($sp) -sw $t1, 944($sp) +sw $a1, 1284($sp) +lw $t1, 1280($sp) +sw $t1, 844($sp) label_98: -lw $t1, 944($sp) -sw $t1, 908($sp) +lw $t1, 844($sp) +sw $t1, 808($sp) b label_99 label_80: la $t0, s_40 -sw $t0, 1388($sp) +sw $t0, 1288($sp) li $a0, 20 li $v0, 9 syscall @@ -9995,25 +9267,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1392($sp) +sw $t0, 1292($sp) move $t0, $sp -lw $t1, 1388($t0) +lw $t1, 1288($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1392($t0) +lw $t1, 1292($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1396($sp) -lw $t1, 1392($sp) -sw $t1, 908($sp) +sw $a1, 1296($sp) +lw $t1, 1292($sp) +sw $t1, 808($sp) label_99: -lw $t1, 908($sp) -sw $t1, 872($sp) +lw $t1, 808($sp) +sw $t1, 772($sp) b label_100 label_79: la $t0, s_41 -sw $t0, 1400($sp) +sw $t0, 1300($sp) li $a0, 20 li $v0, 9 syscall @@ -10027,25 +9299,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1404($sp) +sw $t0, 1304($sp) move $t0, $sp -lw $t1, 1400($t0) +lw $t1, 1300($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1404($t0) +lw $t1, 1304($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1408($sp) -lw $t1, 1404($sp) -sw $t1, 872($sp) +sw $a1, 1308($sp) +lw $t1, 1304($sp) +sw $t1, 772($sp) label_100: -lw $t1, 872($sp) -sw $t1, 836($sp) +lw $t1, 772($sp) +sw $t1, 736($sp) b label_101 label_78: la $t0, s_42 -sw $t0, 1412($sp) +sw $t0, 1312($sp) li $a0, 20 li $v0, 9 syscall @@ -10059,25 +9331,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1416($sp) +sw $t0, 1316($sp) move $t0, $sp -lw $t1, 1412($t0) +lw $t1, 1312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1416($t0) +lw $t1, 1316($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1420($sp) -lw $t1, 1416($sp) -sw $t1, 836($sp) +sw $a1, 1320($sp) +lw $t1, 1316($sp) +sw $t1, 736($sp) label_101: -lw $t1, 836($sp) -sw $t1, 800($sp) +lw $t1, 736($sp) +sw $t1, 700($sp) b label_102 label_77: la $t0, s_43 -sw $t0, 1424($sp) +sw $t0, 1324($sp) li $a0, 20 li $v0, 9 syscall @@ -10091,25 +9363,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1428($sp) +sw $t0, 1328($sp) move $t0, $sp -lw $t1, 1424($t0) +lw $t1, 1324($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1428($t0) +lw $t1, 1328($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1432($sp) -lw $t1, 1428($sp) -sw $t1, 800($sp) +sw $a1, 1332($sp) +lw $t1, 1328($sp) +sw $t1, 700($sp) label_102: -lw $t1, 800($sp) -sw $t1, 764($sp) +lw $t1, 700($sp) +sw $t1, 664($sp) b label_103 label_76: la $t0, s_44 -sw $t0, 1436($sp) +sw $t0, 1336($sp) li $a0, 20 li $v0, 9 syscall @@ -10123,25 +9395,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1440($sp) +sw $t0, 1340($sp) move $t0, $sp -lw $t1, 1436($t0) +lw $t1, 1336($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1440($t0) +lw $t1, 1340($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1444($sp) -lw $t1, 1440($sp) -sw $t1, 764($sp) +sw $a1, 1344($sp) +lw $t1, 1340($sp) +sw $t1, 664($sp) label_103: -lw $t1, 764($sp) -sw $t1, 728($sp) +lw $t1, 664($sp) +sw $t1, 628($sp) b label_104 label_75: la $t0, s_45 -sw $t0, 1448($sp) +sw $t0, 1348($sp) li $a0, 20 li $v0, 9 syscall @@ -10155,25 +9427,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1452($sp) +sw $t0, 1352($sp) move $t0, $sp -lw $t1, 1448($t0) +lw $t1, 1348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1452($t0) +lw $t1, 1352($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1456($sp) -lw $t1, 1452($sp) -sw $t1, 728($sp) +sw $a1, 1356($sp) +lw $t1, 1352($sp) +sw $t1, 628($sp) label_104: -lw $t1, 728($sp) -sw $t1, 692($sp) +lw $t1, 628($sp) +sw $t1, 592($sp) b label_105 label_74: la $t0, s_46 -sw $t0, 1460($sp) +sw $t0, 1360($sp) li $a0, 20 li $v0, 9 syscall @@ -10187,25 +9459,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1464($sp) +sw $t0, 1364($sp) move $t0, $sp -lw $t1, 1460($t0) +lw $t1, 1360($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1464($t0) +lw $t1, 1364($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1468($sp) -lw $t1, 1464($sp) -sw $t1, 692($sp) +sw $a1, 1368($sp) +lw $t1, 1364($sp) +sw $t1, 592($sp) label_105: -lw $t1, 692($sp) -sw $t1, 656($sp) +lw $t1, 592($sp) +sw $t1, 556($sp) b label_106 label_73: la $t0, s_47 -sw $t0, 1472($sp) +sw $t0, 1372($sp) li $a0, 20 li $v0, 9 syscall @@ -10219,25 +9491,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1476($sp) +sw $t0, 1376($sp) move $t0, $sp -lw $t1, 1472($t0) +lw $t1, 1372($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1476($t0) +lw $t1, 1376($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1480($sp) -lw $t1, 1476($sp) -sw $t1, 656($sp) +sw $a1, 1380($sp) +lw $t1, 1376($sp) +sw $t1, 556($sp) label_106: -lw $t1, 656($sp) -sw $t1, 620($sp) +lw $t1, 556($sp) +sw $t1, 520($sp) b label_107 label_72: la $t0, s_48 -sw $t0, 1484($sp) +sw $t0, 1384($sp) li $a0, 20 li $v0, 9 syscall @@ -10251,25 +9523,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1488($sp) +sw $t0, 1388($sp) move $t0, $sp -lw $t1, 1484($t0) +lw $t1, 1384($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1488($t0) +lw $t1, 1388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1492($sp) -lw $t1, 1488($sp) -sw $t1, 620($sp) +sw $a1, 1392($sp) +lw $t1, 1388($sp) +sw $t1, 520($sp) label_107: -lw $t1, 620($sp) -sw $t1, 584($sp) +lw $t1, 520($sp) +sw $t1, 484($sp) b label_108 label_71: la $t0, s_49 -sw $t0, 1496($sp) +sw $t0, 1396($sp) li $a0, 20 li $v0, 9 syscall @@ -10283,25 +9555,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1500($sp) +sw $t0, 1400($sp) move $t0, $sp -lw $t1, 1496($t0) +lw $t1, 1396($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1500($t0) +lw $t1, 1400($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1504($sp) -lw $t1, 1500($sp) -sw $t1, 584($sp) +sw $a1, 1404($sp) +lw $t1, 1400($sp) +sw $t1, 484($sp) label_108: -lw $t1, 584($sp) -sw $t1, 548($sp) +lw $t1, 484($sp) +sw $t1, 448($sp) b label_109 label_70: la $t0, s_50 -sw $t0, 1508($sp) +sw $t0, 1408($sp) li $a0, 20 li $v0, 9 syscall @@ -10315,25 +9587,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1512($sp) +sw $t0, 1412($sp) move $t0, $sp -lw $t1, 1508($t0) +lw $t1, 1408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1512($t0) +lw $t1, 1412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1516($sp) -lw $t1, 1512($sp) -sw $t1, 548($sp) +sw $a1, 1416($sp) +lw $t1, 1412($sp) +sw $t1, 448($sp) label_109: -lw $t1, 548($sp) -sw $t1, 512($sp) +lw $t1, 448($sp) +sw $t1, 412($sp) b label_110 label_69: la $t0, s_51 -sw $t0, 1520($sp) +sw $t0, 1420($sp) li $a0, 20 li $v0, 9 syscall @@ -10347,27 +9619,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 1524($sp) +sw $t0, 1424($sp) move $t0, $sp -lw $t1, 1520($t0) +lw $t1, 1420($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 1524($t0) +lw $t1, 1424($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 1528($sp) -lw $t1, 1524($sp) -sw $t1, 512($sp) +sw $a1, 1428($sp) +lw $t1, 1424($sp) +sw $t1, 412($sp) label_110: -lw $t1, 512($sp) -sw $t1, 1532($sp) -lw $a1, 1532($sp) +lw $t1, 412($sp) +sw $t1, 1432($sp) +lw $a1, 1432($sp) lw $ra, 0($sp) -addi $sp, $sp, 1540 +addi $sp, $sp, 1440 jr $ra CellularAutomaton.prompt: -addi $sp, $sp, -152 +addi $sp, $sp, -136 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -10417,33 +9689,19 @@ move $t0, $sp lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 32($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 36($sp) +lw $t1, 28($t0) +addi $sp, $sp, -4 +sw $t1, 0($sp) +jal String_init +sw $a1, 32($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -10451,7 +9709,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 20($sp) la $t0, s_53 -sw $t0, 44($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -10465,73 +9723,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 52($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 56($sp) +sw $a1, 48($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 40($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 64($sp) +sw $a1, 36($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 60($sp) -lw $t1, 60($sp) +sw $a1, 52($sp) +lw $t1, 52($sp) sw $t1, 16($sp) la $t0, s_3 -sw $t0, 76($sp) +sw $t0, 64($sp) li $a0, 20 li $v0, 9 syscall @@ -10545,46 +9775,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 80($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 84($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 88($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 72($sp) +sw $a1, 60($sp) la $t0, s_54 -sw $t0, 112($sp) +sw $t0, 96($sp) li $a0, 20 li $v0, 9 syscall @@ -10598,25 +9814,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 116($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 120($sp) +sw $a1, 104($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 100($sp) +sw $a1, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -10630,17 +9846,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 124($sp) -lw $t0, 96($sp) +sw $a1, 108($sp) +lw $t0, 80($sp) lw $a0, 16($t0) bnez $a0, label_111 li $a0, 20 @@ -10656,20 +9872,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 128($sp) +sw $t0, 112($sp) li $t0, 1 -sw $t0, 132($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 136($sp) -lw $t1, 128($sp) -sw $t1, 92($sp) +sw $a1, 120($sp) +lw $t1, 112($sp) +sw $t1, 76($sp) b label_112 label_111: li $a0, 20 @@ -10685,29 +9901,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 140($sp) +sw $t0, 124($sp) li $t0, 0 -sw $t0, 144($sp) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 148($sp) -lw $t1, 140($sp) -sw $t1, 92($sp) +sw $a1, 132($sp) +lw $t1, 124($sp) +sw $t1, 76($sp) label_112: -lw $t1, 92($sp) -sw $t1, 152($sp) -lw $a1, 152($sp) +lw $t1, 76($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) lw $ra, 0($sp) -addi $sp, $sp, 160 +addi $sp, $sp, 144 jr $ra CellularAutomaton.prompt2: -addi $sp, $sp, -152 +addi $sp, $sp, -136 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -10762,28 +9978,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 32($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 36($sp) move $t0, $sp lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -10791,7 +9993,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 20($sp) la $t0, s_56 -sw $t0, 44($sp) +sw $t0, 40($sp) li $a0, 20 li $v0, 9 syscall @@ -10805,46 +10007,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 48($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 52($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 56($sp) +sw $a1, 48($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 40($sp) +sw $a1, 36($sp) la $t0, s_57 -sw $t0, 64($sp) +sw $t0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -10858,73 +10046,45 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 72($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 76($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 60($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, CellularAutomaton_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, CellularAutomaton_methods -sw $t1, 12($t0) -sw $t0, 84($sp) +sw $a1, 52($sp) move $t0, $sp -lw $t1, 156($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 140($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 80($sp) -lw $t1, 80($sp) +sw $a1, 68($sp) +lw $t1, 68($sp) sw $t1, 16($sp) la $t0, s_58 -sw $t0, 112($sp) +sw $t0, 96($sp) li $a0, 20 li $v0, 9 syscall @@ -10938,25 +10098,25 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 116($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 112($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 120($sp) +sw $a1, 104($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_equals -sw $a1, 100($sp) +sw $a1, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -10970,17 +10130,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 96($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 96($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 124($sp) -lw $t0, 96($sp) +sw $a1, 108($sp) +lw $t0, 80($sp) lw $a0, 16($t0) bnez $a0, label_113 li $a0, 20 @@ -10996,20 +10156,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 128($sp) +sw $t0, 112($sp) li $t0, 0 -sw $t0, 132($sp) +sw $t0, 116($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 136($sp) -lw $t1, 128($sp) -sw $t1, 92($sp) +sw $a1, 120($sp) +lw $t1, 112($sp) +sw $t1, 76($sp) b label_114 label_113: li $a0, 20 @@ -11025,26 +10185,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 140($sp) +sw $t0, 124($sp) li $t0, 1 -sw $t0, 144($sp) +sw $t0, 128($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 128($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 148($sp) -lw $t1, 140($sp) -sw $t1, 92($sp) +sw $a1, 132($sp) +lw $t1, 124($sp) +sw $t1, 76($sp) label_114: -lw $t1, 92($sp) -sw $t1, 152($sp) -lw $a1, 152($sp) +lw $t1, 76($sp) +sw $t1, 136($sp) +lw $a1, 136($sp) lw $ra, 0($sp) -addi $sp, $sp, 160 +addi $sp, $sp, 144 jr $ra Main_init: addi $sp, $sp, -4 @@ -11064,7 +10224,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -192 +addi $sp, $sp, -172 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -11146,28 +10306,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 48($sp) -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 52($sp) move $t0, $sp lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -11175,7 +10321,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 36($sp) la $t0, s_60 -sw $t0, 60($sp) +sw $t0, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -11189,71 +10335,43 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 64($sp) +sw $t0, 60($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 68($sp) -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 72($sp) +sw $a1, 64($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 196($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 56($sp) +sw $a1, 52($sp) label_115: -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 84($sp) move $t0, $sp -lw $t1, 196($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 104($t2) jal $t3 -sw $a1, 80($sp) -lw $t0, 80($sp) +sw $a1, 72($sp) +lw $t0, 72($sp) lw $a0, 16($t0) bnez $a0, label_116 b label_117 @@ -11271,46 +10389,32 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 76($sp) li $t0, 1 -sw $t0, 92($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 96($sp) -lw $t1, 88($sp) +sw $a1, 84($sp) +lw $t1, 76($sp) sw $t1, 16($sp) -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 108($sp) move $t0, $sp -lw $t1, 196($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 96($t2) jal $t3 -sw $a1, 104($sp) -lw $t1, 104($sp) +sw $a1, 92($sp) +lw $t1, 92($sp) sw $t1, 32($sp) li $a0, 32 li $v0, 9 @@ -11325,76 +10429,62 @@ li $t1, 8 sw $t1, 8($t0) la $t1, CellularAutomaton_methods sw $t1, 12($t0) -sw $t0, 120($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 120($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal CellularAutomaton_init -sw $a1, 124($sp) +sw $a1, 108($sp) move $t0, $sp lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 104($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 116($sp) -lw $t0, 196($sp) -lw $t1, 116($sp) +sw $a1, 100($sp) +lw $t0, 176($sp) +lw $t1, 100($sp) sw $t1, 32($t0) -lw $t0, 196($sp) +lw $t0, 176($sp) lw $t1, 32($t0) -sw $t1, 184($sp) +sw $t1, 164($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 132($sp) +sw $a1, 116($sp) label_118: lw $t0, 16($sp) lw $a0, 16($t0) bnez $a0, label_119 b label_120 label_119: -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 152($sp) move $t0, $sp -lw $t1, 196($t0) +lw $t1, 176($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 176($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 100($t2) jal $t3 -sw $a1, 148($sp) -lw $t0, 148($sp) +sw $a1, 132($sp) +lw $t0, 132($sp) lw $a0, 16($t0) bnez $a0, label_121 li $a0, 20 @@ -11410,64 +10500,64 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 156($sp) +sw $t0, 136($sp) li $t0, 0 -sw $t0, 160($sp) +sw $t0, 140($sp) move $t0, $sp -lw $t1, 160($t0) +lw $t1, 140($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 156($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 164($sp) -lw $t1, 156($sp) +sw $a1, 144($sp) +lw $t1, 136($sp) sw $t1, 16($sp) -lw $t1, 156($sp) -sw $t1, 144($sp) +lw $t1, 136($sp) +sw $t1, 128($sp) b label_122 label_121: -lw $t0, 196($sp) +lw $t0, 176($sp) lw $t1, 32($t0) -sw $t1, 184($sp) +sw $t1, 164($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 92($t2) jal $t3 -sw $a1, 172($sp) -lw $t0, 196($sp) +sw $a1, 152($sp) +lw $t0, 176($sp) lw $t1, 32($t0) -sw $t1, 184($sp) +sw $t1, 164($sp) move $t0, $sp -lw $t1, 184($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 184($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 180($sp) -lw $t1, 180($sp) -sw $t1, 144($sp) +sw $a1, 160($sp) +lw $t1, 160($sp) +sw $t1, 128($sp) label_122: b label_118 label_120: b label_115 label_117: -lw $t1, 196($sp) -sw $t1, 188($sp) -lw $t1, 188($sp) -sw $t1, 192($sp) -lw $a1, 192($sp) +lw $t1, 176($sp) +sw $t1, 168($sp) +lw $t1, 168($sp) +sw $t1, 172($sp) +lw $a1, 172($sp) lw $ra, 0($sp) -addi $sp, $sp, 200 +addi $sp, $sp, 180 jr $ra \ No newline at end of file diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index c89f389c..eebbf747 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -668,28 +668,14 @@ lw $ra, 0($sp) addi $sp, $sp, 20 jr $ra List.head: -addi $sp, $sp, -20 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -709,42 +695,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 12($sp) +sw $t0, 8($sp) li $t0, 0 -sw $t0, 16($sp) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 20($sp) -lw $a1, 12($sp) +sw $a1, 16($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 24 jr $ra List.tail: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -754,9 +726,9 @@ lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 sw $a1, 4($sp) -lw $a1, 12($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 12 jr $ra List.cons: addi $sp, $sp, -12 @@ -935,14 +907,14 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.print_list: -addi $sp, $sp, -72 +addi $sp, $sp, -56 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -953,38 +925,24 @@ lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_1 move $t0, $sp -lw $t1, 80($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 sw $a1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 60($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -992,7 +950,7 @@ lw $t3, 16($t2) jal $t3 sw $a1, 12($sp) la $t0, s_3 -sw $t0, 28($sp) +sw $t0, 24($sp) li $a0, 20 li $v0, 9 syscall @@ -1006,89 +964,61 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 32($sp) +sw $t0, 28($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 36($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 40($sp) +sw $a1, 32($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 60($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 24($sp) +sw $a1, 20($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 80($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 52($sp) +sw $a1, 40($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 60($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 44($sp) -lw $t1, 44($sp) +sw $a1, 36($sp) +lw $t1, 36($sp) sw $t1, 4($sp) b label_2 label_1: la $t0, s_4 -sw $t0, 60($sp) +sw $t0, 48($sp) li $a0, 20 li $v0, 9 syscall @@ -1102,53 +1032,39 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 64($sp) +sw $t0, 52($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 48($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 68($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 72($sp) +sw $a1, 56($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 60($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 56($sp) -lw $t1, 56($sp) +sw $a1, 44($sp) +lw $t1, 44($sp) sw $t1, 4($sp) label_2: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 84 +addi $sp, $sp, 68 jr $ra Main.main: -addi $sp, $sp, -144 +addi $sp, $sp, -140 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -1366,18 +1282,18 @@ lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 sw $a1, 4($sp) -lw $t0, 148($sp) +lw $t0, 144($sp) lw $t1, 4($sp) sw $t1, 16($t0) label_3: -lw $t0, 148($sp) +lw $t0, 144($sp) lw $t1, 16($t0) -sw $t1, 140($sp) +sw $t1, 136($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 136($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1418,57 +1334,43 @@ lw $a0, 16($t0) bnez $a0, label_4 b label_5 label_4: -lw $t0, 148($sp) +lw $t0, 144($sp) lw $t1, 16($t0) -sw $t1, 140($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 132($sp) +sw $t1, 136($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 132($t0) +lw $t1, 144($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 sw $a1, 124($sp) -lw $t0, 148($sp) +lw $t0, 144($sp) lw $t1, 16($t0) -sw $t1, 140($sp) +sw $t1, 136($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 140($t0) +lw $t1, 136($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 136($sp) -lw $t0, 148($sp) -lw $t1, 136($sp) +sw $a1, 132($sp) +lw $t0, 144($sp) +lw $t1, 132($sp) sw $t1, 16($t0) b label_3 label_5: lw $a1, 96($sp) lw $ra, 0($sp) -addi $sp, $sp, 152 +addi $sp, $sp, 148 jr $ra \ No newline at end of file diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 5e261dfe..2e5e30c3 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -634,7 +634,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -176 +addi $sp, $sp, -160 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 24 @@ -807,28 +807,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 88($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 92($sp) move $t0, $sp lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -840,7 +826,7 @@ sw $t1, 44($sp) b label_2 label_1: la $t0, s_4 -sw $t0, 100($sp) +sw $t0, 96($sp) li $a0, 20 li $v0, 9 syscall @@ -854,45 +840,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 100($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 108($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 112($sp) +sw $a1, 104($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 96($sp) -lw $t1, 96($sp) +sw $a1, 92($sp) +lw $t1, 92($sp) sw $t1, 44($sp) label_2: move $t0, $sp @@ -905,18 +877,18 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 40($t2) jal $t3 -sw $a1, 128($sp) +sw $a1, 120($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 128($t0) +lw $t1, 120($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 124($sp) +sw $a1, 116($sp) move $t0, $sp lw $t1, 40($t0) addi $sp, $sp, -4 @@ -927,26 +899,26 @@ beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 36($t2) jal $t3 -sw $a1, 132($sp) +sw $a1, 124($sp) move $t0, $sp -lw $t1, 132($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 116($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 116($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 120($sp) -lw $t0, 120($sp) +sw $a1, 112($sp) +lw $t0, 112($sp) lw $a0, 16($t0) bnez $a0, label_3 la $t0, s_3 -sw $t0, 140($sp) +sw $t0, 132($sp) li $a0, 20 li $v0, 9 syscall @@ -960,50 +932,36 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 144($sp) +sw $t0, 136($sp) move $t0, $sp -lw $t1, 140($t0) +lw $t1, 132($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 144($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 148($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 152($sp) +sw $a1, 140($sp) move $t0, $sp -lw $t1, 144($t0) +lw $t1, 136($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 152($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 136($sp) -lw $t1, 136($sp) -sw $t1, 116($sp) +sw $a1, 128($sp) +lw $t1, 128($sp) +sw $t1, 108($sp) b label_4 label_3: la $t0, s_4 -sw $t0, 160($sp) +sw $t0, 148($sp) li $a0, 20 li $v0, 9 syscall @@ -1017,52 +975,38 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 164($sp) +sw $t0, 152($sp) move $t0, $sp -lw $t1, 160($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 164($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 168($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 172($sp) +sw $a1, 156($sp) move $t0, $sp -lw $t1, 164($t0) +lw $t1, 152($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 180($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 172($t0) +lw $t1, 164($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 156($sp) -lw $t1, 156($sp) -sw $t1, 116($sp) +sw $a1, 144($sp) +lw $t1, 144($sp) +sw $t1, 108($sp) label_4: -lw $t1, 116($sp) -sw $t1, 176($sp) -lw $a1, 176($sp) +lw $t1, 108($sp) +sw $t1, 160($sp) +lw $a1, 160($sp) lw $ra, 0($sp) -addi $sp, $sp, 184 +addi $sp, $sp, 168 jr $ra Complex_init: addi $sp, $sp, -28 @@ -1215,12 +1159,12 @@ lw $ra, 0($sp) addi $sp, $sp, 64 jr $ra Complex.print: -addi $sp, $sp, -104 +addi $sp, $sp, -96 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 108($sp) +lw $t0, 100($sp) lw $t1, 20($t0) -sw $t1, 80($sp) +sw $t1, 76($sp) li $a0, 20 li $v0, 9 syscall @@ -1246,7 +1190,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 36($sp) -lw $t0, 80($sp) +lw $t0, 76($sp) lw $t1, 16($t0) sw $t1, 16($sp) lw $t0, 28($sp) @@ -1282,31 +1226,17 @@ sw $a1, 40($sp) lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_5 -lw $t0, 108($sp) +lw $t0, 100($sp) lw $t1, 16($t0) -sw $t1, 100($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Complex_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Complex_methods -sw $t1, 12($t0) -sw $t0, 64($sp) +sw $t1, 96($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 64($t0) +lw $t1, 100($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1314,7 +1244,7 @@ lw $t3, 16($t2) jal $t3 sw $a1, 56($sp) la $t0, s_5 -sw $t0, 68($sp) +sw $t0, 64($sp) li $a0, 20 li $v0, 9 syscall @@ -1328,18 +1258,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 68($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 76($sp) +sw $a1, 72($sp) move $t0, $sp -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 56($t0) @@ -1352,11 +1282,11 @@ lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 52($sp) -lw $t0, 108($sp) +lw $t0, 100($sp) lw $t1, 20($t0) -sw $t1, 80($sp) +sw $t1, 76($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 52($t0) @@ -1370,7 +1300,7 @@ lw $t3, 16($t2) jal $t3 sw $a1, 48($sp) la $t0, s_6 -sw $t0, 84($sp) +sw $t0, 80($sp) li $a0, 20 li $v0, 9 syscall @@ -1384,18 +1314,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 84($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 92($sp) +sw $a1, 88($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 48($t0) @@ -1412,43 +1342,29 @@ lw $t1, 44($sp) sw $t1, 4($sp) b label_6 label_5: -lw $t0, 108($sp) +lw $t0, 100($sp) lw $t1, 16($t0) -sw $t1, 100($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Complex_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Complex_methods -sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t1, 96($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 100($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 96($sp) -lw $t1, 96($sp) +sw $a1, 92($sp) +lw $t1, 92($sp) sw $t1, 4($sp) label_6: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 112 +addi $sp, $sp, 104 jr $ra Complex.reflect_0: addi $sp, $sp, -88 diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 62b079a6..b205887a 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -645,14 +645,14 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Main.pal: -addi $sp, $sp, -280 +addi $sp, $sp, -276 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 288($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -721,10 +721,10 @@ lw $t0, 8($sp) lw $a0, 16($t0) bnez $a0, label_1 move $t0, $sp -lw $t1, 288($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -849,10 +849,10 @@ sw $t1, 0($sp) lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -885,10 +885,10 @@ sw $t1, 0($sp) jal Int_init sw $a1, 144($sp) move $t0, $sp -lw $t1, 288($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -960,10 +960,10 @@ sw $t1, 0($sp) lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1035,10 +1035,10 @@ sw $t1, 84($sp) b label_4 label_3: move $t0, $sp -lw $t1, 288($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1135,38 +1135,24 @@ sw $t1, 0($sp) lw $t1, 244($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 288($t0) +lw $t1, 284($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 204($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 256($sp) move $t0, $sp lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 284($t0) +lw $t1, 280($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 256($t0) +lw $t1, 280($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1193,19 +1179,19 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 260($sp) +sw $t0, 256($sp) li $t0, 1 -sw $t0, 264($sp) +sw $t0, 260($sp) move $t0, $sp -lw $t1, 264($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 268($sp) -lw $t1, 260($sp) +sw $a1, 264($sp) +lw $t1, 256($sp) sw $t1, 44($sp) label_5: lw $t1, 44($sp) @@ -1225,27 +1211,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 272($sp) +sw $t0, 268($sp) li $t0, 1 -sw $t0, 276($sp) +sw $t0, 272($sp) move $t0, $sp -lw $t1, 276($t0) +lw $t1, 272($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 272($t0) +lw $t1, 268($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 280($sp) -lw $t1, 272($sp) +sw $a1, 276($sp) +lw $t1, 268($sp) sw $t1, 4($sp) label_6: lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 292 +addi $sp, $sp, 288 jr $ra Main.main: -addi $sp, $sp, -112 +addi $sp, $sp, -92 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 20 @@ -1302,7 +1288,7 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init sw $a1, 28($sp) -lw $t0, 116($sp) +lw $t0, 96($sp) lw $t1, 4($sp) sw $t1, 16($t0) la $t0, s_3 @@ -1330,92 +1316,50 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 52($sp) move $t0, $sp lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 36($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 68($sp) move $t0, $sp -lw $t1, 116($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 64($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 72($sp) +sw $a1, 60($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 60($sp) -lw $t0, 60($sp) +sw $a1, 56($sp) +lw $t0, 56($sp) lw $a0, 16($t0) bnez $a0, label_7 la $t0, s_4 -sw $t0, 80($sp) +sw $t0, 68($sp) li $a0, 20 li $v0, 9 syscall @@ -1429,50 +1373,36 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 92($sp) +sw $a1, 76($sp) move $t0, $sp -lw $t1, 84($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 92($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 76($sp) -lw $t1, 76($sp) -sw $t1, 56($sp) +sw $a1, 64($sp) +lw $t1, 64($sp) +sw $t1, 52($sp) b label_8 label_7: la $t0, s_5 -sw $t0, 100($sp) +sw $t0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -1486,48 +1416,34 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 100($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 108($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 112($sp) +sw $a1, 92($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 96($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 112($t0) +lw $t1, 96($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 96($sp) -lw $t1, 96($sp) -sw $t1, 56($sp) +sw $a1, 80($sp) +lw $t1, 80($sp) +sw $t1, 52($sp) label_8: -lw $a1, 56($sp) +lw $a1, 52($sp) lw $ra, 0($sp) -addi $sp, $sp, 120 +addi $sp, $sp, 100 jr $ra \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 0a487263..1983e81f 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -603,11 +603,11 @@ lw $ra, 0($sp) addi $sp, $sp, 24 jr $ra Main_init: -addi $sp, $sp, -552 +addi $sp, $sp, -540 addi $sp, $sp, -4 sw $ra, 0($sp) move $t0, $sp -lw $t1, 556($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal IO_init @@ -638,28 +638,14 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 20($sp) -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 24($sp) move $t0, $sp lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 556($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -679,26 +665,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 28($sp) +sw $t0, 24($sp) li $t0, 2 -sw $t0, 32($sp) +sw $t0, 28($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 36($sp) -lw $t0, 556($sp) -lw $t1, 28($sp) +sw $a1, 32($sp) +lw $t0, 544($sp) +lw $t1, 24($sp) sw $t1, 16($t0) -lw $t0, 556($sp) +lw $t0, 544($sp) lw $t1, 16($t0) -sw $t1, 468($sp) -lw $t0, 556($sp) -lw $t1, 468($sp) +sw $t1, 464($sp) +lw $t0, 544($sp) +lw $t1, 464($sp) sw $t1, 20($t0) li $a0, 20 li $v0, 9 @@ -713,20 +699,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 44($sp) +sw $t0, 40($sp) li $t0, 0 -sw $t0, 48($sp) +sw $t0, 44($sp) move $t0, $sp -lw $t1, 48($t0) +lw $t1, 44($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 52($sp) -lw $t0, 556($sp) -lw $t1, 44($sp) +sw $a1, 48($sp) +lw $t0, 544($sp) +lw $t1, 40($sp) sw $t1, 24($t0) li $a0, 20 li $v0, 9 @@ -741,20 +727,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 56($sp) +sw $t0, 52($sp) li $t0, 500 -sw $t0, 60($sp) +sw $t0, 56($sp) move $t0, $sp -lw $t1, 60($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 64($sp) -lw $t0, 556($sp) -lw $t1, 56($sp) +sw $a1, 60($sp) +lw $t0, 544($sp) +lw $t1, 52($sp) sw $t1, 28($t0) label_1: li $a0, 20 @@ -770,26 +756,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 72($sp) +sw $t0, 68($sp) li $t0, 1 -sw $t0, 76($sp) +sw $t0, 72($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 72($t0) +lw $t1, 68($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 80($sp) -lw $t0, 72($sp) +sw $a1, 76($sp) +lw $t0, 68($sp) lw $a0, 16($t0) bnez $a0, label_2 b label_3 label_2: -lw $t0, 556($sp) +lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 520($sp) +sw $t1, 508($sp) li $a0, 20 li $v0, 9 syscall @@ -803,28 +789,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 104($sp) +sw $t0, 100($sp) li $t0, 1 -sw $t0, 108($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 104($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 112($sp) -lw $t0, 520($sp) +sw $a1, 108($sp) +lw $t0, 508($sp) lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t0, 104($sp) +sw $t1, 88($sp) +lw $t0, 100($sp) lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) +sw $t1, 92($sp) +lw $a0, 88($sp) +lw $t1, 92($sp) add $a0, $a0, $t1 -sw $a0, 88($sp) +sw $a0, 84($sp) li $a0, 20 li $v0, 9 syscall @@ -838,18 +824,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 84($sp) +sw $t0, 80($sp) move $t0, $sp -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 84($t0) +lw $t1, 80($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 116($sp) -lw $t0, 556($sp) -lw $t1, 84($sp) +sw $a1, 112($sp) +lw $t0, 544($sp) +lw $t1, 80($sp) sw $t1, 20($t0) li $a0, 20 li $v0, 9 @@ -864,41 +850,41 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 124($sp) +sw $t0, 120($sp) li $t0, 2 -sw $t0, 128($sp) +sw $t0, 124($sp) move $t0, $sp -lw $t1, 128($t0) +lw $t1, 124($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 124($t0) +lw $t1, 120($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 132($sp) -lw $t0, 556($sp) -lw $t1, 124($sp) +sw $a1, 128($sp) +lw $t0, 544($sp) +lw $t1, 120($sp) sw $t1, 24($t0) label_4: -lw $t0, 556($sp) +lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 520($sp) -lw $t0, 556($sp) +sw $t1, 508($sp) +lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 432($sp) -lw $t0, 556($sp) +sw $t1, 428($sp) +lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 432($sp) -lw $t0, 432($sp) +sw $t1, 428($sp) +lw $t0, 428($sp) lw $t1, 16($t0) -sw $t1, 176($sp) -lw $t0, 432($sp) +sw $t1, 172($sp) +lw $t0, 428($sp) lw $t1, 16($t0) -sw $t1, 180($sp) -lw $a0, 176($sp) -lw $t1, 180($sp) +sw $t1, 176($sp) +lw $a0, 172($sp) +lw $t1, 176($sp) mul $a0, $a0, $t1 -sw $a0, 172($sp) +sw $a0, 168($sp) li $a0, 20 li $v0, 9 syscall @@ -912,26 +898,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 168($sp) +sw $t0, 164($sp) move $t0, $sp -lw $t1, 172($t0) +lw $t1, 168($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 168($t0) +lw $t1, 164($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 192($sp) -lw $t0, 520($sp) +sw $a1, 188($sp) +lw $t0, 508($sp) lw $t1, 16($t0) -sw $t1, 156($sp) -lw $t0, 168($sp) +sw $t1, 152($sp) +lw $t0, 164($sp) lw $t1, 16($t0) -sw $t1, 160($sp) -lw $a0, 156($sp) -lw $t1, 160($sp) +sw $t1, 156($sp) +lw $a0, 152($sp) +lw $t1, 156($sp) slt $a0, $a0, $t1 -sw $a0, 152($sp) +sw $a0, 148($sp) li $a0, 20 li $v0, 9 syscall @@ -945,42 +931,42 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 148($sp) +sw $t0, 144($sp) move $t0, $sp -lw $t1, 152($t0) +lw $t1, 148($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 148($t0) +lw $t1, 144($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 196($sp) -lw $t0, 148($sp) +sw $a1, 192($sp) +lw $t0, 144($sp) lw $a0, 16($t0) bnez $a0, label_7 -lw $t0, 556($sp) +lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 520($sp) -lw $t0, 556($sp) +sw $t1, 508($sp) +lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 432($sp) -lw $t0, 556($sp) +sw $t1, 428($sp) +lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 520($sp) -lw $t0, 556($sp) +sw $t1, 508($sp) +lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 432($sp) -lw $t0, 520($sp) +sw $t1, 428($sp) +lw $t0, 508($sp) lw $t1, 16($t0) -sw $t1, 268($sp) -lw $t0, 432($sp) +sw $t1, 264($sp) +lw $t0, 428($sp) lw $t1, 16($t0) -sw $t1, 272($sp) -lw $a0, 268($sp) -lw $t1, 272($sp) +sw $t1, 268($sp) +lw $a0, 264($sp) +lw $t1, 268($sp) beq $t1, 0, div_zero_error div $a0, $a0, $t1 -sw $a0, 264($sp) +sw $a0, 260($sp) li $a0, 20 li $v0, 9 syscall @@ -994,26 +980,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 260($sp) +sw $t0, 256($sp) move $t0, $sp -lw $t1, 264($t0) +lw $t1, 260($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 260($t0) +lw $t1, 256($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 284($sp) -lw $t0, 432($sp) +sw $a1, 280($sp) +lw $t0, 428($sp) lw $t1, 16($t0) -sw $t1, 248($sp) -lw $t0, 260($sp) +sw $t1, 244($sp) +lw $t0, 256($sp) lw $t1, 16($t0) -sw $t1, 252($sp) -lw $a0, 248($sp) -lw $t1, 252($sp) +sw $t1, 248($sp) +lw $a0, 244($sp) +lw $t1, 248($sp) mul $a0, $a0, $t1 -sw $a0, 244($sp) +sw $a0, 240($sp) li $a0, 20 li $v0, 9 syscall @@ -1027,26 +1013,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 240($sp) +sw $t0, 236($sp) move $t0, $sp -lw $t1, 244($t0) +lw $t1, 240($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 240($t0) +lw $t1, 236($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 288($sp) -lw $t0, 520($sp) +sw $a1, 284($sp) +lw $t0, 508($sp) lw $t1, 16($t0) -sw $t1, 228($sp) -lw $t0, 240($sp) +sw $t1, 224($sp) +lw $t0, 236($sp) lw $t1, 16($t0) -sw $t1, 232($sp) -lw $a0, 228($sp) -lw $t1, 232($sp) +sw $t1, 228($sp) +lw $a0, 224($sp) +lw $t1, 228($sp) sub $a0, $a0, $t1 -sw $a0, 224($sp) +sw $a0, 220($sp) li $a0, 20 li $v0, 9 syscall @@ -1060,16 +1046,16 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 220($sp) +sw $t0, 216($sp) move $t0, $sp -lw $t1, 224($t0) +lw $t1, 220($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 220($t0) +lw $t1, 216($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 292($sp) +sw $a1, 288($sp) li $a0, 20 li $v0, 9 syscall @@ -1083,28 +1069,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 296($sp) +sw $t0, 292($sp) li $t0, 0 -sw $t0, 300($sp) +sw $t0, 296($sp) move $t0, $sp -lw $t1, 300($t0) +lw $t1, 296($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 296($t0) +lw $t1, 292($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 304($sp) -lw $t0, 220($sp) +sw $a1, 300($sp) +lw $t0, 216($sp) lw $t1, 16($t0) -sw $t1, 212($sp) -lw $t0, 296($sp) +sw $t1, 208($sp) +lw $t0, 292($sp) lw $t1, 16($t0) -sw $t1, 216($sp) -lw $a0, 212($sp) -lw $t1, 216($sp) +sw $t1, 212($sp) +lw $a0, 208($sp) +lw $t1, 212($sp) seq $a0, $a0, $t1 -sw $a0, 208($sp) +sw $a0, 204($sp) li $a0, 20 li $v0, 9 syscall @@ -1118,17 +1104,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 204($sp) +sw $t0, 200($sp) move $t0, $sp -lw $t1, 208($t0) +lw $t1, 204($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 204($t0) +lw $t1, 200($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 308($sp) -lw $t0, 204($sp) +sw $a1, 304($sp) +lw $t0, 200($sp) lw $a0, 16($t0) bnez $a0, label_8 li $a0, 20 @@ -1144,20 +1130,20 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 312($sp) +sw $t0, 308($sp) li $t0, 1 -sw $t0, 316($sp) +sw $t0, 312($sp) move $t0, $sp -lw $t1, 316($t0) +lw $t1, 312($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 312($t0) +lw $t1, 308($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 320($sp) -lw $t1, 312($sp) -sw $t1, 200($sp) +sw $a1, 316($sp) +lw $t1, 308($sp) +sw $t1, 196($sp) b label_9 label_8: li $a0, 20 @@ -1173,23 +1159,23 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 324($sp) +sw $t0, 320($sp) li $t0, 0 -sw $t0, 328($sp) +sw $t0, 324($sp) move $t0, $sp -lw $t1, 328($t0) +lw $t1, 324($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 324($t0) +lw $t1, 320($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 332($sp) -lw $t1, 324($sp) -sw $t1, 200($sp) +sw $a1, 328($sp) +lw $t1, 320($sp) +sw $t1, 196($sp) label_9: -lw $t1, 200($sp) -sw $t1, 144($sp) +lw $t1, 196($sp) +sw $t1, 140($sp) b label_10 label_7: li $a0, 20 @@ -1205,29 +1191,29 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 336($sp) +sw $t0, 332($sp) li $t0, 0 -sw $t0, 340($sp) +sw $t0, 336($sp) move $t0, $sp -lw $t1, 340($t0) +lw $t1, 336($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 336($t0) +lw $t1, 332($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 344($sp) -lw $t1, 336($sp) -sw $t1, 144($sp) +sw $a1, 340($sp) +lw $t1, 332($sp) +sw $t1, 140($sp) label_10: -lw $t0, 144($sp) +lw $t0, 140($sp) lw $a0, 16($t0) bnez $a0, label_5 b label_6 label_5: -lw $t0, 556($sp) +lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 432($sp) +sw $t1, 428($sp) li $a0, 20 li $v0, 9 syscall @@ -1241,28 +1227,28 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 368($sp) +sw $t0, 364($sp) li $t0, 1 -sw $t0, 372($sp) +sw $t0, 368($sp) move $t0, $sp -lw $t1, 372($t0) +lw $t1, 368($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 368($t0) +lw $t1, 364($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 376($sp) -lw $t0, 432($sp) +sw $a1, 372($sp) +lw $t0, 428($sp) lw $t1, 16($t0) -sw $t1, 356($sp) -lw $t0, 368($sp) +sw $t1, 352($sp) +lw $t0, 364($sp) lw $t1, 16($t0) -sw $t1, 360($sp) -lw $a0, 356($sp) -lw $t1, 360($sp) +sw $t1, 356($sp) +lw $a0, 352($sp) +lw $t1, 356($sp) add $a0, $a0, $t1 -sw $a0, 352($sp) +sw $a0, 348($sp) li $a0, 20 li $v0, 9 syscall @@ -1276,40 +1262,40 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 348($sp) +sw $t0, 344($sp) move $t0, $sp -lw $t1, 352($t0) +lw $t1, 348($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 348($t0) +lw $t1, 344($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 380($sp) -lw $t0, 556($sp) -lw $t1, 348($sp) +sw $a1, 376($sp) +lw $t0, 544($sp) +lw $t1, 344($sp) sw $t1, 24($t0) b label_4 label_6: -lw $t0, 556($sp) +lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 520($sp) -lw $t0, 556($sp) +sw $t1, 508($sp) +lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 432($sp) -lw $t0, 556($sp) +sw $t1, 428($sp) +lw $t0, 544($sp) lw $t1, 24($t0) -sw $t1, 432($sp) -lw $t0, 432($sp) +sw $t1, 428($sp) +lw $t0, 428($sp) lw $t1, 16($t0) -sw $t1, 420($sp) -lw $t0, 432($sp) +sw $t1, 416($sp) +lw $t0, 428($sp) lw $t1, 16($t0) -sw $t1, 424($sp) -lw $a0, 420($sp) -lw $t1, 424($sp) +sw $t1, 420($sp) +lw $a0, 416($sp) +lw $t1, 420($sp) mul $a0, $a0, $t1 -sw $a0, 416($sp) +sw $a0, 412($sp) li $a0, 20 li $v0, 9 syscall @@ -1323,26 +1309,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 412($sp) +sw $t0, 408($sp) move $t0, $sp -lw $t1, 416($t0) +lw $t1, 412($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 412($t0) +lw $t1, 408($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 436($sp) -lw $t0, 520($sp) +sw $a1, 432($sp) +lw $t0, 508($sp) lw $t1, 16($t0) -sw $t1, 400($sp) -lw $t0, 412($sp) +sw $t1, 396($sp) +lw $t0, 408($sp) lw $t1, 16($t0) -sw $t1, 404($sp) -lw $a0, 400($sp) -lw $t1, 404($sp) +sw $t1, 400($sp) +lw $a0, 396($sp) +lw $t1, 400($sp) slt $a0, $a0, $t1 -sw $a0, 396($sp) +sw $a0, 392($sp) li $a0, 20 li $v0, 9 syscall @@ -1356,17 +1342,17 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 392($sp) +sw $t0, 388($sp) move $t0, $sp -lw $t1, 396($t0) +lw $t1, 392($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 392($t0) +lw $t1, 388($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 440($sp) -lw $t0, 392($sp) +sw $a1, 436($sp) +lw $t0, 388($sp) lw $a0, 16($t0) bnez $a0, label_11 li $a0, 20 @@ -1382,61 +1368,47 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 444($sp) +sw $t0, 440($sp) li $t0, 0 -sw $t0, 448($sp) +sw $t0, 444($sp) move $t0, $sp -lw $t1, 448($t0) +lw $t1, 444($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 444($t0) +lw $t1, 440($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 452($sp) -lw $t1, 444($sp) -sw $t1, 388($sp) +sw $a1, 448($sp) +lw $t1, 440($sp) +sw $t1, 384($sp) b label_12 label_11: -lw $t0, 556($sp) +lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 520($sp) -lw $t0, 556($sp) -lw $t1, 520($sp) +sw $t1, 508($sp) +lw $t0, 544($sp) +lw $t1, 508($sp) sw $t1, 16($t0) -lw $t0, 556($sp) +lw $t0, 544($sp) lw $t1, 16($t0) -sw $t1, 468($sp) -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 472($sp) +sw $t1, 464($sp) move $t0, $sp -lw $t1, 468($t0) +lw $t1, 464($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 556($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 472($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 16($t2) jal $t3 -sw $a1, 464($sp) +sw $a1, 460($sp) la $t0, s_4 -sw $t0, 480($sp) +sw $t0, 472($sp) li $a0, 20 li $v0, 9 syscall @@ -1450,63 +1422,49 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 484($sp) +sw $t0, 476($sp) move $t0, $sp -lw $t1, 480($t0) +lw $t1, 472($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 484($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 488($sp) -li $a0, 36 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 9 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 492($sp) +sw $a1, 480($sp) move $t0, $sp -lw $t1, 484($t0) +lw $t1, 476($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 556($t0) +lw $t1, 544($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 492($t0) +lw $t1, 544($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 476($sp) -lw $t1, 476($sp) -sw $t1, 388($sp) +sw $a1, 468($sp) +lw $t1, 468($sp) +sw $t1, 384($sp) label_12: -lw $t0, 556($sp) +lw $t0, 544($sp) lw $t1, 28($t0) -sw $t1, 516($sp) -lw $t0, 556($sp) +sw $t1, 504($sp) +lw $t0, 544($sp) lw $t1, 20($t0) -sw $t1, 520($sp) -lw $t0, 516($sp) -lw $t1, 16($t0) sw $t1, 508($sp) -lw $t0, 520($sp) +lw $t0, 504($sp) +lw $t1, 16($t0) +sw $t1, 496($sp) +lw $t0, 508($sp) lw $t1, 16($t0) -sw $t1, 512($sp) -lw $a0, 508($sp) -lw $t1, 512($sp) +sw $t1, 500($sp) +lw $a0, 496($sp) +lw $t1, 500($sp) sle $a0, $a0, $t1 -sw $a0, 504($sp) +sw $a0, 492($sp) li $a0, 20 li $v0, 9 syscall @@ -1520,21 +1478,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 500($sp) +sw $t0, 488($sp) move $t0, $sp -lw $t1, 504($t0) +lw $t1, 492($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 500($t0) +lw $t1, 488($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 524($sp) -lw $t0, 500($sp) +sw $a1, 512($sp) +lw $t0, 488($sp) lw $a0, 16($t0) bnez $a0, label_13 la $t0, s_5 -sw $t0, 528($sp) +sw $t0, 516($sp) li $a0, 20 li $v0, 9 syscall @@ -1548,22 +1506,22 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 532($sp) +sw $t0, 520($sp) move $t0, $sp -lw $t1, 528($t0) +lw $t1, 516($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 532($t0) +lw $t1, 520($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 536($sp) -lw $t1, 532($sp) -sw $t1, 496($sp) +sw $a1, 524($sp) +lw $t1, 520($sp) +sw $t1, 484($sp) b label_14 label_13: la $t0, s_6 -sw $t0, 544($sp) +sw $t0, 532($sp) li $a0, 20 li $v0, 9 syscall @@ -1577,37 +1535,37 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 548($sp) +sw $t0, 536($sp) move $t0, $sp -lw $t1, 544($t0) +lw $t1, 532($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 552($sp) +sw $a1, 540($sp) move $t0, $sp -lw $t1, 548($t0) +lw $t1, 536($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 548($t0) +lw $t1, 536($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 0($t2) jal $t3 -sw $a1, 540($sp) -lw $t1, 540($sp) -sw $t1, 496($sp) +sw $a1, 528($sp) +lw $t1, 528($sp) +sw $t1, 484($sp) label_14: b label_1 label_3: -lw $t0, 556($sp) -lw $t1, 68($sp) +lw $t0, 544($sp) +lw $t1, 64($sp) sw $t1, 32($t0) lw $ra, 0($sp) -addi $sp, $sp, 560 +addi $sp, $sp, 548 jr $ra Main.main: addi $sp, $sp, -12 diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index be72ff48..15e04282 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -614,7 +614,7 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra Main.main: -addi $sp, $sp, -116 +addi $sp, $sp, -108 addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 16 @@ -715,28 +715,14 @@ lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 sw $a1, 12($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 52($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 112($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -744,9 +730,9 @@ lw $t3, 12($t2) jal $t3 sw $a1, 8($sp) la $t0, void -lw $t1, 120($sp) +lw $t1, 112($sp) seq $a0, $t0, $t1 -sw $a0, 64($sp) +sw $a0, 60($sp) li $a0, 20 li $v0, 9 syscall @@ -760,27 +746,27 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 68($sp) +sw $t0, 64($sp) move $t0, $sp -lw $t1, 64($t0) +lw $t1, 60($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 72($sp) +sw $a1, 68($sp) move $t0, $sp -lw $t1, 68($t0) +lw $t1, 64($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 68($t0) +lw $t1, 64($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 4($t2) jal $t3 -sw $a1, 60($sp) +sw $a1, 56($sp) li $a0, 20 li $v0, 9 syscall @@ -794,18 +780,18 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 76($sp) +sw $t0, 72($sp) li $t0, 3 -sw $t0, 80($sp) +sw $t0, 76($sp) move $t0, $sp -lw $t1, 80($t0) +lw $t1, 76($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 84($sp) +sw $a1, 80($sp) li $a0, 20 li $v0, 9 syscall @@ -819,37 +805,37 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 88($sp) +sw $t0, 84($sp) li $t0, 1 -sw $t0, 92($sp) +sw $t0, 88($sp) move $t0, $sp -lw $t1, 92($t0) +lw $t1, 88($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 96($sp) +sw $a1, 92($sp) move $t0, $sp -lw $t1, 76($t0) +lw $t1, 72($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 88($t0) +lw $t1, 84($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 56($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 60($t0) +lw $t1, 56($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 20($t2) jal $t3 -sw $a1, 56($sp) +sw $a1, 52($sp) move $t0, $sp -lw $t1, 56($t0) +lw $t1, 52($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -863,7 +849,7 @@ lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) la $t0, s_3 -sw $t0, 104($sp) +sw $t0, 100($sp) li $a0, 20 li $v0, 9 syscall @@ -877,45 +863,31 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 108($sp) +sw $t0, 104($sp) move $t0, $sp -lw $t1, 104($t0) +lw $t1, 100($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 108($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 112($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 116($sp) +sw $a1, 108($sp) move $t0, $sp -lw $t1, 108($t0) +lw $t1, 104($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 120($t0) +lw $t1, 112($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 116($t0) +lw $t1, 112($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 100($sp) -lw $a1, 100($sp) +sw $a1, 96($sp) +lw $a1, 96($sp) lw $ra, 0($sp) -addi $sp, $sp, 124 +addi $sp, $sp, 116 jr $ra \ No newline at end of file diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index c41effce..16386dea 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -671,28 +671,14 @@ lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra List.isNil: -addi $sp, $sp, -20 +addi $sp, $sp, -16 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 20($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -712,21 +698,21 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Bool_methods sw $t1, 12($t0) -sw $t0, 12($sp) +sw $t0, 8($sp) li $t0, 1 -sw $t0, 16($sp) +sw $t0, 12($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Bool_init -sw $a1, 20($sp) -lw $a1, 12($sp) +sw $a1, 16($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 28 +addi $sp, $sp, 24 jr $ra List.cons: addi $sp, $sp, -20 @@ -778,28 +764,14 @@ lw $ra, 0($sp) addi $sp, $sp, 32 jr $ra List.car: -addi $sp, $sp, -16 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 16($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -819,40 +791,26 @@ li $t1, 5 sw $t1, 8($t0) la $t1, Int_methods sw $t1, 12($t0) -sw $t0, 12($sp) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal Int_init -sw $a1, 16($sp) -lw $a1, 12($sp) +sw $a1, 12($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 20 jr $ra List.cdr: -addi $sp, $sp, -16 +addi $sp, $sp, -12 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 8($t0) +lw $t1, 16($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -872,37 +830,23 @@ li $t1, 4 sw $t1, 8($t0) la $t1, List_methods sw $t1, 12($t0) -sw $t0, 12($sp) +sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal List_init -sw $a1, 16($sp) -lw $a1, 12($sp) +sw $a1, 12($sp) +lw $a1, 8($sp) lw $ra, 0($sp) -addi $sp, $sp, 24 +addi $sp, $sp, 20 jr $ra List.rev: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -914,28 +858,14 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 12 jr $ra List.sort: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -947,28 +877,14 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 12 jr $ra List.insert: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -980,28 +896,14 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 16 jr $ra List.rcons: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1013,28 +915,14 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 16 jr $ra List.print_list: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, List_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, List_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1046,7 +934,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 16 +addi $sp, $sp, 12 jr $ra Cons_init: addi $sp, $sp, -16 @@ -1454,34 +1342,20 @@ lw $ra, 0($sp) addi $sp, $sp, 36 jr $ra Cons.print_list: -addi $sp, $sp, -40 +addi $sp, $sp, -32 addi $sp, $sp, -4 sw $ra, 0($sp) -lw $t0, 44($sp) +lw $t0, 36($sp) lw $t1, 16($t0) sw $t1, 8($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Cons_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Cons_methods -sw $t1, 12($t0) -sw $t0, 12($sp) move $t0, $sp lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) @@ -1489,7 +1363,7 @@ lw $t3, 16($t2) jal $t3 sw $a1, 4($sp) la $t0, s_3 -sw $t0, 20($sp) +sw $t0, 16($sp) li $a0, 20 li $v0, 9 syscall @@ -1503,61 +1377,47 @@ li $t1, 5 sw $t1, 8($t0) la $t1, String_methods sw $t1, 12($t0) -sw $t0, 24($sp) +sw $t0, 20($sp) move $t0, $sp -lw $t1, 20($t0) +lw $t1, 16($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init -sw $a1, 28($sp) -li $a0, 24 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Cons_name -sw $t1, 4($t0) -li $t1, 6 -sw $t1, 8($t0) -la $t1, Cons_methods -sw $t1, 12($t0) -sw $t0, 32($sp) +sw $a1, 24($sp) move $t0, $sp -lw $t1, 24($t0) +lw $t1, 20($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 36($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 -sw $a1, 16($sp) -lw $t0, 44($sp) +sw $a1, 12($sp) +lw $t0, 36($sp) lw $t1, 20($t0) -sw $t1, 40($sp) +sw $t1, 32($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 40($t0) +lw $t1, 32($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 60($t2) jal $t3 -sw $a1, 36($sp) -lw $a1, 36($sp) +sw $a1, 28($sp) +lw $a1, 28($sp) lw $ra, 0($sp) -addi $sp, $sp, 48 +addi $sp, $sp, 40 jr $ra Nil_init: addi $sp, $sp, -4 @@ -1623,28 +1483,14 @@ lw $ra, 0($sp) addi $sp, $sp, 8 jr $ra Nil.insert: -addi $sp, $sp, -8 +addi $sp, $sp, -4 addi $sp, $sp, -4 sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, Nil_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, Nil_methods -sw $t1, 12($t0) -sw $t0, 8($sp) move $t0, $sp -lw $t1, 16($t0) +lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 12($t0) +lw $t1, 8($t0) addi $sp, $sp, -4 sw $t1, 0($sp) lw $t1, 8($t0) @@ -1656,7 +1502,7 @@ jal $t3 sw $a1, 4($sp) lw $a1, 4($sp) lw $ra, 0($sp) -addi $sp, $sp, 20 +addi $sp, $sp, 16 jr $ra Nil.rcons: addi $sp, $sp, -12 @@ -1961,7 +1807,7 @@ lw $ra, 0($sp) addi $sp, $sp, 128 jr $ra Main.main: -addi $sp, $sp, -48 +addi $sp, $sp, -36 addi $sp, $sp, -4 sw $ra, 0($sp) la $t0, s_4 @@ -1989,121 +1835,79 @@ addi $sp, $sp, -4 sw $t1, 0($sp) jal String_init sw $a1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 20($sp) move $t0, $sp lw $t1, 12($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 20($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 12($t2) jal $t3 sw $a1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 44($sp) move $t0, $sp -lw $t1, 52($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 44($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 24($t2) jal $t3 -sw $a1, 40($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 48($sp) +sw $a1, 36($sp) move $t0, $sp -lw $t1, 40($t0) +lw $t1, 36($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 52($t0) +lw $t1, 40($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 48($t0) +lw $t1, 40($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 28($t2) jal $t3 -sw $a1, 36($sp) +sw $a1, 32($sp) move $t0, $sp -lw $t1, 36($t0) +lw $t1, 32($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 36($t0) +lw $t1, 32($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 44($t2) jal $t3 -sw $a1, 32($sp) +sw $a1, 28($sp) move $t0, $sp -lw $t1, 32($t0) +lw $t1, 28($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 32($t0) +lw $t1, 28($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 48($t2) jal $t3 -sw $a1, 28($sp) +sw $a1, 24($sp) move $t0, $sp -lw $t1, 28($t0) +lw $t1, 24($t0) addi $sp, $sp, -4 sw $t1, 0($sp) -lw $t1, 28($t0) +lw $t1, 24($t0) la $t0, void beq $t1, $t0, dispatch_void_error lw $t2, 12($t1) lw $t3, 60($t2) jal $t3 -sw $a1, 24($sp) -lw $a1, 24($sp) +sw $a1, 20($sp) +lw $a1, 20($sp) lw $ra, 0($sp) -addi $sp, $sp, 56 +addi $sp, $sp, 44 jr $ra \ No newline at end of file From e581d7b9e7755a9e241a97fa38b6e62364647574 Mon Sep 17 00:00:00 2001 From: hros18 Date: Mon, 14 Dec 2020 22:05:08 -0500 Subject: [PATCH 140/140] removing excesive prints, compiler done! --- src/main.py | 63 - src/semantic/context.py | 49 +- src/visitors/to_mips.py | 334 +- tests/codegen/arith_test.cil | 0 tests/codegen/arith_test.mips | 10290 --------------------------- tests/codegen/atoi_test.cil | 1444 ---- tests/codegen/book_list_test.cil | 0 tests/codegen/cells.cil | 769 -- tests/codegen/cells_test.cil | 763 -- tests/codegen/complex_test.cil | 601 -- tests/codegen/fib_test.cil | 419 -- tests/codegen/graph.cil | 1998 ------ tests/codegen/graph_test.cil | 2003 ------ tests/codegen/hairyscary_test.cil | 0 tests/codegen/hello_world.cil | 304 - tests/codegen/hello_world_test.cil | 303 - tests/codegen/io.cil | 483 -- tests/codegen/io_test.cil | 478 -- tests/codegen/life.cil | 3425 --------- tests/codegen/life_test.cil | 3187 --------- tests/codegen/list.cil | 559 -- tests/codegen/list_test.cil | 560 -- tests/codegen/new_complex_test.cil | 719 -- tests/codegen/palindrome.cil | 518 -- tests/codegen/palindrome_test.cil | 520 -- tests/codegen/primes.cil | 615 -- tests/codegen/primes_test.cil | 613 -- tests/codegen/print-cool_test.cil | 349 - tests/codegen/sort-list_test.cil | 819 --- tests/codegen/test.py | 16 - 30 files changed, 87 insertions(+), 32114 deletions(-) delete mode 100644 tests/codegen/arith_test.cil delete mode 100644 tests/codegen/arith_test.mips delete mode 100644 tests/codegen/atoi_test.cil delete mode 100644 tests/codegen/book_list_test.cil delete mode 100644 tests/codegen/cells.cil delete mode 100644 tests/codegen/cells_test.cil delete mode 100644 tests/codegen/complex_test.cil delete mode 100644 tests/codegen/fib_test.cil delete mode 100644 tests/codegen/graph.cil delete mode 100644 tests/codegen/graph_test.cil delete mode 100644 tests/codegen/hairyscary_test.cil delete mode 100644 tests/codegen/hello_world.cil delete mode 100644 tests/codegen/hello_world_test.cil delete mode 100644 tests/codegen/io.cil delete mode 100644 tests/codegen/io_test.cil delete mode 100644 tests/codegen/life.cil delete mode 100644 tests/codegen/life_test.cil delete mode 100644 tests/codegen/list.cil delete mode 100644 tests/codegen/list_test.cil delete mode 100644 tests/codegen/new_complex_test.cil delete mode 100644 tests/codegen/palindrome.cil delete mode 100644 tests/codegen/palindrome_test.cil delete mode 100644 tests/codegen/primes.cil delete mode 100644 tests/codegen/primes_test.cil delete mode 100644 tests/codegen/print-cool_test.cil delete mode 100644 tests/codegen/sort-list_test.cil delete mode 100644 tests/codegen/test.py diff --git a/src/main.py b/src/main.py index a012d900..039e3250 100644 --- a/src/main.py +++ b/src/main.py @@ -8,12 +8,6 @@ def main(): program = sys.argv[1] - - # out_program = sys.argv[2] - - # mkdir(out_program, mode=0o777, *, dir_fd=None) - - # fd = open(out_program, 'rw') pipeline = Pipeline() @@ -25,7 +19,6 @@ def main(): pipeline.submit_state(TypeChecker('TChecker')) ast, context, scope = None, None, None - #temporal try: ast, context, scope = pipeline.run_pipeline(program) except: @@ -36,71 +29,15 @@ def main(): if pipeline.pipeline_errors: exit(1) else: - # print('-------------AST-------------') - # for x in ast: - # print(x) - cv = codeVisitor(context) cil_ast = cv.visit(ast, None, scope) - # f2_n = program[:-3] + '_test.cil' - # f2 = open(f2_n, 'w+') - - # formatter = get_formatter() - # cil_code = formatter(cil_ast) - # f2.write(f'{cil_code}') - # f2.close() - # print('LEN:::::',len(cv.instructions)) - # i = 0 - # for x in cv.instructions: - # print('------{}-------'.format(i)) - # i += 1 - # print(type(x)) - # items = vars(x) - # for item in items: - # # if isinstance(items[item], ArgNodeIL) - # print(item, ':', str(items[item])) - # if str(item) == 'args': - # for x in items[item]: - # print('arg: ',x.dest) mips = MIPS() code = mips.visit(cil_ast) - # print('Equals: ', mips.countStatic) - - # for c in cv.data: - # print(str(c)) - # for c in cv.code: - # print(str(c)) - # print('Ops: ',cv.count) - # print('GetAttr: ', mips.countStatic) - print('attr_offset: ', mips.attr_offset) - print('var_offset: ') - c = 1 - for k in cv.context.types.keys(): - t = 1 - name = cv.context.types[k].name - tag = cv.context.types[k].tag - max_tag = cv.context.types[k].max_tag - print(f'{name}. {tag} {max_tag}') - c += 1 path = program[:-2] - # path = path[:-1] path += 'mips' - # print(path) f = open(path, "w+") f.write(code) - # except: - # pass - - - - # print('-------------------Done mips-------------------------------') - # for line in code: - # print(code) -# except: -# pass - - if __name__ == "__main__": main() \ No newline at end of file diff --git a/src/semantic/context.py b/src/semantic/context.py index d1483bda..073705f3 100644 --- a/src/semantic/context.py +++ b/src/semantic/context.py @@ -33,26 +33,11 @@ def __init__(self): self.types['String'].methods['concat'] = Method('concat', ['s'], [self.types['String']], self.types['String']) self.types['String'].methods['substr'] = Method('substr', ['i', 'l'], [self.types['Int'], self.types['Int']], self.types['String']) - #self.graph['Object'] = ['IO', 'String', 'Bool', 'Int'] - #self.graph['IO'] = ['Main'] - #self.graph['String'] = [] - #self.graph['Int'] = [] - #self.graph['Bool'] = [] - def create_type(self, name:str): if name in self.types: raise ContextError(f'Type with the same name ({name}) already in context.') typex = Type(name) - # print('---CreateType---') - # print('type: ', typex.name) - # print('parent: ', typex.parent.name) self.types[name] = typex - # if not self.graph.__contains__(name): - # self.graph[name] = [] - # if self.graph.__contains__(typex.parent.name): - # self.graph[typex.parent.name].append(name) - # else: - # self.graph[typex.parent.name] = [name] return typex def tag_types(self): @@ -68,9 +53,6 @@ def tag_types(self): except: pass - # print(self.graph) - # assert False, "Stop" - def get_type(self, name:str): try: return self.types[name] @@ -78,40 +60,11 @@ def get_type(self, name:str): raise ContextError(f'Type "{name}" is not defined.') def set_type_tags(self, node='Object', tag=0): - # print('------Set-----') - # print('type: ', node) - # print('tag: ', tag) self.types[node].tag = tag for i,t in enumerate(self.graph[node]): self.set_type_tags(t, tag + i + 1) - # print('Done type tags') - # self.types['Object'].tag = 0 - # self.types['Object'].tag = 0 - # self.types['IO'].tag = 1 - # self.types['Main'].tag = 2 - # self.types['String'].tag = 2 - # self.types['Bool'].tag = 3 - # self.types['Int'].tag = 4 - # self.types['A'].tag = 5 - # self.types['B'].tag = 6 - # self.types['C'].tag = 7 - # self.types['D'].tag = 8 - # self.types['E'].tag = 9 - # self.types['A2I'].tag = 6 - + def set_type_max_tags(self, node='Object'): - # self.types['Object'].max_tag = 9 - # self.types['IO'].max_tag = 2 - # self.types['Main'].max_tag = 2 - # self.types['String'].max_tag = 2 - # self.types['Bool'].max_tag = 3 - # self.types['Int'].max_tag = 4 - # self.types['A'].max_tag = 9 - # self.types['B'].max_tag = 9 - # self.types['C'].max_tag = 7 - # self.types['D'].max_tag = 9 - # self.types['E'].max_tag = 9 - # self.types['A2I'].max_tag = 6 if not self.graph[node]: self.types[node].max_tag = self.types[node].tag else: diff --git a/src/visitors/to_mips.py b/src/visitors/to_mips.py index 22170d7a..18655036 100644 --- a/src/visitors/to_mips.py +++ b/src/visitors/to_mips.py @@ -11,8 +11,6 @@ def __init__(self): self.mips_code = '' self.text = '' self.data = '' - self.count = 0 - self.countStatic = '' self.mips_comm_for_operators = { '+' : 'add', '-' : 'sub', @@ -73,10 +71,6 @@ def visit(self, node): @visitor.when(ProgramNodeIL) def visit(self, node): - print('-------------------IL visitor-----------------') - print(self.count) - self.count += 1 - print('ProgramNodeIL') self.types = node.dottypes self.data += 'temp_string: .space 2048\n' @@ -96,9 +90,6 @@ def visit(self, node): @visitor.when(FunctionNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('FunctionNodeIL') self.current_function = node self.var_offset.__setitem__(self.current_function.name, {}) @@ -108,29 +99,22 @@ def visit(self, node): self.text += f'{node.name}:\n' - # self.text += f'move $fp, $sp\n' #save frame pointer of current function - # for local_node in reversed(node.localvars): #save space for locals - # self.visit(local_node) self.text += f'addi $sp, $sp, {-4 * len(node.localvars)}\n' - self.text += 'addi $sp, $sp, -4\n' # save return address + self.text += 'addi $sp, $sp, -4\n' self.text += 'sw $ra, 0($sp)\n' for instruction in node.instructions: self.visit(instruction) - self.text += 'lw $ra, 0($sp)\n' #recover return address + self.text += 'lw $ra, 0($sp)\n' total = 4 * len(node.localvars) + 4 * len(node.params) + 4 - self.text += f'addi $sp, $sp, {total}\n' #pop locals,parameters,return address from the stack - # self.text += 'lw $fp, 0($sp)\n' # recover caller function frame pointer + self.text += f'addi $sp, $sp, {total}\n' self.text += 'jr $ra\n' @visitor.when(TypeNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('TypeNodeIL') self.data += f'{node.name}_name: .asciiz "{node.name}"\n' self.data += f'{node.name}_methods:\n' for method in node.methods.values(): @@ -151,20 +135,14 @@ def visit(self, node): @visitor.when(AssignNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('AssignNodeIL') offset = self.var_offset[self.current_function.name][node.dest] - print('-----------TYPE---- ',node.source) if node.source: - print('SOURCE') if isinstance(node.source, int): self.text += f'li $t1, {node.source}\n' else: right_offset = self.var_offset[self.current_function.name][node.source] self.text += f'lw $t1, {right_offset}($sp)\n' else: - print('LIST') self.text += f'la $t1, void\n' self.text += f'sw $t1, {offset}($sp)\n' @@ -172,9 +150,6 @@ def visit(self, node): @visitor.when(AllocateNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('AllocateNodeIL') amount = len(self.types[node.type].attributes) + 4 self.text += f'li $a0, {amount * 4}\n' self.text += f'li $v0, 9\n' @@ -182,18 +157,17 @@ def visit(self, node): self.text += 'bge $v0, $sp heap_error\n' self.text += f'move $t0, $v0\n' - #Initialize Object Layout - self.text += f'li $t1, {node.name}\n' #tag + self.text += f'li $t1, {node.name}\n' self.text += f'sw $t1, 0($t0)\n' - self.text += f'la $t1, {node.type}_name\n' #type_name + self.text += f'la $t1, {node.type}_name\n' self.text += f'sw $t1, 4($t0)\n' - self.text += f'li $t1, {amount}\n' #size + self.text += f'li $t1, {amount}\n' self.text += f'sw $t1, 8($t0)\n' - self.text += f'la $t1, {node.type}_methods\n' #methods pointer + self.text += f'la $t1, {node.type}_methods\n' self.text += f'sw $t1, 12($t0)\n' offset = self.var_offset[self.current_function.name][node.dest] - self.text += f'sw $t0, {offset}($sp)\n' #store instance address in local + self.text += f'sw $t0, {offset}($sp)\n' @visitor.when(ParamNodeIL) def visit(self, node): @@ -201,91 +175,56 @@ def visit(self, node): @visitor.when(LocalNodeIL) def visit(self, node): - # self.text += 'addi $sp, $sp, -4\n' - # self.text += 'sw $zero, 0($sp)\n' pass @visitor.when(GetAttribNodeIL) def visit(self, node): - print(self.count) - self.countStatic += 'GetAttr: dest: ' + str(node.dest) + '\n' - print('GetAttrNodeIL') - # print('----------------::::::') - # print('----------------::::::',node.obj) - # print('----------------::::::',node.dest) - # print('----------------::::::',node.attr) - # print('----------------::::::',node.attr_type) - # print('----------------::::::',self.attr_offset[node.attr_type][node.attr]) - self_offset = self.var_offset[self.current_function.name][node.obj] - self.text += f'lw $t0, {self_offset}($sp)\n' #get self address + self.text += f'lw $t0, {self_offset}($sp)\n' attr_offset = self.attr_offset[node.attr_type][node.attr] - self.text += f'lw $t1, {attr_offset}($t0)\n' #get attribute + self.text += f'lw $t1, {attr_offset}($t0)\n' result_offset = self.var_offset[self.current_function.name][node.dest] - self.text += f'sw $t1, {result_offset}($sp)\n' #store attribute in local + self.text += f'sw $t1, {result_offset}($sp)\n' @visitor.when(SetAttribNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('SetAttrNodeIL') - # print('----------------::::::') - # print('----------------::::::',node.obj) - # print('----------------::::::',node.dest) - # print('----------------::::::',node.attr) - # print('----------------::::::',node.attr_type) - # print('----------------::::::',self.attr_offset[node.attr_type][node.attr]) self_offset = self.var_offset[self.current_function.name][node.obj] - self.text += f'lw $t0, {self_offset}($sp)\n' #get self address + self.text += f'lw $t0, {self_offset}($sp)\n' if node.value: - value_offset = self.var_offset[self.current_function.name][node.value] # get value from local + value_offset = self.var_offset[self.current_function.name][node.value] self.text += f'lw $t1, {value_offset}($sp)\n' else: - self.text += f'la $t1, void\n' # not initialized attribute + self.text += f'la $t1, void\n' attr_offset = self.attr_offset[node.attr_type][node.attr] - self.text += f'sw $t1, {attr_offset}($t0)\n' #set attribute in instance + self.text += f'sw $t1, {attr_offset}($t0)\n' @visitor.when(ArgNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('ArgNodeIL') - value_offset = self.var_offset[self.current_function.name][node.dest] # get value from local - # if not self.count: - # self.count = 1 - # else: - # self.count += 1 - # print(self.count) - # print('arg:', node.dest) - # print('offset::::::::::: ',value_offset) + value_offset = self.var_offset[self.current_function.name][node.dest] self.text += f'lw $t1, {value_offset}($t0)\n' self.text += 'addi $sp, $sp, -4\n' self.text += 'sw $t1, 0($sp)\n' @visitor.when(DynamicCallNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('DynamicCallNodeIL') - self.countStatic += 'DynamicCall: instance: ' + str(node.obj) + '\n' self.text += 'move $t0, $sp\n' for arg in node.args: self.visit(arg) value_offset = self.var_offset[self.current_function.name][node.obj] - self.text += f'lw $t1, {value_offset}($t0)\n' # get instance from local + self.text += f'lw $t1, {value_offset}($t0)\n' self.text += 'la $t0, void\n' self.text += 'beq $t1, $t0, dispatch_void_error\n' - self.text += f'lw $t2, 12($t1)\n' #get dispatch table address + self.text += f'lw $t2, 12($t1)\n' method_offset = self.method_offset[node.type][node.method] - self.text += f'lw $t3, {method_offset}($t2)\n' # get method address + self.text += f'lw $t3, {method_offset}($t2)\n' self.text += 'jal $t3\n' @@ -295,18 +234,10 @@ def visit(self, node): @visitor.when(StaticCallNodeIL) def visit(self, node): - print(self.count) - # if node.function == 'String_equals': - # self.countStatic += 1 - print('StaticCallNodeIL') self.text += 'move $t0, $sp\n' - # print('--------CALL------') - # print(node.function) - # self.count = 0 for arg in node.args: self.visit(arg) - # print(self.count) self.text += f'jal {node.function}\n' result_offset = self.var_offset[self.current_function.name][node.dest] @@ -314,9 +245,6 @@ def visit(self, node): @visitor.when(ReturnNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('ReturnNodeIL') if node.value: offset = self.var_offset[self.current_function.name][node.value] self.text += f'lw $a1, {offset}($sp)\n' @@ -325,9 +253,6 @@ def visit(self, node): @visitor.when(CaseNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('CaseNodeIL') offset = self.var_offset[self.current_function.name][node.local_expr] self.text += f'lw $t0, {offset}($sp)\n' self.text += f'lw $t1, 0($t0)\n' @@ -337,18 +262,12 @@ def visit(self, node): @visitor.when(OptionNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('OptionNodeIL') self.text += f'blt $t1 {node.tag} {node.next_label}\n' self.text += f'bgt $t1 {node.max_tag} {node.next_label}\n' @visitor.when(BinaryNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('BinaryNodeIL ' + node.op) mips_comm = self.mips_comm_for_operators[node.op] left_offset = self.var_offset[self.current_function.name][node.left] right_offset = self.var_offset[self.current_function.name][node.right] @@ -362,9 +281,6 @@ def visit(self, node): @visitor.when(UnaryNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('UnaryNodeIL' + node.op) expr_offset = self.var_offset[self.current_function.name][node.expr] self.text += f'lw $t1, {expr_offset}($sp)\n' if node.op == 'not': @@ -377,33 +293,21 @@ def visit(self, node): @visitor.when(GotoIfNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('GotoIfNodeIL') predicate_offset = self.var_offset[self.current_function.name][node.cond] self.text += f'lw $t0, {predicate_offset}($sp)\n' - self.text += f'lw $a0, 16($t0)\n' #get value attribute + self.text += f'lw $a0, 16($t0)\n' self.text += f'bnez $a0, {node.label}\n' @visitor.when(GotoNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('GotoNodeIL') self.text += f'b {node.label}\n' @visitor.when(LabelNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('LabelNodeIL') self.text += f'{node.label}:\n' @visitor.when(OutIntNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('OutIntNodeIL') if isinstance(node.value, int): self.text += f'li $v0 , 1\n' self.text += f'li $a0 , {node.value}\n' @@ -416,9 +320,6 @@ def visit(self, node): @visitor.when(OutStringNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('OutStringNodeIL') var_offset = self.var_offset[self.current_function.name][node.value] self.text += f'lw $a0, {var_offset}($sp)\n' self.text += f'li $v0, 4\n' @@ -426,9 +327,6 @@ def visit(self, node): @visitor.when(ReadIntNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('ReadIntNodeIL') read_offset = self.var_offset[self.current_function.name][node.dest] self.text += f'li $v0, 5\n' self.text += f'syscall\n' @@ -436,34 +334,30 @@ def visit(self, node): @visitor.when(ReadStringNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('ReadStringNodeIL') read_offset = self.var_offset[self.current_function.name][node.dest] self.text += f'la $a0, temp_string\n' self.text += f'li $a1, 2048\n' self.text += f'li $v0, 8\n' self.text += f'syscall\n' - # Remove last chars (if they are '\n' or '\r\n') self.text += 'move $t0, $a0\n' self.text += 'jump_read_str_char:\n' self.text += 'li $t1, 0\n' self.text += 'lb $t1, 0($t0)\n' - self.text += 'beqz $t1, analize_str_end\n' # finish if the final of string is found + self.text += 'beqz $t1, analize_str_end\n' self.text += 'addi $t0, $t0, 1\n' self.text += 'j jump_read_str_char\n' self.text += 'analize_str_end:\n' - self.text += 'addi $t0, $t0, -1\n' # go to char at length - 1 + self.text += 'addi $t0, $t0, -1\n' self.text += 'li $t1, 0\n' self.text += 'lb $t1, 0($t0)\n' - self.text += 'bne $t1, 10, finish_jump_read_str_char\n' # remove char only if it is '\n' - self.text += 'sb $0, 0($t0)\n' # remove '\r\n' - self.text += 'addi $t0, $t0, -1\n' # go to char at length - 2 + self.text += 'bne $t1, 10, finish_jump_read_str_char\n' + self.text += 'sb $0, 0($t0)\n' + self.text += 'addi $t0, $t0, -1\n' self.text += 'lb $t1, 0($t0)\n' - self.text += 'bne $t1, 13, finish_jump_read_str_char\n' # remove char only if it is '\r' - self.text += 'sb $0, 0($t0)\n' # remove '\r\n' + self.text += 'bne $t1, 13, finish_jump_read_str_char\n' + self.text += 'sb $0, 0($t0)\n' self.text += 'j analize_str_end\n' self.text += 'finish_jump_read_str_char:\n' @@ -471,41 +365,23 @@ def visit(self, node): @visitor.when(LoadNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('LoadNodeIL') - print('-------------msg----------: ' + str(node.msg)) if node.msg != None: if isinstance(node.msg, str): self.text += f'la $t0, {node.msg}\n' offset = self.var_offset[self.current_function.name][node.dest] self.text += f'sw $t0, {offset}($sp)\n' - print('Got str') else: self.text += f'li $t0, {node.msg}\n' offset = self.var_offset[self.current_function.name][node.dest] self.text += f'sw $t0, {offset}($sp)\n' - print('Got int') - - # @visitor.when(CIL_AST.LoadInt) - # def visit(self, node): - # self.text += f'li $t0, {node.num}\n' - # offset = self.var_offset[self.current_function.name][node.local_dest] - # self.text += f'sw $t0, {offset}($sp)\n' @visitor.when(HaltNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('HaltNodeIL') self.text += 'li $v0, 10\n' self.text += 'syscall\n' @visitor.when(TypeOfNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('TypeOfNodeIL') obj_offset = self.var_offset[self.current_function.name][node.obj] self.text += f'lw $t0, {obj_offset}($sp)\n' #get obj address from local self.text += 'lw $t1, 4($t0)\n' # get type name from the sec pos in obj layout @@ -514,9 +390,6 @@ def visit(self, node): @visitor.when(IsVoidNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('IsVoidNodeIL') self.text += 'la $t0, void\n' offset = self.var_offset[self.current_function.name][node.expre_value] self.text += f'lw $t1, {offset}($sp)\n' @@ -526,132 +399,101 @@ def visit(self, node): @visitor.when(CopyNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('CopyNodeIL') - # offset = self.var_offset[self.current_function.name][self.current_function.params[0].name] self_offset = self.var_offset[self.current_function.name][node.source] - self.text += f'lw $t0, {self_offset}($sp)\n' # get self address - self.text += f'lw $a0, 8($t0)\n' # get self size {amount} - self.text += f'mul $a0, $a0, 4\n' # {amount * 4} + self.text += f'lw $t0, {self_offset}($sp)\n' + self.text += f'lw $a0, 8($t0)\n' + self.text += f'mul $a0, $a0, 4\n' self.text += f'li $v0, 9\n' self.text += f'syscall\n' self.text += 'bge $v0, $sp heap_error\n' self.text += f'move $t1, $v0\n' - # Copy All Slots inlcuding Tag, Size, methods ptr and each atrribute - # Tenemos q hacerlo en MIPS porq copy está a nivel de Object y en python - # en este punto no sabemos el tipo dinamico (para asi saber el tamaño real) - # hasta q se haga el VCALL por lo el ciclo hayq hacerlo en MIPS) - self.text += 'li $a0, 0\n' self.text += 'lw $t3, 8($t0)\n' self.text += 'copy_object_word:\n' - self.text += 'lw $t2, 0($t0)\n' # load current object word - self.text += 'sw $t2, 0($t1)\n' # store word in copy object - self.text += 'addi $t0, $t0, 4\n' # move to the next word in orginal object - self.text += 'addi $t1, $t1, 4\n' # move to the next word in copy object - self.text += 'addi $a0, $a0, 1\n' # size count - ''' - Src2 can either be a register or an immediate value (a 16 bit integer). - blt Rsrc1, Src2, label (Branch on Less Than) - Conditionally branch to the instruction at the label if the contents of register Rsrc1 are less than Src2. - ''' - self.text += 'blt $a0, $t3, copy_object_word\n' # $t3 is the orginal object size + self.text += 'lw $t2, 0($t0)\n' + self.text += 'sw $t2, 0($t1)\n' + self.text += 'addi $t0, $t0, 4\n' + self.text += 'addi $t1, $t1, 4\n' + self.text += 'addi $a0, $a0, 1\n' + + self.text += 'blt $a0, $t3, copy_object_word\n' offset = self.var_offset[self.current_function.name][node.dest] - # $t1 is pointing at the end of the object - # if $v0 is modified for any reason (it should not, but...) - # before looping we can move $t3, $t1 and use $t3 but this should work - self.text += f'sw $v0, {offset}($sp)\n' #store instance address in local + + self.text += f'sw $v0, {offset}($sp)\n' @visitor.when(LengthNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('LengthNodeIL') offset = self.var_offset[self.current_function.name][node.arg] self.text += f'lw $t0, {offset}($sp)\n' self.text += f'lw $t0, 16($t0)\n' self.text += 'li $a0, 0\n' self.text += 'count_char:\n' - self.text += 'lb $t1, 0($t0)\n' # loading current char - self.text += 'beqz $t1, finish_chars_count\n' # finish if a zero is found - self.text += 'addi $t0, $t0, 1\n' # move to the next char - self.text += 'addi $a0, $a0, 1\n' # length_count += 1 + self.text += 'lb $t1, 0($t0)\n' + self.text += 'beqz $t1, finish_chars_count\n' + self.text += 'addi $t0, $t0, 1\n' + self.text += 'addi $a0, $a0, 1\n' self.text += 'j count_char\n' self.text += 'finish_chars_count:\n' offset = self.var_offset[self.current_function.name][node.dest] - self.text += f'sw $a0, {offset}($sp)\n' # store length count address in local + self.text += f'sw $a0, {offset}($sp)\n' @visitor.when(ConcatNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('ConcatNodeIL') offset_arg1 = self.var_offset[self.current_function.name][node.arg1] offset_len1 = self.var_offset[self.current_function.name][node.len1] offset_arg2 = self.var_offset[self.current_function.name][node.arg2] offset_len2 = self.var_offset[self.current_function.name][node.len2] - # reserve space for concatenation result self.text += f'lw $a0, {offset_len1}($sp)\n' self.text += f'lw $t0, {offset_len2}($sp)\n' - # add Rdest, Rsrc1, Src2 Addition (with overflow) - # is similar to addi but 2do summand can be a register + self.text += 'add $a0, $a0, $t0\n' - self.text += 'addi $a0, $a0, 1\n' # reserve 1 more byte for '\0' + self.text += 'addi $a0, $a0, 1\n' self.text += f'li $v0, 9\n' self.text += f'syscall\n' self.text += 'bge $v0, $sp heap_error\n' self.text += 'move $t3, $v0\n' - # the beginning of new reserved address is in $v0 and save in $t3 self.text += f'lw $t0, {offset_arg1}($sp)\n' self.text += f'lw $t1, {offset_arg2}($sp)\n' - # copy arg1 starting in $t0 to $v0 self.text += 'copy_arg1_char:\n' - self.text += 'lb $t2, 0($t0)\n' # loading current char from arg1 - self.text += 'sb $t2, 0($v0)\n' # storing current char into result_str end - self.text += 'beqz $t2, concat_arg2_char\n' # finish if a zero is found - self.text += 'addi $t0, $t0, 1\n' # move to the next char - self.text += 'addi $v0, $v0, 1\n' # move to the next available byte + self.text += 'lb $t2, 0($t0)\n' + self.text += 'sb $t2, 0($v0)\n' + self.text += 'beqz $t2, concat_arg2_char\n' + self.text += 'addi $t0, $t0, 1\n' + self.text += 'addi $v0, $v0, 1\n' self.text += 'j copy_arg1_char\n' - # concat arg2 starting in $t1 to $v0 self.text += 'concat_arg2_char:\n' - self.text += 'lb $t2, 0($t1)\n' # loading current char from arg1 - self.text += 'sb $t2, 0($v0)\n' # storing current char into result_str end - self.text += 'beqz $t2, finish_arg2_concat\n' # finish if a zero is found - self.text += 'addi $t1, $t1, 1\n' # move to the next char - self.text += 'addi $v0, $v0, 1\n' # move to the next available byte + self.text += 'lb $t2, 0($t1)\n' + self.text += 'sb $t2, 0($v0)\n' + self.text += 'beqz $t2, finish_arg2_concat\n' + self.text += 'addi $t1, $t1, 1\n' + self.text += 'addi $v0, $v0, 1\n' self.text += 'j concat_arg2_char\n' self.text += 'finish_arg2_concat:\n' - self.text += 'sb $0, ($v0)\n' # put '\0' at the end + self.text += 'sb $0, ($v0)\n' offset = self.var_offset[self.current_function.name][node.dest] - self.text += f'sw $t3, {offset}($sp)\n' # store length count address in local + self.text += f'sw $t3, {offset}($sp)\n' @visitor.when(SubstringNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('SubstringNodeIL') offset_idx = self.var_offset[self.current_function.name][node.begin] offset_len = self.var_offset[self.current_function.name][node.end] offset_str = self.var_offset[self.current_function.name][node.word] - # reserve space for substring result self.text += f'lw $a0, {offset_len}($sp)\n' - self.text += 'addi $a0, $a0, 1\n' # reserve 1 more byte for '\0' + self.text += 'addi $a0, $a0, 1\n' self.text += f'li $v0, 9\n' self.text += f'syscall\n' self.text += 'bge $v0, $sp heap_error\n' - # the beginning of new reserved address is in $v0 self.text += f'lw $t0, {offset_idx}($sp)\n' self.text += f'lw $t1, {offset_len}($sp)\n' @@ -660,60 +502,56 @@ def visit(self, node): self.text += 'bltz $t0, substr_error\n' - # jump first i chars self.text += 'li $a0, 0\n' self.text += 'jump_str_char:\n' - self.text += f'beq $a0, $t0, finish_index_jump\n' # finish if we are at index i - self.text += 'addi $a0, $a0, 1\n' # chars count - self.text += 'addi $t2, $t2, 1\n' # move to the next char + self.text += f'beq $a0, $t0, finish_index_jump\n' + self.text += 'addi $a0, $a0, 1\n' + self.text += 'addi $t2, $t2, 1\n' self.text += 'beq $t2, $zero, substr_error\n' self.text += 'j jump_str_char\n' self.text += 'finish_index_jump:\n' - self.text += 'li $a0, 0\n' # reset $a0 to count the length - self.text += 'move $t3, $v0\n' # save start of substring + self.text += 'li $a0, 0\n' + self.text += 'move $t3, $v0\n' - # coping chars from string $t2 (starting in $t0 index) until length $t1 to $v0 + self.text += 'copy_substr_char:\n' - self.text += 'beq $a0, $t1 finish_substr_copy\n' # finish if the chars count is equals to length - self.text += 'li $t0, 0\n' # reset $t0 before loading bytes - self.text += 'lb $t0, 0($t2)\n' # loading current char from string - self.text += 'sb $t0, 0($v0)\n' # storing current char into result_str end - self.text += 'addi $t2, $t2, 1\n' # move to the next char + self.text += 'beq $a0, $t1 finish_substr_copy\n' + self.text += 'li $t0, 0\n' + self.text += 'lb $t0, 0($t2)\n' + self.text += 'sb $t0, 0($v0)\n' + self.text += 'addi $t2, $t2, 1\n' self.text += 'beq $t2, $zero, substr_error\n' - self.text += 'addi $v0, $v0, 1\n' # move to the next available byte - self.text += 'addi $a0, $a0, 1\n' # chars count + self.text += 'addi $v0, $v0, 1\n' + self.text += 'addi $a0, $a0, 1\n' self.text += 'j copy_substr_char\n' self.text += 'finish_substr_copy:\n' - self.text += 'sb $0, ($v0)\n' # put '\0' at the end + self.text += 'sb $0, ($v0)\n' offset = self.var_offset[self.current_function.name][node.dest] - self.text += f'sw $t3, {offset}($sp)\n' # store length count address in local + self.text += f'sw $t3, {offset}($sp)\n' @visitor.when(StringEqualsNodeIL) def visit(self, node): - print(self.count) - self.count += 1 - print('StringEqualsNodeIL') offset_arg1 = self.var_offset[self.current_function.name][node.s1] offset_arg2 = self.var_offset[self.current_function.name][node.s2] self.text += f'lw $t1, {offset_arg1}($sp)\n' self.text += f'lw $t2, {offset_arg2}($sp)\n' - # comparing char by char + self.text += 'compare_str_char:\n' - self.text += 'li $t3, 0\n' # reset $t3 before loading byte - self.text += 'lb $t3, 0($t1)\n' # loading current char from string1 - self.text += 'li $t4, 0\n' # reset $t4 before loading byte - self.text += 'lb $t4, 0($t2)\n' # loading current char from string2 - self.text += 'seq $a0, $t3, $t4\n' # comparing current bytes - self.text += 'beqz $a0, finish_compare_str\n' # finish if current chars are not equals - self.text += 'beqz $t3, finish_compare_str\n' # finish if the final of string1 is found - self.text += 'beqz $t4, finish_compare_str\n' # finish if the final of string2 is found - self.text += 'addi $t1, $t1, 1\n' # move to the next char in string1 - self.text += 'addi $t2, $t2, 1\n' # move to the next char in string2 + self.text += 'li $t3, 0\n' + self.text += 'lb $t3, 0($t1)\n' + self.text += 'li $t4, 0\n' + self.text += 'lb $t4, 0($t2)\n' + self.text += 'seq $a0, $t3, $t4\n' + self.text += 'beqz $a0, finish_compare_str\n' + self.text += 'beqz $t3, finish_compare_str\n' + self.text += 'beqz $t4, finish_compare_str\n' + self.text += 'addi $t1, $t1, 1\n' + self.text += 'addi $t2, $t2, 1\n' self.text += 'j compare_str_char\n' self.text += 'finish_compare_str:\n' offset = self.var_offset[self.current_function.name][node.result] - self.text += f'sw $a0, {offset}($sp)\n' # store comparison result in local \ No newline at end of file + self.text += f'sw $a0, {offset}($sp)\n' \ No newline at end of file diff --git a/tests/codegen/arith_test.cil b/tests/codegen/arith_test.cil deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/codegen/arith_test.mips b/tests/codegen/arith_test.mips deleted file mode 100644 index ad96fb8f..00000000 --- a/tests/codegen/arith_test.mips +++ /dev/null @@ -1,10290 +0,0 @@ -.data -dispatch_void: .asciiz "Runtime Error: A dispatch (static or dynamic) on void" -case_void: .asciiz "Runtime Error: A case on void" -case_no_match: .asciiz "Runtime Error: Execution of a case statement without a matching branch" -div_zero: .asciiz "Runtime Error: Division by zero" -substr: .asciiz "Runtime Error: Substring out of range" -heap: .asciiz "Runtime Error: Heap overflow" -temp_string: .space 2048 -void: .word 0 -Object_name: .asciiz "Object" -Object_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -Int_name: .asciiz "Int" -Int_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -String_name: .asciiz "String" -String_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word String.length -.word String.concat -.word String.substr -Bool_name: .asciiz "Bool" -Bool_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -IO_name: .asciiz "IO" -IO_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -A_name: .asciiz "A" -A_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word A.method5 -B_name: .asciiz "B" -B_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word B.method5 -C_name: .asciiz "C" -C_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word C.method5 -.word C.method6 -D_name: .asciiz "D" -D_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word B.method5 -.word D.method7 -E_name: .asciiz "E" -E_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A.value -.word A.set_var -.word A.method1 -.word A.method2 -.word A.method3 -.word A.method4 -.word B.method5 -.word D.method7 -.word E.method6 -A2I_name: .asciiz "A2I" -A2I_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word A2I.c2i -.word A2I.i2c -.word A2I.a2i -.word A2I.a2i_aux -.word A2I.i2a -.word A2I.i2a_aux -Main_name: .asciiz "Main" -Main_methods: -.word Object.abort -.word Object.type_name -.word Object.copy -.word IO.out_string -.word IO.out_int -.word IO.in_string -.word IO.in_int -.word Main.menu -.word Main.prompt -.word Main.get_int -.word Main.is_even -.word Main.class_type -.word Main.print -.word Main.main -s_0: .asciiz "Abort called from class " -s_1: .asciiz " -" -empty_str: .asciiz "" -s_3: .asciiz "0" -s_4: .asciiz "1" -s_5: .asciiz "2" -s_6: .asciiz "3" -s_7: .asciiz "4" -s_8: .asciiz "5" -s_9: .asciiz "6" -s_10: .asciiz "7" -s_11: .asciiz "8" -s_12: .asciiz "9" -s_13: .asciiz "-" -s_14: .asciiz "+" -s_15: .asciiz " - To add a number to " -s_16: .asciiz "...enter a: -" -s_17: .asciiz " To negate " -s_18: .asciiz "...enter b: -" -s_19: .asciiz " To find the difference between " -s_20: .asciiz "and another number...enter c: -" -s_21: .asciiz " To find the factorial of " -s_22: .asciiz "...enter d: -" -s_23: .asciiz " To square " -s_24: .asciiz "...enter e: -" -s_25: .asciiz " To cube " -s_26: .asciiz "...enter f: -" -s_27: .asciiz " To find out if " -s_28: .asciiz "is a multiple of 3...enter g: -" -s_29: .asciiz " To divide " -s_30: .asciiz "by 8...enter h: -" -s_31: .asciiz " To get a new number...enter j: -" -s_32: .asciiz " To quit...enter q: - -" -s_33: .asciiz "Please enter a number... " -s_34: .asciiz "Class type is now E -" -s_35: .asciiz "Class type is now D -" -s_36: .asciiz "Class type is now C -" -s_37: .asciiz "Class type is now B -" -s_38: .asciiz "Class type is now A -" -s_39: .asciiz "Oooops -" -s_40: .asciiz " " -s_41: .asciiz "number " -s_42: .asciiz "is odd! -" -s_43: .asciiz "is even! -" -s_44: .asciiz "a" -s_45: .asciiz "b" -s_46: .asciiz "c" -s_47: .asciiz "d" -s_48: .asciiz "e" -s_49: .asciiz "f" -s_50: .asciiz "g" -s_51: .asciiz "h" -s_52: .asciiz "j" -s_53: .asciiz "q" -s_54: .asciiz "is equal to " -s_55: .asciiz "times 8 with a remainder of " -s_56: .asciiz "is not divisible by 3. -" -s_57: .asciiz "is divisible by 3. -" -.text -dispatch_void_error: -la $a0 dispatch_void -li $v0, 4 -syscall -li $v0, 10 -syscall -case_void_error: -la $a0 case_void -li $v0, 4 -syscall -li $v0, 10 -syscall -case_no_match_error: -la $a0 case_no_match -li $v0, 4 -syscall -li $v0, 10 -syscall -div_zero_error: -la $a0 div_zero -li $v0, 4 -syscall -li $v0, 10 -syscall -substr_error: -la $a0 substr -li $v0, 4 -syscall -li $v0, 10 -syscall -heap_error: -la $a0 heap -li $v0, 4 -syscall -li $v0, 10 -syscall -main: -addi $sp, $sp, -8 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 32 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, Main_name -sw $t1, 4($t0) -li $t1, 8 -sw $t1, 8($t0) -la $t1, Main_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Main_init -sw $a1, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Main.main -sw $a1, 8($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Object_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 8 -jr $ra -Object.abort: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_0 -sw $t0, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -li $v0, 4 -syscall -la $t0, s_1 -sw $t0, 12($sp) -lw $a0, 12($sp) -li $v0, 4 -syscall -li $v0, 10 -syscall -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -Object.type_name: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t1, 4($t0) -sw $t1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -Object.copy: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $a0, 8($t0) -mul $a0, $a0, 4 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t1, $v0 -li $a0, 0 -lw $t3, 8($t0) -copy_object_word: -lw $t2, 0($t0) -sw $t2, 0($t1) -addi $t0, $t0, 4 -addi $t1, $t1, 4 -addi $a0, $a0, 1 -blt $a0, $t3, copy_object_word -sw $v0, 4($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -IO_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 8 -jr $ra -IO.out_string: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $a0, 4($sp) -li $v0, 4 -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -IO.out_int: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 12($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -li $v0 , 1 -lw $a0 , 4($sp) -syscall -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -IO.in_string: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $a0, temp_string -li $a1, 2048 -li $v0, 8 -syscall -move $t0, $a0 -jump_read_str_char: -li $t1, 0 -lb $t1, 0($t0) -beqz $t1, analize_str_end -addi $t0, $t0, 1 -j jump_read_str_char -analize_str_end: -addi $t0, $t0, -1 -li $t1, 0 -lb $t1, 0($t0) -bne $t1, 10, finish_jump_read_str_char -sb $0, 0($t0) -addi $t0, $t0, -1 -lb $t1, 0($t0) -bne $t1, 13, finish_jump_read_str_char -sb $0, 0($t0) -j analize_str_end -finish_jump_read_str_char: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -IO.in_int: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $v0, 5 -syscall -sw $v0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -String_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -String.length: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t0, 16($t0) -li $a0, 0 -count_char: -lb $t1, 0($t0) -beqz $t1, finish_chars_count -addi $t0, $t0, 1 -addi $a0, $a0, 1 -j count_char -finish_chars_count: -sw $a0, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 20 -jr $ra -String.concat: -addi $sp, $sp, -36 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 40($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 8($sp) -lw $t0, 44($sp) -lw $t1, 16($t0) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String.length -sw $a1, 16($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t0, 24($sp) -add $a0, $a0, $t0 -addi $a0, $a0, 1 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t3, $v0 -lw $t0, 4($sp) -lw $t1, 12($sp) -copy_str1_char: -lb $t2, 0($t0) -sb $t2, 0($v0) -beqz $t2, concat_str2_char -addi $t0, $t0, 1 -addi $v0, $v0, 1 -j copy_str1_char -concat_str2_char: -lb $t2, 0($t1) -sb $t2, 0($v0) -beqz $t2, finish_str2_concat -addi $t1, $t1, 1 -addi $v0, $v0, 1 -j concat_str2_char -finish_str2_concat: -sb $0, ($v0) -sw $t3, 28($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 36($sp) -lw $a1, 32($sp) -lw $ra, 0($sp) -addi $sp, $sp, 48 -jr $ra -String.substr: -addi $sp, $sp, -20 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $a0, 8($sp) -addi $a0, $a0, 1 -li $v0, 9 -syscall -bge $v0, $sp heap_error -lw $t0, 4($sp) -lw $t1, 8($sp) -lw $t4, 24($sp) -lw $t2, 16($t4) -bltz $t0, substr_error -li $a0, 0 -jump_str_char: -beq $a0, $t0, finish_index_jump -addi $a0, $a0, 1 -addi $t2, $t2, 1 -beq $t2, $zero, substr_error -j jump_str_char -finish_index_jump: -li $a0, 0 -move $t3, $v0 -copy_substr_char: -beq $a0, $t1 finish_substr_copy -li $t0, 0 -lb $t0, 0($t2) -sb $t0, 0($v0) -addi $t2, $t2, 1 -beq $t2, $zero, substr_error -addi $v0, $v0, 1 -addi $a0, $a0, 1 -j copy_substr_char -finish_substr_copy: -sb $0, ($v0) -sw $t3, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 20($sp) -lw $a1, 16($sp) -lw $ra, 0($sp) -addi $sp, $sp, 36 -jr $ra -Bool_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -Int_init: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 4($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -String_equals: -addi $sp, $sp, -12 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $t0, 20($sp) -lw $t1, 16($t0) -sw $t1, 8($sp) -lw $t1, 4($sp) -lw $t2, 8($sp) -compare_str_char: -li $t3, 0 -lb $t3, 0($t1) -li $t4, 0 -lb $t4, 0($t2) -seq $a0, $t3, $t4 -beqz $a0, finish_compare_str -beqz $t3, finish_compare_str -beqz $t4, finish_compare_str -addi $t1, $t1, 1 -addi $t2, $t2, 1 -j compare_str_char -finish_compare_str: -sw $a0, 12($sp) -lw $a1, 12($sp) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -A_init: -addi $sp, $sp, -16 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Object_init -sw $a1, 4($sp) -move $a1, $zero -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -li $t0, 0 -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 16($sp) -lw $t0, 20($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -lw $ra, 0($sp) -addi $sp, $sp, 24 -jr $ra -A.value: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $t1, 16($t0) -sw $t1, 4($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -A.set_var: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 8($sp) -lw $t1, 12($sp) -sw $t1, 16($t0) -lw $a1, 8($sp) -lw $ra, 0($sp) -addi $sp, $sp, 16 -jr $ra -A.method1: -addi $sp, $sp, 0 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -A.method2: -addi $sp, $sp, -56 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t0, 68($sp) -lw $t1, 16($t0) -sw $t1, 32($sp) -lw $a0, 28($sp) -lw $t1, 32($sp) -add $a0, $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, B_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, B_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal B_init -sw $a1, 52($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 44($sp) -lw $t1, 44($sp) -sw $t1, 56($sp) -lw $a1, 56($sp) -lw $ra, 0($sp) -addi $sp, $sp, 72 -jr $ra -A.method3: -addi $sp, $sp, -52 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t1, 28($sp) -neg $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal C_init -sw $a1, 48($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 40($sp) -lw $t1, 40($sp) -sw $t1, 52($sp) -lw $a1, 52($sp) -lw $ra, 0($sp) -addi $sp, $sp, 64 -jr $ra -A.method4: -addi $sp, $sp, -136 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 148($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 144($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -slt $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 24($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_1 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t1, 28($sp) -sw $t1, 40($sp) -lw $t0, 148($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $t0, 144($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $a0, 52($sp) -lw $t1, 56($sp) -sub $a0, $a0, $t1 -sw $a0, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 60($sp) -lw $t1, 44($sp) -sw $t1, 40($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 72($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 76($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 72($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 68($sp) -lw $t1, 68($sp) -sw $t1, 80($sp) -lw $t1, 80($sp) -sw $t1, 4($sp) -b label_2 -label_1: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -li $t0, 0 -sw $t0, 88($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 92($sp) -lw $t1, 84($sp) -sw $t1, 96($sp) -lw $t0, 144($sp) -lw $t1, 16($t0) -sw $t1, 108($sp) -lw $t0, 148($sp) -lw $t1, 16($t0) -sw $t1, 112($sp) -lw $a0, 108($sp) -lw $t1, 112($sp) -sub $a0, $a0, $t1 -sw $a0, 104($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 116($sp) -lw $t1, 100($sp) -sw $t1, 96($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 128($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 132($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 124($sp) -lw $t1, 124($sp) -sw $t1, 136($sp) -lw $t1, 136($sp) -sw $t1, 4($sp) -label_2: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 152 -jr $ra -A.method5: -addi $sp, $sp, -136 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 1 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -li $t0, 1 -sw $t0, 24($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 28($sp) -lw $t1, 20($sp) -sw $t1, 32($sp) -label_3: -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 48($sp) -lw $t0, 144($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $a0, 48($sp) -lw $t1, 52($sp) -sle $a0, $a0, $t1 -sw $a0, 44($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 40($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 56($sp) -lw $t0, 40($sp) -lw $a0, 16($t0) -bnez $a0, label_4 -b label_5 -label_4: -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 68($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 72($sp) -lw $a0, 68($sp) -lw $t1, 72($sp) -mul $a0, $a0, $t1 -sw $a0, 64($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -move $t0, $sp -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 76($sp) -lw $t1, 60($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -li $t0, 1 -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 108($sp) -lw $t0, 32($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t0, 100($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) -add $a0, $a0, $t1 -sw $a0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 112($sp) -lw $t1, 84($sp) -sw $t1, 32($sp) -b label_3 -label_5: -lw $t1, 36($sp) -sw $t1, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, E_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, E_methods -sw $t1, 12($t0) -sw $t0, 128($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal E_init -sw $a1, 132($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 124($sp) -lw $t1, 124($sp) -sw $t1, 136($sp) -lw $a1, 136($sp) -lw $ra, 0($sp) -addi $sp, $sp, 148 -jr $ra -B_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -B.method5: -addi $sp, $sp, -56 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 32($sp) -lw $a0, 28($sp) -lw $t1, 32($sp) -mul $a0, $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, E_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, E_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal E_init -sw $a1, 52($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 44($sp) -lw $t1, 44($sp) -sw $t1, 56($sp) -lw $a1, 56($sp) -lw $ra, 0($sp) -addi $sp, $sp, 68 -jr $ra -C_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal B_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -C.method6: -addi $sp, $sp, -52 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t1, 28($sp) -neg $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 48($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 40($sp) -lw $t1, 40($sp) -sw $t1, 52($sp) -lw $a1, 52($sp) -lw $ra, 0($sp) -addi $sp, $sp, 64 -jr $ra -C.method5: -addi $sp, $sp, -76 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -lw $t0, 84($sp) -lw $t1, 16($t0) -sw $t1, 44($sp) -lw $t0, 84($sp) -lw $t1, 16($t0) -sw $t1, 48($sp) -lw $a0, 44($sp) -lw $t1, 48($sp) -mul $a0, $a0, $t1 -sw $a0, 40($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 36($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 52($sp) -lw $t0, 36($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t0, 84($sp) -lw $t1, 16($t0) -sw $t1, 32($sp) -lw $a0, 28($sp) -lw $t1, 32($sp) -mul $a0, $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 56($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, E_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, E_methods -sw $t1, 12($t0) -sw $t0, 68($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal E_init -sw $a1, 72($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 68($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 64($sp) -lw $t1, 64($sp) -sw $t1, 76($sp) -lw $a1, 76($sp) -lw $ra, 0($sp) -addi $sp, $sp, 88 -jr $ra -D_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal B_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -D.method7: -addi $sp, $sp, -244 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t1, 252($sp) -sw $t1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t1, 24($sp) -slt $a0, $a0, $t1 -sw $a0, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 40($sp) -lw $t0, 12($sp) -lw $a0, 16($t0) -bnez $a0, label_6 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 64($sp) -li $t0, 0 -sw $t0, 68($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 72($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) -seq $a0, $a0, $t1 -sw $a0, 52($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 76($sp) -lw $t0, 48($sp) -lw $a0, 16($t0) -bnez $a0, label_7 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -li $t0, 1 -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 108($sp) -lw $t0, 100($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) -seq $a0, $a0, $t1 -sw $a0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 112($sp) -lw $t0, 84($sp) -lw $a0, 16($t0) -bnez $a0, label_8 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 136($sp) -li $t0, 2 -sw $t0, 140($sp) -move $t0, $sp -lw $t1, 140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 144($sp) -lw $t0, 136($sp) -lw $t1, 16($t0) -sw $t1, 128($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 132($sp) -lw $a0, 128($sp) -lw $t1, 132($sp) -seq $a0, $a0, $t1 -sw $a0, 124($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 120($sp) -move $t0, $sp -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 148($sp) -lw $t0, 120($sp) -lw $a0, 16($t0) -bnez $a0, label_9 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 172($sp) -li $t0, 3 -sw $t0, 176($sp) -move $t0, $sp -lw $t1, 176($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 180($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 164($sp) -lw $t0, 172($sp) -lw $t1, 16($t0) -sw $t1, 168($sp) -lw $a0, 164($sp) -lw $t1, 168($sp) -sub $a0, $a0, $t1 -sw $a0, 160($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 156($sp) -move $t0, $sp -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 184($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 248($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 248($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 152($sp) -lw $t1, 152($sp) -sw $t1, 116($sp) -b label_10 -label_9: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 188($sp) -li $t0, 0 -sw $t0, 192($sp) -move $t0, $sp -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 188($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 196($sp) -lw $t1, 188($sp) -sw $t1, 116($sp) -label_10: -lw $t1, 116($sp) -sw $t1, 80($sp) -b label_11 -label_8: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 200($sp) -li $t0, 0 -sw $t0, 204($sp) -move $t0, $sp -lw $t1, 204($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 208($sp) -lw $t1, 200($sp) -sw $t1, 80($sp) -label_11: -lw $t1, 80($sp) -sw $t1, 44($sp) -b label_12 -label_7: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 212($sp) -li $t0, 1 -sw $t0, 216($sp) -move $t0, $sp -lw $t1, 216($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 212($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 220($sp) -lw $t1, 212($sp) -sw $t1, 44($sp) -label_12: -lw $t1, 44($sp) -sw $t1, 8($sp) -b label_13 -label_6: -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 236($sp) -lw $t1, 236($sp) -neg $a0, $t1 -sw $a0, 232($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 228($sp) -move $t0, $sp -lw $t1, 232($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 240($sp) -move $t0, $sp -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 248($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 248($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 224($sp) -lw $t1, 224($sp) -sw $t1, 8($sp) -label_13: -lw $t1, 8($sp) -sw $t1, 244($sp) -lw $a1, 244($sp) -lw $ra, 0($sp) -addi $sp, $sp, 256 -jr $ra -E_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -E.method6: -addi $sp, $sp, -68 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 36($sp) -li $t0, 8 -sw $t0, 40($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 44($sp) -lw $t0, 76($sp) -lw $t1, 16($t0) -sw $t1, 28($sp) -lw $t0, 36($sp) -lw $t1, 16($t0) -sw $t1, 32($sp) -lw $a0, 28($sp) -lw $t1, 32($sp) -beq $t1, 0, div_zero_error -div $a0, $a0, $t1 -sw $a0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 48($sp) -lw $t1, 20($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -move $t0, $sp -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 64($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 56($sp) -lw $t1, 56($sp) -sw $t1, 68($sp) -lw $a1, 68($sp) -lw $ra, 0($sp) -addi $sp, $sp, 80 -jr $ra -A2I_init: -addi $sp, $sp, -4 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Object_init -sw $a1, 4($sp) -move $a1, $zero -lw $ra, 0($sp) -addi $sp, $sp, 12 -jr $ra -A2I.c2i: -addi $sp, $sp, -496 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_3 -sw $t0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 36($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_14 -la $t0, s_4 -sw $t0, 60($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 64($sp) -move $t0, $sp -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 68($sp) -move $t0, $sp -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 72($sp) -lw $t0, 44($sp) -lw $a0, 16($t0) -bnez $a0, label_15 -la $t0, s_5 -sw $t0, 96($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 104($sp) -move $t0, $sp -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 84($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 80($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 108($sp) -lw $t0, 80($sp) -lw $a0, 16($t0) -bnez $a0, label_16 -la $t0, s_6 -sw $t0, 132($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 136($sp) -move $t0, $sp -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 140($sp) -move $t0, $sp -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 116($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 144($sp) -lw $t0, 116($sp) -lw $a0, 16($t0) -bnez $a0, label_17 -la $t0, s_7 -sw $t0, 168($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 172($sp) -move $t0, $sp -lw $t1, 168($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 176($sp) -move $t0, $sp -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 156($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 152($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 180($sp) -lw $t0, 152($sp) -lw $a0, 16($t0) -bnez $a0, label_18 -la $t0, s_8 -sw $t0, 204($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 208($sp) -move $t0, $sp -lw $t1, 204($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 212($sp) -move $t0, $sp -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 192($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 188($sp) -move $t0, $sp -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 188($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 216($sp) -lw $t0, 188($sp) -lw $a0, 16($t0) -bnez $a0, label_19 -la $t0, s_9 -sw $t0, 240($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 244($sp) -move $t0, $sp -lw $t1, 240($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 244($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 248($sp) -move $t0, $sp -lw $t1, 244($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 228($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 224($sp) -move $t0, $sp -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 224($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 252($sp) -lw $t0, 224($sp) -lw $a0, 16($t0) -bnez $a0, label_20 -la $t0, s_10 -sw $t0, 276($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 280($sp) -move $t0, $sp -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 280($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 284($sp) -move $t0, $sp -lw $t1, 280($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 264($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 260($sp) -move $t0, $sp -lw $t1, 264($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 260($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 288($sp) -lw $t0, 260($sp) -lw $a0, 16($t0) -bnez $a0, label_21 -la $t0, s_11 -sw $t0, 312($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 316($sp) -move $t0, $sp -lw $t1, 312($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 320($sp) -move $t0, $sp -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 300($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 296($sp) -move $t0, $sp -lw $t1, 300($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 296($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 324($sp) -lw $t0, 296($sp) -lw $a0, 16($t0) -bnez $a0, label_22 -la $t0, s_12 -sw $t0, 348($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 352($sp) -move $t0, $sp -lw $t1, 348($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 352($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 356($sp) -move $t0, $sp -lw $t1, 352($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 504($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 336($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 332($sp) -move $t0, $sp -lw $t1, 336($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 332($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 360($sp) -lw $t0, 332($sp) -lw $a0, 16($t0) -bnez $a0, label_23 -move $t0, $sp -lw $t1, 500($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 500($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 0($t2) -jal $t3 -sw $a1, 364($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 368($sp) -li $t0, 0 -sw $t0, 372($sp) -move $t0, $sp -lw $t1, 372($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 368($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 376($sp) -lw $t1, 368($sp) -sw $t1, 328($sp) -b label_24 -label_23: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 380($sp) -li $t0, 9 -sw $t0, 384($sp) -move $t0, $sp -lw $t1, 384($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 380($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 388($sp) -lw $t1, 380($sp) -sw $t1, 328($sp) -label_24: -lw $t1, 328($sp) -sw $t1, 292($sp) -b label_25 -label_22: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 392($sp) -li $t0, 8 -sw $t0, 396($sp) -move $t0, $sp -lw $t1, 396($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 392($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 400($sp) -lw $t1, 392($sp) -sw $t1, 292($sp) -label_25: -lw $t1, 292($sp) -sw $t1, 256($sp) -b label_26 -label_21: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 404($sp) -li $t0, 7 -sw $t0, 408($sp) -move $t0, $sp -lw $t1, 408($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 404($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 412($sp) -lw $t1, 404($sp) -sw $t1, 256($sp) -label_26: -lw $t1, 256($sp) -sw $t1, 220($sp) -b label_27 -label_20: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 416($sp) -li $t0, 6 -sw $t0, 420($sp) -move $t0, $sp -lw $t1, 420($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 416($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 424($sp) -lw $t1, 416($sp) -sw $t1, 220($sp) -label_27: -lw $t1, 220($sp) -sw $t1, 184($sp) -b label_28 -label_19: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 428($sp) -li $t0, 5 -sw $t0, 432($sp) -move $t0, $sp -lw $t1, 432($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 428($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 436($sp) -lw $t1, 428($sp) -sw $t1, 184($sp) -label_28: -lw $t1, 184($sp) -sw $t1, 148($sp) -b label_29 -label_18: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 440($sp) -li $t0, 4 -sw $t0, 444($sp) -move $t0, $sp -lw $t1, 444($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 440($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 448($sp) -lw $t1, 440($sp) -sw $t1, 148($sp) -label_29: -lw $t1, 148($sp) -sw $t1, 112($sp) -b label_30 -label_17: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 452($sp) -li $t0, 3 -sw $t0, 456($sp) -move $t0, $sp -lw $t1, 456($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 452($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 460($sp) -lw $t1, 452($sp) -sw $t1, 112($sp) -label_30: -lw $t1, 112($sp) -sw $t1, 76($sp) -b label_31 -label_16: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 464($sp) -li $t0, 2 -sw $t0, 468($sp) -move $t0, $sp -lw $t1, 468($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 464($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 472($sp) -lw $t1, 464($sp) -sw $t1, 76($sp) -label_31: -lw $t1, 76($sp) -sw $t1, 40($sp) -b label_32 -label_15: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 476($sp) -li $t0, 1 -sw $t0, 480($sp) -move $t0, $sp -lw $t1, 480($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 476($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 484($sp) -lw $t1, 476($sp) -sw $t1, 40($sp) -label_32: -lw $t1, 40($sp) -sw $t1, 4($sp) -b label_33 -label_14: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 488($sp) -li $t0, 0 -sw $t0, 492($sp) -move $t0, $sp -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 488($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 496($sp) -lw $t1, 488($sp) -sw $t1, 4($sp) -label_33: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 508 -jr $ra -A2I.i2c: -addi $sp, $sp, -496 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 24($sp) -li $t0, 0 -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -seq $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 36($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_34 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -li $t0, 1 -sw $t0, 64($sp) -move $t0, $sp -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 68($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $a0, 52($sp) -lw $t1, 56($sp) -seq $a0, $a0, $t1 -sw $a0, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 72($sp) -lw $t0, 44($sp) -lw $a0, 16($t0) -bnez $a0, label_35 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 96($sp) -li $t0, 2 -sw $t0, 100($sp) -move $t0, $sp -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 104($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 88($sp) -lw $t0, 96($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $a0, 88($sp) -lw $t1, 92($sp) -seq $a0, $a0, $t1 -sw $a0, 84($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 80($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 108($sp) -lw $t0, 80($sp) -lw $a0, 16($t0) -bnez $a0, label_36 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 132($sp) -li $t0, 3 -sw $t0, 136($sp) -move $t0, $sp -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 140($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 124($sp) -lw $t0, 132($sp) -lw $t1, 16($t0) -sw $t1, 128($sp) -lw $a0, 124($sp) -lw $t1, 128($sp) -seq $a0, $a0, $t1 -sw $a0, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 116($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 144($sp) -lw $t0, 116($sp) -lw $a0, 16($t0) -bnez $a0, label_37 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 168($sp) -li $t0, 4 -sw $t0, 172($sp) -move $t0, $sp -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 168($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 176($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 160($sp) -lw $t0, 168($sp) -lw $t1, 16($t0) -sw $t1, 164($sp) -lw $a0, 160($sp) -lw $t1, 164($sp) -seq $a0, $a0, $t1 -sw $a0, 156($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 152($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 180($sp) -lw $t0, 152($sp) -lw $a0, 16($t0) -bnez $a0, label_38 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 204($sp) -li $t0, 5 -sw $t0, 208($sp) -move $t0, $sp -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 204($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 212($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 196($sp) -lw $t0, 204($sp) -lw $t1, 16($t0) -sw $t1, 200($sp) -lw $a0, 196($sp) -lw $t1, 200($sp) -seq $a0, $a0, $t1 -sw $a0, 192($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 188($sp) -move $t0, $sp -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 188($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 216($sp) -lw $t0, 188($sp) -lw $a0, 16($t0) -bnez $a0, label_39 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 240($sp) -li $t0, 6 -sw $t0, 244($sp) -move $t0, $sp -lw $t1, 244($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 240($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 248($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 232($sp) -lw $t0, 240($sp) -lw $t1, 16($t0) -sw $t1, 236($sp) -lw $a0, 232($sp) -lw $t1, 236($sp) -seq $a0, $a0, $t1 -sw $a0, 228($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 224($sp) -move $t0, $sp -lw $t1, 228($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 224($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 252($sp) -lw $t0, 224($sp) -lw $a0, 16($t0) -bnez $a0, label_40 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 276($sp) -li $t0, 7 -sw $t0, 280($sp) -move $t0, $sp -lw $t1, 280($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 284($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 268($sp) -lw $t0, 276($sp) -lw $t1, 16($t0) -sw $t1, 272($sp) -lw $a0, 268($sp) -lw $t1, 272($sp) -seq $a0, $a0, $t1 -sw $a0, 264($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 260($sp) -move $t0, $sp -lw $t1, 264($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 260($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 288($sp) -lw $t0, 260($sp) -lw $a0, 16($t0) -bnez $a0, label_41 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 312($sp) -li $t0, 8 -sw $t0, 316($sp) -move $t0, $sp -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 312($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 320($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 304($sp) -lw $t0, 312($sp) -lw $t1, 16($t0) -sw $t1, 308($sp) -lw $a0, 304($sp) -lw $t1, 308($sp) -seq $a0, $a0, $t1 -sw $a0, 300($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 296($sp) -move $t0, $sp -lw $t1, 300($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 296($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 324($sp) -lw $t0, 296($sp) -lw $a0, 16($t0) -bnez $a0, label_42 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 348($sp) -li $t0, 9 -sw $t0, 352($sp) -move $t0, $sp -lw $t1, 352($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 348($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 356($sp) -lw $t0, 504($sp) -lw $t1, 16($t0) -sw $t1, 340($sp) -lw $t0, 348($sp) -lw $t1, 16($t0) -sw $t1, 344($sp) -lw $a0, 340($sp) -lw $t1, 344($sp) -seq $a0, $a0, $t1 -sw $a0, 336($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 332($sp) -move $t0, $sp -lw $t1, 336($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 332($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 360($sp) -lw $t0, 332($sp) -lw $a0, 16($t0) -bnez $a0, label_43 -move $t0, $sp -lw $t1, 500($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 500($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 0($t2) -jal $t3 -sw $a1, 364($sp) -la $t0, empty_str -sw $t0, 368($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 372($sp) -move $t0, $sp -lw $t1, 368($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 372($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 376($sp) -lw $t1, 372($sp) -sw $t1, 328($sp) -b label_44 -label_43: -la $t0, s_12 -sw $t0, 380($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 384($sp) -move $t0, $sp -lw $t1, 380($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 384($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 388($sp) -lw $t1, 384($sp) -sw $t1, 328($sp) -label_44: -lw $t1, 328($sp) -sw $t1, 292($sp) -b label_45 -label_42: -la $t0, s_11 -sw $t0, 392($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 396($sp) -move $t0, $sp -lw $t1, 392($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 396($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 400($sp) -lw $t1, 396($sp) -sw $t1, 292($sp) -label_45: -lw $t1, 292($sp) -sw $t1, 256($sp) -b label_46 -label_41: -la $t0, s_10 -sw $t0, 404($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 408($sp) -move $t0, $sp -lw $t1, 404($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 408($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 412($sp) -lw $t1, 408($sp) -sw $t1, 256($sp) -label_46: -lw $t1, 256($sp) -sw $t1, 220($sp) -b label_47 -label_40: -la $t0, s_9 -sw $t0, 416($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 420($sp) -move $t0, $sp -lw $t1, 416($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 420($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 424($sp) -lw $t1, 420($sp) -sw $t1, 220($sp) -label_47: -lw $t1, 220($sp) -sw $t1, 184($sp) -b label_48 -label_39: -la $t0, s_8 -sw $t0, 428($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 432($sp) -move $t0, $sp -lw $t1, 428($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 432($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 436($sp) -lw $t1, 432($sp) -sw $t1, 184($sp) -label_48: -lw $t1, 184($sp) -sw $t1, 148($sp) -b label_49 -label_38: -la $t0, s_7 -sw $t0, 440($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 444($sp) -move $t0, $sp -lw $t1, 440($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 444($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 448($sp) -lw $t1, 444($sp) -sw $t1, 148($sp) -label_49: -lw $t1, 148($sp) -sw $t1, 112($sp) -b label_50 -label_37: -la $t0, s_6 -sw $t0, 452($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 456($sp) -move $t0, $sp -lw $t1, 452($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 456($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 460($sp) -lw $t1, 456($sp) -sw $t1, 112($sp) -label_50: -lw $t1, 112($sp) -sw $t1, 76($sp) -b label_51 -label_36: -la $t0, s_5 -sw $t0, 464($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 468($sp) -move $t0, $sp -lw $t1, 464($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 468($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 472($sp) -lw $t1, 468($sp) -sw $t1, 76($sp) -label_51: -lw $t1, 76($sp) -sw $t1, 40($sp) -b label_52 -label_35: -la $t0, s_4 -sw $t0, 476($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 480($sp) -move $t0, $sp -lw $t1, 476($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 480($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 484($sp) -lw $t1, 480($sp) -sw $t1, 40($sp) -label_52: -lw $t1, 40($sp) -sw $t1, 4($sp) -b label_53 -label_34: -la $t0, s_3 -sw $t0, 488($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 492($sp) -move $t0, $sp -lw $t1, 488($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 496($sp) -lw $t1, 492($sp) -sw $t1, 4($sp) -label_53: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 508 -jr $ra -A2I.a2i: -addi $sp, $sp, -312 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -seq $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 40($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_54 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 68($sp) -li $t0, 1 -sw $t0, 72($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 76($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 80($sp) -li $t0, 0 -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 88($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 64($sp) -la $t0, s_13 -sw $t0, 92($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 96($sp) -move $t0, $sp -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 100($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 52($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 104($sp) -lw $t0, 48($sp) -lw $a0, 16($t0) -bnez $a0, label_55 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 132($sp) -li $t0, 1 -sw $t0, 136($sp) -move $t0, $sp -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 140($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 144($sp) -li $t0, 0 -sw $t0, 148($sp) -move $t0, $sp -lw $t1, 148($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 144($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 152($sp) -move $t0, $sp -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 144($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 128($sp) -la $t0, s_14 -sw $t0, 156($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 160($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 164($sp) -move $t0, $sp -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 116($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 112($sp) -move $t0, $sp -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 168($sp) -lw $t0, 112($sp) -lw $a0, 16($t0) -bnez $a0, label_56 -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 24($t2) -jal $t3 -sw $a1, 172($sp) -lw $t1, 172($sp) -sw $t1, 108($sp) -b label_57 -label_56: -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 200($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 204($sp) -li $t0, 1 -sw $t0, 208($sp) -move $t0, $sp -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 204($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 212($sp) -lw $t0, 200($sp) -lw $t1, 16($t0) -sw $t1, 192($sp) -lw $t0, 204($sp) -lw $t1, 16($t0) -sw $t1, 196($sp) -lw $a0, 192($sp) -lw $t1, 196($sp) -sub $a0, $a0, $t1 -sw $a0, 188($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 184($sp) -move $t0, $sp -lw $t1, 188($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 184($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 216($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 220($sp) -li $t0, 1 -sw $t0, 224($sp) -move $t0, $sp -lw $t1, 224($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 220($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 228($sp) -move $t0, $sp -lw $t1, 184($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 220($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 180($sp) -move $t0, $sp -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 24($t2) -jal $t3 -sw $a1, 176($sp) -lw $t1, 176($sp) -sw $t1, 108($sp) -label_57: -lw $t1, 108($sp) -sw $t1, 44($sp) -b label_58 -label_55: -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 268($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 272($sp) -li $t0, 1 -sw $t0, 276($sp) -move $t0, $sp -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 272($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 280($sp) -lw $t0, 268($sp) -lw $t1, 16($t0) -sw $t1, 260($sp) -lw $t0, 272($sp) -lw $t1, 16($t0) -sw $t1, 264($sp) -lw $a0, 260($sp) -lw $t1, 264($sp) -sub $a0, $a0, $t1 -sw $a0, 256($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 252($sp) -move $t0, $sp -lw $t1, 256($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 252($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 284($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 288($sp) -li $t0, 1 -sw $t0, 292($sp) -move $t0, $sp -lw $t1, 292($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 288($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 296($sp) -move $t0, $sp -lw $t1, 252($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 288($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 320($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 248($sp) -move $t0, $sp -lw $t1, 248($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 24($t2) -jal $t3 -sw $a1, 244($sp) -lw $t0, 244($sp) -lw $t1, 16($t0) -sw $t1, 240($sp) -lw $t1, 240($sp) -neg $a0, $t1 -sw $a0, 236($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 232($sp) -move $t0, $sp -lw $t1, 236($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 232($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 300($sp) -lw $t1, 232($sp) -sw $t1, 44($sp) -label_58: -lw $t1, 44($sp) -sw $t1, 4($sp) -b label_59 -label_54: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 304($sp) -li $t0, 0 -sw $t0, 308($sp) -move $t0, $sp -lw $t1, 308($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 312($sp) -lw $t1, 304($sp) -sw $t1, 4($sp) -label_59: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 324 -jr $ra -A2I.a2i_aux: -addi $sp, $sp, -188 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -li $t0, 0 -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 12($sp) -lw $t1, 4($sp) -sw $t1, 16($sp) -move $t0, $sp -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 20($sp) -lw $t1, 20($sp) -sw $t1, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t1, 28($sp) -sw $t1, 40($sp) -label_60: -lw $t0, 40($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) -slt $a0, $a0, $t1 -sw $a0, 52($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 64($sp) -lw $t0, 48($sp) -lw $a0, 16($t0) -bnez $a0, label_61 -b label_62 -label_61: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -li $t0, 10 -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 108($sp) -lw $t0, 16($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t0, 100($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) -mul $a0, $a0, $t1 -sw $a0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 112($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 124($sp) -li $t0, 1 -sw $t0, 128($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 132($sp) -move $t0, $sp -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 120($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 192($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 116($sp) -lw $t0, 84($sp) -lw $t1, 16($t0) -sw $t1, 76($sp) -lw $t0, 116($sp) -lw $t1, 16($t0) -sw $t1, 80($sp) -lw $a0, 76($sp) -lw $t1, 80($sp) -add $a0, $a0, $t1 -sw $a0, 72($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 68($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 136($sp) -lw $t1, 68($sp) -sw $t1, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 160($sp) -li $t0, 1 -sw $t0, 164($sp) -move $t0, $sp -lw $t1, 164($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 168($sp) -lw $t0, 40($sp) -lw $t1, 16($t0) -sw $t1, 152($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 156($sp) -lw $a0, 152($sp) -lw $t1, 156($sp) -add $a0, $a0, $t1 -sw $a0, 148($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 144($sp) -move $t0, $sp -lw $t1, 148($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 144($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 172($sp) -lw $t1, 144($sp) -sw $t1, 40($sp) -b label_60 -label_62: -lw $t1, 44($sp) -sw $t1, 180($sp) -lw $t1, 180($sp) -sw $t1, 184($sp) -lw $t1, 16($sp) -sw $t1, 188($sp) -lw $a1, 188($sp) -lw $ra, 0($sp) -addi $sp, $sp, 200 -jr $ra -A2I.i2a: -addi $sp, $sp, -156 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 24($sp) -li $t0, 0 -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t0, 164($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -seq $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 36($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_63 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -li $t0, 0 -sw $t0, 64($sp) -move $t0, $sp -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 68($sp) -lw $t0, 60($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $t0, 164($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $a0, 52($sp) -lw $t1, 56($sp) -slt $a0, $a0, $t1 -sw $a0, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 44($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 72($sp) -lw $t0, 44($sp) -lw $a0, 16($t0) -bnez $a0, label_64 -la $t0, s_13 -sw $t0, 80($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 124($sp) -li $t0, 1 -sw $t0, 128($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 132($sp) -lw $t0, 124($sp) -lw $t1, 16($t0) -sw $t1, 120($sp) -lw $t1, 120($sp) -neg $a0, $t1 -sw $a0, 116($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 112($sp) -move $t0, $sp -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 136($sp) -lw $t0, 164($sp) -lw $t1, 16($t0) -sw $t1, 104($sp) -lw $t0, 112($sp) -lw $t1, 16($t0) -sw $t1, 108($sp) -lw $a0, 104($sp) -lw $t1, 108($sp) -mul $a0, $a0, $t1 -sw $a0, 100($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 96($sp) -move $t0, $sp -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 140($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 92($sp) -move $t0, $sp -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 76($sp) -lw $t1, 76($sp) -sw $t1, 40($sp) -b label_65 -label_64: -move $t0, $sp -lw $t1, 164($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 160($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 144($sp) -lw $t1, 144($sp) -sw $t1, 40($sp) -label_65: -lw $t1, 40($sp) -sw $t1, 4($sp) -b label_66 -label_63: -la $t0, s_3 -sw $t0, 148($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 152($sp) -move $t0, $sp -lw $t1, 148($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 156($sp) -lw $t1, 152($sp) -sw $t1, 4($sp) -label_66: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 168 -jr $ra -A2I.i2a_aux: -addi $sp, $sp, -152 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 24($sp) -li $t0, 0 -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 32($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 16($sp) -lw $t0, 24($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $a0, 16($sp) -lw $t1, 20($sp) -seq $a0, $a0, $t1 -sw $a0, 12($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 36($sp) -lw $t0, 8($sp) -lw $a0, 16($t0) -bnez $a0, label_67 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 56($sp) -li $t0, 10 -sw $t0, 60($sp) -move $t0, $sp -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 56($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 64($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 48($sp) -lw $t0, 56($sp) -lw $t1, 16($t0) -sw $t1, 52($sp) -lw $a0, 48($sp) -lw $t1, 52($sp) -beq $t1, 0, div_zero_error -div $a0, $a0, $t1 -sw $a0, 44($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 40($sp) -move $t0, $sp -lw $t1, 44($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 68($sp) -lw $t1, 40($sp) -sw $t1, 72($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 80($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 120($sp) -li $t0, 10 -sw $t0, 124($sp) -move $t0, $sp -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 128($sp) -lw $t0, 72($sp) -lw $t1, 16($t0) -sw $t1, 112($sp) -lw $t0, 120($sp) -lw $t1, 16($t0) -sw $t1, 116($sp) -lw $a0, 112($sp) -lw $t1, 116($sp) -mul $a0, $a0, $t1 -sw $a0, 108($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 108($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 132($sp) -lw $t0, 160($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $t0, 104($sp) -lw $t1, 16($t0) -sw $t1, 100($sp) -lw $a0, 96($sp) -lw $t1, 100($sp) -sub $a0, $a0, $t1 -sw $a0, 92($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 88($sp) -move $t0, $sp -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 136($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 84($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 76($sp) -lw $t1, 76($sp) -sw $t1, 140($sp) -lw $t1, 140($sp) -sw $t1, 4($sp) -b label_68 -label_67: -la $t0, empty_str -sw $t0, 144($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 148($sp) -move $t0, $sp -lw $t1, 144($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 148($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 152($sp) -lw $t1, 148($sp) -sw $t1, 4($sp) -label_68: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 164 -jr $ra -Main_init: -addi $sp, $sp, -28 -addi $sp, $sp, -4 -sw $ra, 0($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal IO_init -sw $a1, 4($sp) -move $a1, $zero -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 8($sp) -la $t0, empty_str -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 16($sp) -lw $t0, 32($sp) -lw $t1, 8($sp) -sw $t1, 16($t0) -lw $t0, 32($sp) -la $t1, void -sw $t1, 20($t0) -lw $t0, 32($sp) -la $t1, void -sw $t1, 24($t0) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -li $t0, 1 -sw $t0, 24($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 28($sp) -lw $t0, 32($sp) -lw $t1, 20($sp) -sw $t1, 28($t0) -lw $ra, 0($sp) -addi $sp, $sp, 36 -jr $ra -Main.menu: -addi $sp, $sp, -356 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_15 -sw $t0, 8($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 4($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 20($sp) -la $t0, s_16 -sw $t0, 32($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 36($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 40($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 28($sp) -la $t0, s_17 -sw $t0, 48($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 52($sp) -move $t0, $sp -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 56($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 44($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 60($sp) -la $t0, s_18 -sw $t0, 72($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 76($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 76($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 80($sp) -move $t0, $sp -lw $t1, 76($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 68($sp) -la $t0, s_19 -sw $t0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 92($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 96($sp) -move $t0, $sp -lw $t1, 92($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 84($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 100($sp) -la $t0, s_20 -sw $t0, 112($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 116($sp) -move $t0, $sp -lw $t1, 112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 120($sp) -move $t0, $sp -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 108($sp) -la $t0, s_21 -sw $t0, 128($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 132($sp) -move $t0, $sp -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 136($sp) -move $t0, $sp -lw $t1, 132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 124($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 140($sp) -la $t0, s_22 -sw $t0, 152($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 156($sp) -move $t0, $sp -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 160($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 148($sp) -la $t0, s_23 -sw $t0, 168($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 172($sp) -move $t0, $sp -lw $t1, 168($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 176($sp) -move $t0, $sp -lw $t1, 172($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 164($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 180($sp) -la $t0, s_24 -sw $t0, 192($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 196($sp) -move $t0, $sp -lw $t1, 192($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 200($sp) -move $t0, $sp -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 188($sp) -la $t0, s_25 -sw $t0, 208($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 212($sp) -move $t0, $sp -lw $t1, 208($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 212($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 216($sp) -move $t0, $sp -lw $t1, 212($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 204($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 220($sp) -la $t0, s_26 -sw $t0, 232($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 236($sp) -move $t0, $sp -lw $t1, 232($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 236($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 240($sp) -move $t0, $sp -lw $t1, 236($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 228($sp) -la $t0, s_27 -sw $t0, 248($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 252($sp) -move $t0, $sp -lw $t1, 248($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 252($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 256($sp) -move $t0, $sp -lw $t1, 252($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 244($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 260($sp) -la $t0, s_28 -sw $t0, 272($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 276($sp) -move $t0, $sp -lw $t1, 272($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 280($sp) -move $t0, $sp -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 268($sp) -la $t0, s_29 -sw $t0, 288($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 292($sp) -move $t0, $sp -lw $t1, 288($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 292($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 296($sp) -move $t0, $sp -lw $t1, 292($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 284($sp) -lw $t0, 360($sp) -lw $t1, 20($t0) -sw $t1, 304($sp) -move $t0, $sp -lw $t1, 304($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 300($sp) -la $t0, s_30 -sw $t0, 312($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 316($sp) -move $t0, $sp -lw $t1, 312($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 320($sp) -move $t0, $sp -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 308($sp) -la $t0, s_31 -sw $t0, 328($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 332($sp) -move $t0, $sp -lw $t1, 328($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 332($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 336($sp) -move $t0, $sp -lw $t1, 332($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 324($sp) -la $t0, s_32 -sw $t0, 344($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 348($sp) -move $t0, $sp -lw $t1, 344($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 348($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 352($sp) -move $t0, $sp -lw $t1, 348($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 340($sp) -move $t0, $sp -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 360($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 356($sp) -lw $a1, 356($sp) -lw $ra, 0($sp) -addi $sp, $sp, 364 -jr $ra -Main.prompt: -addi $sp, $sp, -36 -addi $sp, $sp, -4 -sw $ra, 0($sp) -la $t0, s_1 -sw $t0, 8($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 8($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 16($sp) -move $t0, $sp -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 4($sp) -la $t0, s_33 -sw $t0, 24($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 20($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 36($sp) -lw $a1, 36($sp) -lw $ra, 0($sp) -addi $sp, $sp, 44 -jr $ra -Main.get_int: -addi $sp, $sp, -32 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A2I_init -sw $a1, 8($sp) -lw $t1, 4($sp) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 16($sp) -lw $t1, 16($sp) -sw $t1, 20($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 24($sp) -lw $t1, 24($sp) -sw $t1, 28($sp) -lw $t1, 28($sp) -sw $t1, 32($sp) -lw $a1, 32($sp) -lw $ra, 0($sp) -addi $sp, $sp, 40 -jr $ra -Main.is_even: -addi $sp, $sp, -196 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t1, 204($sp) -sw $t1, 4($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 28($sp) -li $t0, 0 -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 36($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 20($sp) -lw $t0, 28($sp) -lw $t1, 16($t0) -sw $t1, 24($sp) -lw $a0, 20($sp) -lw $t1, 24($sp) -slt $a0, $a0, $t1 -sw $a0, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 12($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 40($sp) -lw $t0, 12($sp) -lw $a0, 16($t0) -bnez $a0, label_69 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 64($sp) -li $t0, 0 -sw $t0, 68($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 64($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 72($sp) -lw $t0, 64($sp) -lw $t1, 16($t0) -sw $t1, 56($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 60($sp) -lw $a0, 56($sp) -lw $t1, 60($sp) -seq $a0, $a0, $t1 -sw $a0, 52($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 48($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 76($sp) -lw $t0, 48($sp) -lw $a0, 16($t0) -bnez $a0, label_70 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -li $t0, 1 -sw $t0, 104($sp) -move $t0, $sp -lw $t1, 104($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 108($sp) -lw $t0, 100($sp) -lw $t1, 16($t0) -sw $t1, 92($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 96($sp) -lw $a0, 92($sp) -lw $t1, 96($sp) -seq $a0, $a0, $t1 -sw $a0, 88($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 84($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 112($sp) -lw $t0, 84($sp) -lw $a0, 16($t0) -bnez $a0, label_71 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 136($sp) -li $t0, 2 -sw $t0, 140($sp) -move $t0, $sp -lw $t1, 140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 144($sp) -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 128($sp) -lw $t0, 136($sp) -lw $t1, 16($t0) -sw $t1, 132($sp) -lw $a0, 128($sp) -lw $t1, 132($sp) -sub $a0, $a0, $t1 -sw $a0, 124($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 120($sp) -move $t0, $sp -lw $t1, 124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 148($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 116($sp) -lw $t1, 116($sp) -sw $t1, 80($sp) -b label_72 -label_71: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 152($sp) -li $t0, 0 -sw $t0, 156($sp) -move $t0, $sp -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 152($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 160($sp) -lw $t1, 152($sp) -sw $t1, 80($sp) -label_72: -lw $t1, 80($sp) -sw $t1, 44($sp) -b label_73 -label_70: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 164($sp) -li $t0, 1 -sw $t0, 168($sp) -move $t0, $sp -lw $t1, 168($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 164($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 172($sp) -lw $t1, 164($sp) -sw $t1, 44($sp) -label_73: -lw $t1, 44($sp) -sw $t1, 8($sp) -b label_74 -label_69: -lw $t0, 4($sp) -lw $t1, 16($t0) -sw $t1, 188($sp) -lw $t1, 188($sp) -neg $a0, $t1 -sw $a0, 184($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 180($sp) -move $t0, $sp -lw $t1, 184($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 192($sp) -move $t0, $sp -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 200($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 176($sp) -lw $t1, 176($sp) -sw $t1, 8($sp) -label_74: -lw $t1, 8($sp) -sw $t1, 196($sp) -lw $a1, 196($sp) -lw $ra, 0($sp) -addi $sp, $sp, 208 -jr $ra -Main.class_type: -addi $sp, $sp, -124 -addi $sp, $sp, -4 -sw $ra, 0($sp) -lw $t0, 132($sp) -lw $t1, 0($t0) -la $a0, void -bne $t1 $a0 label_76 -b case_void_error -label_76: -blt $t1 9 label_77 -bgt $t1 9 label_77 -lw $t1, 132($sp) -sw $t1, 8($sp) -la $t0, s_34 -sw $t0, 16($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 20($sp) -move $t0, $sp -lw $t1, 16($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 24($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 12($sp) -lw $t1, 12($sp) -sw $t1, 4($sp) -b label_75 -label_77: -blt $t1 8 label_78 -bgt $t1 9 label_78 -lw $t1, 132($sp) -sw $t1, 28($sp) -la $t0, s_35 -sw $t0, 36($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 40($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 44($sp) -move $t0, $sp -lw $t1, 40($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 32($sp) -lw $t1, 32($sp) -sw $t1, 4($sp) -b label_75 -label_78: -blt $t1 7 label_79 -bgt $t1 7 label_79 -lw $t1, 132($sp) -sw $t1, 48($sp) -la $t0, s_36 -sw $t0, 56($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 60($sp) -move $t0, $sp -lw $t1, 56($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 64($sp) -move $t0, $sp -lw $t1, 60($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 52($sp) -lw $t1, 52($sp) -sw $t1, 4($sp) -b label_75 -label_79: -blt $t1 6 label_80 -bgt $t1 9 label_80 -lw $t1, 132($sp) -sw $t1, 68($sp) -la $t0, s_37 -sw $t0, 76($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 80($sp) -move $t0, $sp -lw $t1, 76($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 84($sp) -move $t0, $sp -lw $t1, 80($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 72($sp) -lw $t1, 72($sp) -sw $t1, 4($sp) -b label_75 -label_80: -blt $t1 5 label_81 -bgt $t1 9 label_81 -lw $t1, 132($sp) -sw $t1, 88($sp) -la $t0, s_38 -sw $t0, 96($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 100($sp) -move $t0, $sp -lw $t1, 96($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 104($sp) -move $t0, $sp -lw $t1, 100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 92($sp) -lw $t1, 92($sp) -sw $t1, 4($sp) -b label_75 -label_81: -blt $t1 0 label_82 -bgt $t1 9 label_82 -lw $t1, 132($sp) -sw $t1, 108($sp) -la $t0, s_39 -sw $t0, 116($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 120($sp) -move $t0, $sp -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 124($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 128($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 112($sp) -lw $t1, 112($sp) -sw $t1, 4($sp) -b label_75 -label_82: -b case_no_match_error -label_75: -lw $a1, 4($sp) -lw $ra, 0($sp) -addi $sp, $sp, 136 -jr $ra -Main.print: -addi $sp, $sp, -44 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A2I_init -sw $a1, 8($sp) -lw $t1, 4($sp) -sw $t1, 12($sp) -move $t0, $sp -lw $t1, 52($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 52($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 24($sp) -move $t0, $sp -lw $t1, 24($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 12($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 20($sp) -move $t0, $sp -lw $t1, 20($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 16($sp) -la $t0, s_40 -sw $t0, 32($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 36($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 40($sp) -move $t0, $sp -lw $t1, 36($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 48($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 28($sp) -lw $t1, 28($sp) -sw $t1, 44($sp) -lw $a1, 44($sp) -lw $ra, 0($sp) -addi $sp, $sp, 56 -jr $ra -Main.main: -addi $sp, $sp, -1136 -addi $sp, $sp, -4 -sw $ra, 0($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 4($sp) -move $t0, $sp -lw $t1, 4($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 8($sp) -lw $t0, 1140($sp) -lw $t1, 4($sp) -sw $t1, 20($t0) -label_83: -lw $t0, 1140($sp) -lw $t1, 28($t0) -sw $t1, 20($sp) -lw $t0, 20($sp) -lw $a0, 16($t0) -bnez $a0, label_84 -b label_85 -label_84: -la $t0, s_41 -sw $t0, 28($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 32($sp) -move $t0, $sp -lw $t1, 28($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 36($sp) -move $t0, $sp -lw $t1, 32($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 24($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 40($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 56($sp) -move $t0, $sp -lw $t1, 56($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 52($sp) -lw $t0, 52($sp) -lw $a0, 16($t0) -bnez $a0, label_86 -la $t0, s_42 -sw $t0, 68($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 72($sp) -move $t0, $sp -lw $t1, 68($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 76($sp) -move $t0, $sp -lw $t1, 72($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 64($sp) -lw $t1, 64($sp) -sw $t1, 48($sp) -b label_87 -label_86: -la $t0, s_43 -sw $t0, 84($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 88($sp) -move $t0, $sp -lw $t1, 84($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 92($sp) -move $t0, $sp -lw $t1, 88($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 80($sp) -lw $t1, 80($sp) -sw $t1, 48($sp) -label_87: -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 44($t2) -jal $t3 -sw $a1, 96($sp) -move $t0, $sp -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 104($sp) -lw $t0, 1140($sp) -lw $t1, 104($sp) -sw $t1, 16($t0) -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_44 -sw $t0, 136($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 140($sp) -move $t0, $sp -lw $t1, 136($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 144($sp) -move $t0, $sp -lw $t1, 140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 120($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 116($sp) -move $t0, $sp -lw $t1, 120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 116($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 148($sp) -lw $t0, 116($sp) -lw $a0, 16($t0) -bnez $a0, label_88 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_45 -sw $t0, 176($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 180($sp) -move $t0, $sp -lw $t1, 176($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 184($sp) -move $t0, $sp -lw $t1, 180($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 160($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 156($sp) -move $t0, $sp -lw $t1, 160($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 156($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 188($sp) -lw $t0, 156($sp) -lw $a0, 16($t0) -bnez $a0, label_89 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_46 -sw $t0, 216($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 220($sp) -move $t0, $sp -lw $t1, 216($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 220($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 224($sp) -move $t0, $sp -lw $t1, 220($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 200($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 196($sp) -move $t0, $sp -lw $t1, 200($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 196($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 228($sp) -lw $t0, 196($sp) -lw $a0, 16($t0) -bnez $a0, label_90 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_47 -sw $t0, 256($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 260($sp) -move $t0, $sp -lw $t1, 256($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 260($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 264($sp) -move $t0, $sp -lw $t1, 260($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 240($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 236($sp) -move $t0, $sp -lw $t1, 240($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 236($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 268($sp) -lw $t0, 236($sp) -lw $a0, 16($t0) -bnez $a0, label_91 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_48 -sw $t0, 296($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 300($sp) -move $t0, $sp -lw $t1, 296($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 300($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 304($sp) -move $t0, $sp -lw $t1, 300($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 280($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 276($sp) -move $t0, $sp -lw $t1, 280($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 276($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 308($sp) -lw $t0, 276($sp) -lw $a0, 16($t0) -bnez $a0, label_92 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_49 -sw $t0, 336($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 340($sp) -move $t0, $sp -lw $t1, 336($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 340($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 344($sp) -move $t0, $sp -lw $t1, 340($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 320($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 316($sp) -move $t0, $sp -lw $t1, 320($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 316($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 348($sp) -lw $t0, 316($sp) -lw $a0, 16($t0) -bnez $a0, label_93 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_50 -sw $t0, 376($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 380($sp) -move $t0, $sp -lw $t1, 376($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 380($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 384($sp) -move $t0, $sp -lw $t1, 380($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 360($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 356($sp) -move $t0, $sp -lw $t1, 360($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 356($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 388($sp) -lw $t0, 356($sp) -lw $a0, 16($t0) -bnez $a0, label_94 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_51 -sw $t0, 416($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 420($sp) -move $t0, $sp -lw $t1, 416($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 420($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 424($sp) -move $t0, $sp -lw $t1, 420($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 400($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 396($sp) -move $t0, $sp -lw $t1, 400($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 396($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 428($sp) -lw $t0, 396($sp) -lw $a0, 16($t0) -bnez $a0, label_95 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_52 -sw $t0, 456($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 460($sp) -move $t0, $sp -lw $t1, 456($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 460($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 464($sp) -move $t0, $sp -lw $t1, 460($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 440($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 436($sp) -move $t0, $sp -lw $t1, 440($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 436($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 468($sp) -lw $t0, 436($sp) -lw $a0, 16($t0) -bnez $a0, label_96 -lw $t0, 1140($sp) -lw $t1, 16($t0) -sw $t1, 492($sp) -la $t0, s_53 -sw $t0, 496($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 500($sp) -move $t0, $sp -lw $t1, 496($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 500($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 504($sp) -move $t0, $sp -lw $t1, 500($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 492($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_equals -sw $a1, 480($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 476($sp) -move $t0, $sp -lw $t1, 480($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 476($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 508($sp) -lw $t0, 476($sp) -lw $a0, 16($t0) -bnez $a0, label_97 -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 516($sp) -move $t0, $sp -lw $t1, 516($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 520($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 524($sp) -move $t0, $sp -lw $t1, 524($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 516($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 516($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 20($t2) -jal $t3 -sw $a1, 512($sp) -lw $t0, 1140($sp) -lw $t1, 512($sp) -sw $t1, 20($t0) -lw $t1, 512($sp) -sw $t1, 472($sp) -b label_98 -label_97: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 3 -sw $t1, 0($t0) -la $t1, Bool_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Bool_methods -sw $t1, 12($t0) -sw $t0, 536($sp) -li $t0, 0 -sw $t0, 540($sp) -move $t0, $sp -lw $t1, 540($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 536($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Bool_init -sw $a1, 544($sp) -lw $t0, 1140($sp) -lw $t1, 536($sp) -sw $t1, 28($t0) -lw $t1, 536($sp) -sw $t1, 472($sp) -label_98: -lw $t1, 472($sp) -sw $t1, 432($sp) -b label_99 -label_96: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 552($sp) -move $t0, $sp -lw $t1, 552($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 556($sp) -lw $t0, 1140($sp) -lw $t1, 552($sp) -sw $t1, 20($t0) -lw $t1, 552($sp) -sw $t1, 432($sp) -label_99: -lw $t1, 432($sp) -sw $t1, 392($sp) -b label_100 -label_95: -la $t1, void -sw $t1, 564($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 9 -sw $t1, 0($t0) -la $t1, E_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, E_methods -sw $t1, 12($t0) -sw $t0, 572($sp) -move $t0, $sp -lw $t1, 572($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal E_init -sw $a1, 576($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 580($sp) -move $t0, $sp -lw $t1, 580($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 572($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 572($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 44($t2) -jal $t3 -sw $a1, 568($sp) -lw $t1, 568($sp) -sw $t1, 564($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 608($sp) -move $t0, $sp -lw $t1, 564($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 564($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 632($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 636($sp) -li $t0, 8 -sw $t0, 640($sp) -move $t0, $sp -lw $t1, 640($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 636($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 644($sp) -lw $t0, 632($sp) -lw $t1, 16($t0) -sw $t1, 624($sp) -lw $t0, 636($sp) -lw $t1, 16($t0) -sw $t1, 628($sp) -lw $a0, 624($sp) -lw $t1, 628($sp) -mul $a0, $a0, $t1 -sw $a0, 620($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 616($sp) -move $t0, $sp -lw $t1, 620($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 616($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 648($sp) -lw $t0, 608($sp) -lw $t1, 16($t0) -sw $t1, 600($sp) -lw $t0, 616($sp) -lw $t1, 16($t0) -sw $t1, 604($sp) -lw $a0, 600($sp) -lw $t1, 604($sp) -sub $a0, $a0, $t1 -sw $a0, 596($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 592($sp) -move $t0, $sp -lw $t1, 596($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 592($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 652($sp) -lw $t1, 592($sp) -sw $t1, 656($sp) -la $t0, s_41 -sw $t0, 664($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 668($sp) -move $t0, $sp -lw $t1, 664($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 668($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 672($sp) -move $t0, $sp -lw $t1, 668($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 660($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 676($sp) -la $t0, s_54 -sw $t0, 688($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 692($sp) -move $t0, $sp -lw $t1, 688($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 692($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 696($sp) -move $t0, $sp -lw $t1, 692($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 684($sp) -move $t0, $sp -lw $t1, 564($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 700($sp) -la $t0, s_55 -sw $t0, 708($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 712($sp) -move $t0, $sp -lw $t1, 708($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 712($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 716($sp) -move $t0, $sp -lw $t1, 712($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 704($sp) -li $a0, 16 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, A2I_name -sw $t1, 4($t0) -li $t1, 4 -sw $t1, 8($t0) -la $t1, A2I_methods -sw $t1, 12($t0) -sw $t0, 720($sp) -move $t0, $sp -lw $t1, 720($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A2I_init -sw $a1, 724($sp) -lw $t1, 720($sp) -sw $t1, 728($sp) -move $t0, $sp -lw $t1, 656($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 728($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 728($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 736($sp) -move $t0, $sp -lw $t1, 736($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 732($sp) -la $t0, s_1 -sw $t0, 744($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 748($sp) -move $t0, $sp -lw $t1, 744($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 748($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 752($sp) -move $t0, $sp -lw $t1, 748($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 740($sp) -lw $t1, 740($sp) -sw $t1, 756($sp) -lw $t1, 756($sp) -sw $t1, 760($sp) -lw $t0, 1140($sp) -lw $t1, 564($sp) -sw $t1, 20($t0) -lw $t1, 564($sp) -sw $t1, 768($sp) -lw $t1, 768($sp) -sw $t1, 392($sp) -label_100: -lw $t1, 392($sp) -sw $t1, 352($sp) -b label_101 -label_94: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 780($sp) -move $t0, $sp -lw $t1, 780($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 784($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 788($sp) -move $t0, $sp -lw $t1, 788($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 780($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 780($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 776($sp) -lw $t0, 776($sp) -lw $a0, 16($t0) -bnez $a0, label_102 -la $t0, s_41 -sw $t0, 800($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 804($sp) -move $t0, $sp -lw $t1, 800($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 804($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 808($sp) -move $t0, $sp -lw $t1, 804($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 796($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 812($sp) -la $t0, s_56 -sw $t0, 824($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 828($sp) -move $t0, $sp -lw $t1, 824($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 828($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 832($sp) -move $t0, $sp -lw $t1, 828($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 820($sp) -lw $t1, 820($sp) -sw $t1, 772($sp) -b label_103 -label_102: -la $t0, s_41 -sw $t0, 840($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 844($sp) -move $t0, $sp -lw $t1, 840($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 844($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 848($sp) -move $t0, $sp -lw $t1, 844($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 836($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 48($t2) -jal $t3 -sw $a1, 852($sp) -la $t0, s_57 -sw $t0, 864($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 868($sp) -move $t0, $sp -lw $t1, 864($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 868($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 872($sp) -move $t0, $sp -lw $t1, 868($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 860($sp) -lw $t1, 860($sp) -sw $t1, 772($sp) -label_103: -lw $t1, 772($sp) -sw $t1, 352($sp) -label_101: -lw $t1, 352($sp) -sw $t1, 312($sp) -b label_104 -label_93: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 880($sp) -move $t0, $sp -lw $t1, 880($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal C_init -sw $a1, 884($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 888($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 896($sp) -move $t0, $sp -lw $t1, 888($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 880($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 896($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 876($sp) -lw $t0, 1140($sp) -lw $t1, 876($sp) -sw $t1, 20($t0) -lw $t1, 876($sp) -sw $t1, 312($sp) -label_104: -lw $t1, 312($sp) -sw $t1, 272($sp) -b label_105 -label_92: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 908($sp) -move $t0, $sp -lw $t1, 908($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal C_init -sw $a1, 912($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 916($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, B_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, B_methods -sw $t1, 12($t0) -sw $t0, 924($sp) -move $t0, $sp -lw $t1, 916($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 908($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 924($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 904($sp) -lw $t0, 1140($sp) -lw $t1, 904($sp) -sw $t1, 20($t0) -lw $t1, 904($sp) -sw $t1, 272($sp) -label_105: -lw $t1, 272($sp) -sw $t1, 232($sp) -b label_106 -label_91: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 7 -sw $t1, 0($t0) -la $t1, C_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, C_methods -sw $t1, 12($t0) -sw $t0, 936($sp) -move $t0, $sp -lw $t1, 936($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal C_init -sw $a1, 940($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 944($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 952($sp) -move $t0, $sp -lw $t1, 944($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 936($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 952($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 932($sp) -lw $t0, 1140($sp) -lw $t1, 932($sp) -sw $t1, 20($t0) -lw $t1, 932($sp) -sw $t1, 232($sp) -label_106: -lw $t1, 232($sp) -sw $t1, 192($sp) -b label_107 -label_90: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 964($sp) -move $t0, $sp -lw $t1, 964($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 968($sp) -move $t0, $sp -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 972($sp) -move $t0, $sp -lw $t1, 972($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 964($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 964($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 960($sp) -lw $t0, 1140($sp) -lw $t1, 960($sp) -sw $t1, 24($t0) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 8 -sw $t1, 0($t0) -la $t1, D_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, D_methods -sw $t1, 12($t0) -sw $t0, 984($sp) -move $t0, $sp -lw $t1, 984($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal D_init -sw $a1, 988($sp) -lw $t0, 1140($sp) -lw $t1, 24($t0) -sw $t1, 1124($sp) -move $t0, $sp -lw $t1, 1124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1124($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 992($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1000($sp) -move $t0, $sp -lw $t1, 992($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1000($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 984($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 984($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 32($t2) -jal $t3 -sw $a1, 980($sp) -lw $t0, 1140($sp) -lw $t1, 980($sp) -sw $t1, 20($t0) -lw $t1, 980($sp) -sw $t1, 192($sp) -label_107: -lw $t1, 192($sp) -sw $t1, 152($sp) -b label_108 -label_89: -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -lw $t0, 1132($sp) -lw $t1, 0($t0) -la $a0, void -bne $t1 $a0 label_110 -b case_void_error -label_110: -blt $t1 7 label_111 -bgt $t1 7 label_111 -lw $t1, 1132($sp) -sw $t1, 1020($sp) -move $t0, $sp -lw $t1, 1020($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1020($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1028($sp) -move $t0, $sp -lw $t1, 1028($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1020($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1020($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 40($t2) -jal $t3 -sw $a1, 1024($sp) -lw $t0, 1140($sp) -lw $t1, 1024($sp) -sw $t1, 20($t0) -lw $t1, 1024($sp) -sw $t1, 1012($sp) -b label_109 -label_111: -blt $t1 5 label_112 -bgt $t1 9 label_112 -lw $t1, 1132($sp) -sw $t1, 1036($sp) -move $t0, $sp -lw $t1, 1036($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1036($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1044($sp) -move $t0, $sp -lw $t1, 1044($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1036($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1036($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 28($t2) -jal $t3 -sw $a1, 1040($sp) -lw $t0, 1140($sp) -lw $t1, 1040($sp) -sw $t1, 20($t0) -lw $t1, 1040($sp) -sw $t1, 1012($sp) -b label_109 -label_112: -blt $t1 0 label_113 -bgt $t1 9 label_113 -lw $t1, 1132($sp) -sw $t1, 1052($sp) -la $t0, s_39 -sw $t0, 1060($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 2 -sw $t1, 0($t0) -la $t1, String_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, String_methods -sw $t1, 12($t0) -sw $t0, 1064($sp) -move $t0, $sp -lw $t1, 1060($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1064($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal String_init -sw $a1, 1068($sp) -move $t0, $sp -lw $t1, 1064($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1056($sp) -move $t0, $sp -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 0($t2) -jal $t3 -sw $a1, 1072($sp) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 4 -sw $t1, 0($t0) -la $t1, Int_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, Int_methods -sw $t1, 12($t0) -sw $t0, 1076($sp) -li $t0, 0 -sw $t0, 1080($sp) -move $t0, $sp -lw $t1, 1080($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1076($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal Int_init -sw $a1, 1084($sp) -lw $t1, 1076($sp) -sw $t1, 1012($sp) -b label_109 -label_113: -b case_no_match_error -label_109: -lw $t1, 1012($sp) -sw $t1, 152($sp) -label_108: -lw $t1, 152($sp) -sw $t1, 112($sp) -b label_114 -label_88: -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 5 -sw $t1, 0($t0) -la $t1, A_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, A_methods -sw $t1, 12($t0) -sw $t0, 1092($sp) -move $t0, $sp -lw $t1, 1092($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal A_init -sw $a1, 1096($sp) -move $t0, $sp -lw $t1, 1140($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1140($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 36($t2) -jal $t3 -sw $a1, 1100($sp) -move $t0, $sp -lw $t1, 1100($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1092($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1092($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 16($t2) -jal $t3 -sw $a1, 1088($sp) -lw $t0, 1140($sp) -lw $t1, 1088($sp) -sw $t1, 24($t0) -li $a0, 20 -li $v0, 9 -syscall -bge $v0, $sp heap_error -move $t0, $v0 -li $t1, 6 -sw $t1, 0($t0) -la $t1, B_name -sw $t1, 4($t0) -li $t1, 5 -sw $t1, 8($t0) -la $t1, B_methods -sw $t1, 12($t0) -sw $t0, 1112($sp) -move $t0, $sp -lw $t1, 1112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -jal B_init -sw $a1, 1116($sp) -lw $t0, 1140($sp) -lw $t1, 24($t0) -sw $t1, 1124($sp) -move $t0, $sp -lw $t1, 1124($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1124($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1120($sp) -lw $t0, 1140($sp) -lw $t1, 20($t0) -sw $t1, 1132($sp) -move $t0, $sp -lw $t1, 1132($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1132($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 12($t2) -jal $t3 -sw $a1, 1128($sp) -move $t0, $sp -lw $t1, 1120($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1128($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1112($t0) -addi $sp, $sp, -4 -sw $t1, 0($sp) -lw $t1, 1112($t0) -la $t0, void -beq $t1, $t0, dispatch_void_error -lw $t2, 12($t1) -lw $t3, 24($t2) -jal $t3 -sw $a1, 1108($sp) -lw $t0, 1140($sp) -lw $t1, 1108($sp) -sw $t1, 20($t0) -lw $t1, 1108($sp) -sw $t1, 112($sp) -label_114: -b label_83 -label_85: -lw $a1, 16($sp) -lw $ra, 0($sp) -addi $sp, $sp, 1144 -jr $ra \ No newline at end of file diff --git a/tests/codegen/atoi_test.cil b/tests/codegen/atoi_test.cil deleted file mode 100644 index c563cda8..00000000 --- a/tests/codegen/atoi_test.cil +++ /dev/null @@ -1,1444 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type A2I { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method c2i : A2I.c2i - method i2c : A2I.i2c - method a2i : A2I.a2i - method a2i_aux : A2I.a2i_aux - method i2a : A2I.i2a - method i2a_aux : A2I.i2a_aux -} -type Main { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: 0 -s_4: 1 -s_5: 2 -s_6: 3 -s_7: 4 -s_8: 5 -s_9: 6 -s_10: 7 -s_11: 8 -s_12: 9 -s_13: - -s_14: + -s_15: 678987 -s_16: == -s_17: \n - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function A2I_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL Object_init - - RETURN -} -function A2I.c2i { - PARAM self - PARAM char - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL internal_5 - LOCAL instance_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL op_11 - LOCAL left_12 - LOCAL right_13 - LOCAL internal_14 - LOCAL instance_15 - LOCAL result_init_16 - LOCAL result_init_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL internal_23 - LOCAL instance_24 - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL result_27 - LOCAL result_28 - LOCAL op_29 - LOCAL left_30 - LOCAL right_31 - LOCAL internal_32 - LOCAL instance_33 - LOCAL result_init_34 - LOCAL result_init_35 - LOCAL result_36 - LOCAL result_37 - LOCAL op_38 - LOCAL left_39 - LOCAL right_40 - LOCAL internal_41 - LOCAL instance_42 - LOCAL result_init_43 - LOCAL result_init_44 - LOCAL result_45 - LOCAL result_46 - LOCAL op_47 - LOCAL left_48 - LOCAL right_49 - LOCAL internal_50 - LOCAL instance_51 - LOCAL result_init_52 - LOCAL result_init_53 - LOCAL result_54 - LOCAL result_55 - LOCAL op_56 - LOCAL left_57 - LOCAL right_58 - LOCAL internal_59 - LOCAL instance_60 - LOCAL result_init_61 - LOCAL result_init_62 - LOCAL result_63 - LOCAL result_64 - LOCAL op_65 - LOCAL left_66 - LOCAL right_67 - LOCAL internal_68 - LOCAL instance_69 - LOCAL result_init_70 - LOCAL result_init_71 - LOCAL result_72 - LOCAL result_73 - LOCAL op_74 - LOCAL left_75 - LOCAL right_76 - LOCAL internal_77 - LOCAL instance_78 - LOCAL result_init_79 - LOCAL result_init_80 - LOCAL result_81 - LOCAL result_82 - LOCAL op_83 - LOCAL left_84 - LOCAL right_85 - LOCAL internal_86 - LOCAL instance_87 - LOCAL result_init_88 - LOCAL result_init_89 - LOCAL result_90 - LOCAL instance_91 - LOCAL value_92 - LOCAL result_init_93 - LOCAL instance_94 - LOCAL value_95 - LOCAL result_init_96 - LOCAL instance_97 - LOCAL value_98 - LOCAL result_init_99 - LOCAL instance_100 - LOCAL value_101 - LOCAL result_init_102 - LOCAL instance_103 - LOCAL value_104 - LOCAL result_init_105 - LOCAL instance_106 - LOCAL value_107 - LOCAL result_init_108 - LOCAL instance_109 - LOCAL value_110 - LOCAL result_init_111 - LOCAL instance_112 - LOCAL value_113 - LOCAL result_init_114 - LOCAL instance_115 - LOCAL value_116 - LOCAL result_init_117 - LOCAL instance_118 - LOCAL value_119 - LOCAL result_init_120 - LOCAL instance_121 - LOCAL value_122 - LOCAL result_init_123 - - internal_5 = LOAD s_3 - instance_6 = ALLOCATE String - result_init_7 = CALL String_init - op_2 = CALL String_equals - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_1 - internal_14 = LOAD s_4 - instance_15 = ALLOCATE String - result_init_16 = CALL String_init - op_11 = CALL String_equals - result_10 = ALLOCATE Bool - result_init_17 = CALL Bool_init - IF result_10 GOTO label_2 - internal_23 = LOAD s_5 - instance_24 = ALLOCATE String - result_init_25 = CALL String_init - op_20 = CALL String_equals - result_19 = ALLOCATE Bool - result_init_26 = CALL Bool_init - IF result_19 GOTO label_3 - internal_32 = LOAD s_6 - instance_33 = ALLOCATE String - result_init_34 = CALL String_init - op_29 = CALL String_equals - result_28 = ALLOCATE Bool - result_init_35 = CALL Bool_init - IF result_28 GOTO label_4 - internal_41 = LOAD s_7 - instance_42 = ALLOCATE String - result_init_43 = CALL String_init - op_38 = CALL String_equals - result_37 = ALLOCATE Bool - result_init_44 = CALL Bool_init - IF result_37 GOTO label_5 - internal_50 = LOAD s_8 - instance_51 = ALLOCATE String - result_init_52 = CALL String_init - op_47 = CALL String_equals - result_46 = ALLOCATE Bool - result_init_53 = CALL Bool_init - IF result_46 GOTO label_6 - internal_59 = LOAD s_9 - instance_60 = ALLOCATE String - result_init_61 = CALL String_init - op_56 = CALL String_equals - result_55 = ALLOCATE Bool - result_init_62 = CALL Bool_init - IF result_55 GOTO label_7 - internal_68 = LOAD s_10 - instance_69 = ALLOCATE String - result_init_70 = CALL String_init - op_65 = CALL String_equals - result_64 = ALLOCATE Bool - result_init_71 = CALL Bool_init - IF result_64 GOTO label_8 - internal_77 = LOAD s_11 - instance_78 = ALLOCATE String - result_init_79 = CALL String_init - op_74 = CALL String_equals - result_73 = ALLOCATE Bool - result_init_80 = CALL Bool_init - IF result_73 GOTO label_9 - internal_86 = LOAD s_12 - instance_87 = ALLOCATE String - result_init_88 = CALL String_init - op_83 = CALL String_equals - result_82 = ALLOCATE Bool - result_init_89 = CALL Bool_init - IF result_82 GOTO label_10 - result_90 = VCALL A2I abort - instance_91 = ALLOCATE Int - value_92 = LOAD 0 - result_init_93 = CALL Int_init - result_81 = instance_91 - GOTO label_11 - LABEL label_10 - instance_94 = ALLOCATE Int - value_95 = LOAD 9 - result_init_96 = CALL Int_init - result_81 = instance_94 - LABEL label_11 - result_72 = result_81 - GOTO label_12 - LABEL label_9 - instance_97 = ALLOCATE Int - value_98 = LOAD 8 - result_init_99 = CALL Int_init - result_72 = instance_97 - LABEL label_12 - result_63 = result_72 - GOTO label_13 - LABEL label_8 - instance_100 = ALLOCATE Int - value_101 = LOAD 7 - result_init_102 = CALL Int_init - result_63 = instance_100 - LABEL label_13 - result_54 = result_63 - GOTO label_14 - LABEL label_7 - instance_103 = ALLOCATE Int - value_104 = LOAD 6 - result_init_105 = CALL Int_init - result_54 = instance_103 - LABEL label_14 - result_45 = result_54 - GOTO label_15 - LABEL label_6 - instance_106 = ALLOCATE Int - value_107 = LOAD 5 - result_init_108 = CALL Int_init - result_45 = instance_106 - LABEL label_15 - result_36 = result_45 - GOTO label_16 - LABEL label_5 - instance_109 = ALLOCATE Int - value_110 = LOAD 4 - result_init_111 = CALL Int_init - result_36 = instance_109 - LABEL label_16 - result_27 = result_36 - GOTO label_17 - LABEL label_4 - instance_112 = ALLOCATE Int - value_113 = LOAD 3 - result_init_114 = CALL Int_init - result_27 = instance_112 - LABEL label_17 - result_18 = result_27 - GOTO label_18 - LABEL label_3 - instance_115 = ALLOCATE Int - value_116 = LOAD 2 - result_init_117 = CALL Int_init - result_18 = instance_115 - LABEL label_18 - result_9 = result_18 - GOTO label_19 - LABEL label_2 - instance_118 = ALLOCATE Int - value_119 = LOAD 1 - result_init_120 = CALL Int_init - result_9 = instance_118 - LABEL label_19 - result_0 = result_9 - GOTO label_20 - LABEL label_1 - instance_121 = ALLOCATE Int - value_122 = LOAD 0 - result_init_123 = CALL Int_init - result_0 = instance_121 - LABEL label_20 - - RETURN result_0 -} -function A2I.i2c { - PARAM self - PARAM i - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL instance_5 - LOCAL value_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL op_11 - LOCAL left_12 - LOCAL right_13 - LOCAL instance_14 - LOCAL value_15 - LOCAL result_init_16 - LOCAL result_init_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL instance_23 - LOCAL value_24 - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL result_27 - LOCAL result_28 - LOCAL op_29 - LOCAL left_30 - LOCAL right_31 - LOCAL instance_32 - LOCAL value_33 - LOCAL result_init_34 - LOCAL result_init_35 - LOCAL result_36 - LOCAL result_37 - LOCAL op_38 - LOCAL left_39 - LOCAL right_40 - LOCAL instance_41 - LOCAL value_42 - LOCAL result_init_43 - LOCAL result_init_44 - LOCAL result_45 - LOCAL result_46 - LOCAL op_47 - LOCAL left_48 - LOCAL right_49 - LOCAL instance_50 - LOCAL value_51 - LOCAL result_init_52 - LOCAL result_init_53 - LOCAL result_54 - LOCAL result_55 - LOCAL op_56 - LOCAL left_57 - LOCAL right_58 - LOCAL instance_59 - LOCAL value_60 - LOCAL result_init_61 - LOCAL result_init_62 - LOCAL result_63 - LOCAL result_64 - LOCAL op_65 - LOCAL left_66 - LOCAL right_67 - LOCAL instance_68 - LOCAL value_69 - LOCAL result_init_70 - LOCAL result_init_71 - LOCAL result_72 - LOCAL result_73 - LOCAL op_74 - LOCAL left_75 - LOCAL right_76 - LOCAL instance_77 - LOCAL value_78 - LOCAL result_init_79 - LOCAL result_init_80 - LOCAL result_81 - LOCAL result_82 - LOCAL op_83 - LOCAL left_84 - LOCAL right_85 - LOCAL instance_86 - LOCAL value_87 - LOCAL result_init_88 - LOCAL result_init_89 - LOCAL result_90 - LOCAL internal_91 - LOCAL instance_92 - LOCAL result_init_93 - LOCAL internal_94 - LOCAL instance_95 - LOCAL result_init_96 - LOCAL internal_97 - LOCAL instance_98 - LOCAL result_init_99 - LOCAL internal_100 - LOCAL instance_101 - LOCAL result_init_102 - LOCAL internal_103 - LOCAL instance_104 - LOCAL result_init_105 - LOCAL internal_106 - LOCAL instance_107 - LOCAL result_init_108 - LOCAL internal_109 - LOCAL instance_110 - LOCAL result_init_111 - LOCAL internal_112 - LOCAL instance_113 - LOCAL result_init_114 - LOCAL internal_115 - LOCAL instance_116 - LOCAL result_init_117 - LOCAL internal_118 - LOCAL instance_119 - LOCAL result_init_120 - LOCAL internal_121 - LOCAL instance_122 - LOCAL result_init_123 - - instance_5 = ALLOCATE Int - value_6 = LOAD 0 - result_init_7 = CALL Int_init - left_3 = GetAttr i value - right_4 = GetAttr instance_5 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_21 - instance_14 = ALLOCATE Int - value_15 = LOAD 1 - result_init_16 = CALL Int_init - left_12 = GetAttr i value - right_13 = GetAttr instance_14 value - op_11 = left_12 = right_13 - result_10 = ALLOCATE Bool - result_init_17 = CALL Bool_init - IF result_10 GOTO label_22 - instance_23 = ALLOCATE Int - value_24 = LOAD 2 - result_init_25 = CALL Int_init - left_21 = GetAttr i value - right_22 = GetAttr instance_23 value - op_20 = left_21 = right_22 - result_19 = ALLOCATE Bool - result_init_26 = CALL Bool_init - IF result_19 GOTO label_23 - instance_32 = ALLOCATE Int - value_33 = LOAD 3 - result_init_34 = CALL Int_init - left_30 = GetAttr i value - right_31 = GetAttr instance_32 value - op_29 = left_30 = right_31 - result_28 = ALLOCATE Bool - result_init_35 = CALL Bool_init - IF result_28 GOTO label_24 - instance_41 = ALLOCATE Int - value_42 = LOAD 4 - result_init_43 = CALL Int_init - left_39 = GetAttr i value - right_40 = GetAttr instance_41 value - op_38 = left_39 = right_40 - result_37 = ALLOCATE Bool - result_init_44 = CALL Bool_init - IF result_37 GOTO label_25 - instance_50 = ALLOCATE Int - value_51 = LOAD 5 - result_init_52 = CALL Int_init - left_48 = GetAttr i value - right_49 = GetAttr instance_50 value - op_47 = left_48 = right_49 - result_46 = ALLOCATE Bool - result_init_53 = CALL Bool_init - IF result_46 GOTO label_26 - instance_59 = ALLOCATE Int - value_60 = LOAD 6 - result_init_61 = CALL Int_init - left_57 = GetAttr i value - right_58 = GetAttr instance_59 value - op_56 = left_57 = right_58 - result_55 = ALLOCATE Bool - result_init_62 = CALL Bool_init - IF result_55 GOTO label_27 - instance_68 = ALLOCATE Int - value_69 = LOAD 7 - result_init_70 = CALL Int_init - left_66 = GetAttr i value - right_67 = GetAttr instance_68 value - op_65 = left_66 = right_67 - result_64 = ALLOCATE Bool - result_init_71 = CALL Bool_init - IF result_64 GOTO label_28 - instance_77 = ALLOCATE Int - value_78 = LOAD 8 - result_init_79 = CALL Int_init - left_75 = GetAttr i value - right_76 = GetAttr instance_77 value - op_74 = left_75 = right_76 - result_73 = ALLOCATE Bool - result_init_80 = CALL Bool_init - IF result_73 GOTO label_29 - instance_86 = ALLOCATE Int - value_87 = LOAD 9 - result_init_88 = CALL Int_init - left_84 = GetAttr i value - right_85 = GetAttr instance_86 value - op_83 = left_84 = right_85 - result_82 = ALLOCATE Bool - result_init_89 = CALL Bool_init - IF result_82 GOTO label_30 - result_90 = VCALL A2I abort - internal_91 = LOAD empty_str - instance_92 = ALLOCATE String - result_init_93 = CALL String_init - result_81 = instance_92 - GOTO label_31 - LABEL label_30 - internal_94 = LOAD s_12 - instance_95 = ALLOCATE String - result_init_96 = CALL String_init - result_81 = instance_95 - LABEL label_31 - result_72 = result_81 - GOTO label_32 - LABEL label_29 - internal_97 = LOAD s_11 - instance_98 = ALLOCATE String - result_init_99 = CALL String_init - result_72 = instance_98 - LABEL label_32 - result_63 = result_72 - GOTO label_33 - LABEL label_28 - internal_100 = LOAD s_10 - instance_101 = ALLOCATE String - result_init_102 = CALL String_init - result_63 = instance_101 - LABEL label_33 - result_54 = result_63 - GOTO label_34 - LABEL label_27 - internal_103 = LOAD s_9 - instance_104 = ALLOCATE String - result_init_105 = CALL String_init - result_54 = instance_104 - LABEL label_34 - result_45 = result_54 - GOTO label_35 - LABEL label_26 - internal_106 = LOAD s_8 - instance_107 = ALLOCATE String - result_init_108 = CALL String_init - result_45 = instance_107 - LABEL label_35 - result_36 = result_45 - GOTO label_36 - LABEL label_25 - internal_109 = LOAD s_7 - instance_110 = ALLOCATE String - result_init_111 = CALL String_init - result_36 = instance_110 - LABEL label_36 - result_27 = result_36 - GOTO label_37 - LABEL label_24 - internal_112 = LOAD s_6 - instance_113 = ALLOCATE String - result_init_114 = CALL String_init - result_27 = instance_113 - LABEL label_37 - result_18 = result_27 - GOTO label_38 - LABEL label_23 - internal_115 = LOAD s_5 - instance_116 = ALLOCATE String - result_init_117 = CALL String_init - result_18 = instance_116 - LABEL label_38 - result_9 = result_18 - GOTO label_39 - LABEL label_22 - internal_118 = LOAD s_4 - instance_119 = ALLOCATE String - result_init_120 = CALL String_init - result_9 = instance_119 - LABEL label_39 - result_0 = result_9 - GOTO label_40 - LABEL label_21 - internal_121 = LOAD s_3 - instance_122 = ALLOCATE String - result_init_123 = CALL String_init - result_0 = instance_122 - LABEL label_40 - - RETURN result_0 -} -function A2I.a2i { - PARAM self - PARAM s - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL instance_19 - LOCAL value_20 - LOCAL result_init_21 - LOCAL internal_22 - LOCAL instance_23 - LOCAL result_init_24 - LOCAL result_init_25 - LOCAL result_26 - LOCAL result_27 - LOCAL op_28 - LOCAL left_29 - LOCAL right_30 - LOCAL result_31 - LOCAL instance_32 - LOCAL value_33 - LOCAL result_init_34 - LOCAL instance_35 - LOCAL value_36 - LOCAL result_init_37 - LOCAL internal_38 - LOCAL instance_39 - LOCAL result_init_40 - LOCAL result_init_41 - LOCAL result_42 - LOCAL result_43 - LOCAL result_44 - LOCAL result_45 - LOCAL op_46 - LOCAL left_47 - LOCAL right_48 - LOCAL result_49 - LOCAL instance_50 - LOCAL value_51 - LOCAL result_init_52 - LOCAL result_init_53 - LOCAL instance_54 - LOCAL value_55 - LOCAL result_init_56 - LOCAL result_57 - LOCAL op_58 - LOCAL internal_59 - LOCAL result_60 - LOCAL result_61 - LOCAL result_62 - LOCAL op_63 - LOCAL left_64 - LOCAL right_65 - LOCAL result_66 - LOCAL instance_67 - LOCAL value_68 - LOCAL result_init_69 - LOCAL result_init_70 - LOCAL instance_71 - LOCAL value_72 - LOCAL result_init_73 - LOCAL result_init_74 - LOCAL instance_75 - LOCAL value_76 - LOCAL result_init_77 - - result_5 = VCALL String length - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_1 GOTO label_41 - instance_16 = ALLOCATE Int - value_17 = LOAD 1 - result_init_18 = CALL Int_init - instance_19 = ALLOCATE Int - value_20 = LOAD 0 - result_init_21 = CALL Int_init - result_15 = VCALL String substr - internal_22 = LOAD s_13 - instance_23 = ALLOCATE String - result_init_24 = CALL String_init - left_13 = GetAttr result_15 value - right_14 = GetAttr instance_23 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_25 = CALL Bool_init - IF result_11 GOTO label_42 - instance_32 = ALLOCATE Int - value_33 = LOAD 1 - result_init_34 = CALL Int_init - instance_35 = ALLOCATE Int - value_36 = LOAD 0 - result_init_37 = CALL Int_init - result_31 = VCALL String substr - internal_38 = LOAD s_14 - instance_39 = ALLOCATE String - result_init_40 = CALL String_init - left_29 = GetAttr result_31 value - right_30 = GetAttr instance_39 value - op_28 = left_29 = right_30 - result_27 = ALLOCATE Bool - result_init_41 = CALL Bool_init - IF result_27 GOTO label_43 - result_42 = VCALL A2I a2i_aux - result_26 = result_42 - GOTO label_44 - LABEL label_43 - result_49 = VCALL String length - instance_50 = ALLOCATE Int - value_51 = LOAD 1 - result_init_52 = CALL Int_init - left_47 = GetAttr result_49 value - right_48 = GetAttr instance_50 value - op_46 = left_47 - right_48 - result_45 = ALLOCATE Int - result_init_53 = CALL Int_init - instance_54 = ALLOCATE Int - value_55 = LOAD 1 - result_init_56 = CALL Int_init - result_44 = VCALL String substr - result_43 = VCALL A2I a2i_aux - result_26 = result_43 - LABEL label_44 - result_10 = result_26 - GOTO label_45 - LABEL label_42 - result_66 = VCALL String length - instance_67 = ALLOCATE Int - value_68 = LOAD 1 - result_init_69 = CALL Int_init - left_64 = GetAttr result_66 value - right_65 = GetAttr instance_67 value - op_63 = left_64 - right_65 - result_62 = ALLOCATE Int - result_init_70 = CALL Int_init - instance_71 = ALLOCATE Int - value_72 = LOAD 1 - result_init_73 = CALL Int_init - result_61 = VCALL String substr - result_60 = VCALL A2I a2i_aux - internal_59 = GetAttr result_60 value - op_58 = ~ internal_59 - result_57 = ALLOCATE Int - result_init_74 = CALL Int_init - result_10 = result_57 - LABEL label_45 - result_0 = result_10 - GOTO label_46 - LABEL label_41 - instance_75 = ALLOCATE Int - value_76 = LOAD 0 - result_init_77 = CALL Int_init - result_0 = instance_75 - LABEL label_46 - - RETURN result_0 -} -function A2I.a2i_aux { - PARAM self - PARAM s - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL int_3 - LOCAL result_4 - LOCAL j_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL i_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL result_20 - LOCAL op_21 - LOCAL left_22 - LOCAL right_23 - LOCAL instance_24 - LOCAL value_25 - LOCAL result_init_26 - LOCAL result_init_27 - LOCAL result_28 - LOCAL result_29 - LOCAL instance_30 - LOCAL value_31 - LOCAL result_init_32 - LOCAL result_init_33 - LOCAL result_34 - LOCAL result_35 - LOCAL op_36 - LOCAL left_37 - LOCAL right_38 - LOCAL instance_39 - LOCAL value_40 - LOCAL result_init_41 - LOCAL result_init_42 - LOCAL result_43 - LOCAL let_result_44 - LOCAL let_result_45 - LOCAL let_result_46 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - int_3 = instance_0 - result_4 = VCALL String length - j_5 = result_4 - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - i_9 = instance_6 - LABEL label_47 - left_13 = GetAttr i_9 value - right_14 = GetAttr j_5 value - op_12 = left_13 < right_14 - result_11 = ALLOCATE Bool - result_init_15 = CALL Bool_init - IF result_11 GOTO label_48 - GOTO label_49 - LABEL label_48 - instance_24 = ALLOCATE Int - value_25 = LOAD 10 - result_init_26 = CALL Int_init - left_22 = GetAttr int_3 value - right_23 = GetAttr instance_24 value - op_21 = left_22 * right_23 - result_20 = ALLOCATE Int - result_init_27 = CALL Int_init - instance_30 = ALLOCATE Int - value_31 = LOAD 1 - result_init_32 = CALL Int_init - result_29 = VCALL String substr - result_28 = VCALL A2I c2i - left_18 = GetAttr result_20 value - right_19 = GetAttr result_28 value - op_17 = left_18 + right_19 - result_16 = ALLOCATE Int - result_init_33 = CALL Int_init - int_3 = result_16 - instance_39 = ALLOCATE Int - value_40 = LOAD 1 - result_init_41 = CALL Int_init - left_37 = GetAttr i_9 value - right_38 = GetAttr instance_39 value - op_36 = left_37 + right_38 - result_35 = ALLOCATE Int - result_init_42 = CALL Int_init - i_9 = result_35 - GOTO label_47 - LABEL label_49 - result_10 = LOAD None - let_result_44 = result_10 - let_result_45 = let_result_44 - let_result_46 = int_3 - - RETURN let_result_46 -} -function A2I.i2a { - PARAM self - PARAM i - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL instance_5 - LOCAL value_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL op_11 - LOCAL left_12 - LOCAL right_13 - LOCAL instance_14 - LOCAL value_15 - LOCAL result_init_16 - LOCAL result_init_17 - LOCAL result_18 - LOCAL internal_19 - LOCAL instance_20 - LOCAL result_init_21 - LOCAL result_22 - LOCAL result_23 - LOCAL op_24 - LOCAL left_25 - LOCAL right_26 - LOCAL result_27 - LOCAL op_28 - LOCAL internal_29 - LOCAL instance_30 - LOCAL value_31 - LOCAL result_init_32 - LOCAL result_init_33 - LOCAL result_init_34 - LOCAL result_35 - LOCAL internal_36 - LOCAL instance_37 - LOCAL result_init_38 - - instance_5 = ALLOCATE Int - value_6 = LOAD 0 - result_init_7 = CALL Int_init - left_3 = GetAttr i value - right_4 = GetAttr instance_5 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_50 - instance_14 = ALLOCATE Int - value_15 = LOAD 0 - result_init_16 = CALL Int_init - left_12 = GetAttr instance_14 value - right_13 = GetAttr i value - op_11 = left_12 < right_13 - result_10 = ALLOCATE Bool - result_init_17 = CALL Bool_init - IF result_10 GOTO label_51 - internal_19 = LOAD s_13 - instance_20 = ALLOCATE String - result_init_21 = CALL String_init - instance_30 = ALLOCATE Int - value_31 = LOAD 1 - result_init_32 = CALL Int_init - internal_29 = GetAttr instance_30 value - op_28 = ~ internal_29 - result_27 = ALLOCATE Int - result_init_33 = CALL Int_init - left_25 = GetAttr i value - op_24 = left_25 * right_26 - result_23 = ALLOCATE Int - result_init_34 = CALL Int_init - result_22 = VCALL A2I i2a_aux - result_18 = VCALL String concat - result_9 = result_18 - GOTO label_52 - LABEL label_51 - result_35 = VCALL A2I i2a_aux - result_9 = result_35 - LABEL label_52 - result_0 = result_9 - GOTO label_53 - LABEL label_50 - internal_36 = LOAD s_3 - instance_37 = ALLOCATE String - result_init_38 = CALL String_init - result_0 = instance_37 - LABEL label_53 - - RETURN result_0 -} -function A2I.i2a_aux { - PARAM self - PARAM i - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL instance_5 - LOCAL value_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL op_10 - LOCAL left_11 - LOCAL right_12 - LOCAL instance_13 - LOCAL value_14 - LOCAL result_init_15 - LOCAL result_init_16 - LOCAL next_17 - LOCAL result_18 - LOCAL result_19 - LOCAL result_20 - LOCAL result_21 - LOCAL op_22 - LOCAL left_23 - LOCAL right_24 - LOCAL result_25 - LOCAL op_26 - LOCAL left_27 - LOCAL right_28 - LOCAL instance_29 - LOCAL value_30 - LOCAL result_init_31 - LOCAL result_init_32 - LOCAL result_init_33 - LOCAL let_result_34 - LOCAL internal_35 - LOCAL instance_36 - LOCAL result_init_37 - - instance_5 = ALLOCATE Int - value_6 = LOAD 0 - result_init_7 = CALL Int_init - left_3 = GetAttr i value - right_4 = GetAttr instance_5 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_54 - instance_13 = ALLOCATE Int - value_14 = LOAD 10 - result_init_15 = CALL Int_init - left_11 = GetAttr i value - right_12 = GetAttr instance_13 value - op_10 = left_11 / right_12 - result_9 = ALLOCATE Int - result_init_16 = CALL Int_init - next_17 = result_9 - result_19 = VCALL A2I i2a_aux - instance_29 = ALLOCATE Int - value_30 = LOAD 10 - result_init_31 = CALL Int_init - left_27 = GetAttr next_17 value - right_28 = GetAttr instance_29 value - op_26 = left_27 * right_28 - result_25 = ALLOCATE Int - result_init_32 = CALL Int_init - left_23 = GetAttr i value - right_24 = GetAttr result_25 value - op_22 = left_23 - right_24 - result_21 = ALLOCATE Int - result_init_33 = CALL Int_init - result_20 = VCALL A2I i2c - result_18 = VCALL String concat - let_result_34 = result_18 - result_0 = let_result_34 - GOTO label_55 - LABEL label_54 - internal_35 = LOAD empty_str - instance_36 = ALLOCATE String - result_init_37 = CALL String_init - result_0 = instance_36 - LABEL label_55 - - RETURN result_0 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL internal_3 - LOCAL instance_4 - LOCAL result_init_5 - LOCAL a_6 - LOCAL result_7 - LOCAL result_8 - LOCAL init_9 - LOCAL instance_10 - LOCAL value_11 - LOCAL result_init_12 - LOCAL b_13 - LOCAL result_14 - LOCAL result_15 - LOCAL internal_16 - LOCAL instance_17 - LOCAL result_init_18 - LOCAL result_19 - LOCAL result_20 - LOCAL internal_21 - LOCAL instance_22 - LOCAL result_init_23 - LOCAL let_result_24 - - result_1 = ALLOCATE A2I - init_2 = CALL A2I_init - internal_3 = LOAD s_15 - instance_4 = ALLOCATE String - result_init_5 = CALL String_init - result_0 = VCALL A2I a2i - a_6 = result_0 - result_8 = ALLOCATE A2I - init_9 = CALL A2I_init - instance_10 = ALLOCATE Int - value_11 = LOAD 678987 - result_init_12 = CALL Int_init - result_7 = VCALL A2I i2a - b_13 = result_7 - result_14 = VCALL Main out_int - internal_16 = LOAD s_16 - instance_17 = ALLOCATE String - result_init_18 = CALL String_init - result_15 = VCALL Main out_string - result_19 = VCALL Main out_string - internal_21 = LOAD s_17 - instance_22 = ALLOCATE String - result_init_23 = CALL String_init - result_20 = VCALL Main out_string - let_result_24 = result_20 - - RETURN let_result_24 -} \ No newline at end of file diff --git a/tests/codegen/book_list_test.cil b/tests/codegen/book_list_test.cil deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/codegen/cells.cil b/tests/codegen/cells.cil deleted file mode 100644 index cacb595a..00000000 --- a/tests/codegen/cells.cil +++ /dev/null @@ -1,769 +0,0 @@ - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT msg_0 - type_name_1 = TYPEOF self - PRINT type_name_1 - eol_2 = LOAD s_1 - PRINT eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function CellularAutomaton_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE String - value_2 = LOAD empty_str - result_init_3 = CALL String_init - SetAttr self population_map instance_1 -} -function CellularAutomaton.init { - PARAM self - PARAM map - - LOCAL result_0 - - SetAttr self population_map map - - RETURN self -} -function CellularAutomaton.print { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL CellularAutomaton.population_map - LOCAL internal_3 - LOCAL instance_4 - LOCAL result_init_5 - - CellularAutomaton.population_map = GetAttr self population_map - internal_3 = LOAD s_1 - instance_4 = ALLOCATE String - result_init_5 = CALL String_init - result_1 = VCALL String concat - result_0 = VCALL CellularAutomaton out_string - - RETURN self -} -function CellularAutomaton.num_cells { - PARAM self - - LOCAL result_0 - LOCAL CellularAutomaton.population_map - - CellularAutomaton.population_map = GetAttr self population_map - result_0 = VCALL String length - - RETURN result_0 -} -function CellularAutomaton.cell { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL CellularAutomaton.population_map - LOCAL instance_2 - LOCAL value_3 - LOCAL result_init_4 - - CellularAutomaton.population_map = GetAttr self population_map - instance_2 = ALLOCATE Int - value_3 = LOAD 1 - result_init_4 = CALL Int_init - result_0 = VCALL String substr - - RETURN result_0 -} -function CellularAutomaton.cell_left_neighbor { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL instance_5 - LOCAL value_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL op_11 - LOCAL left_12 - LOCAL right_13 - LOCAL instance_14 - LOCAL value_15 - LOCAL result_init_16 - LOCAL result_init_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL result_23 - LOCAL instance_24 - LOCAL value_25 - LOCAL result_init_26 - LOCAL result_init_27 - - instance_5 = ALLOCATE Int - value_6 = LOAD 0 - result_init_7 = CALL Int_init - left_3 = GetAttr position value - right_4 = GetAttr instance_5 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_1 - instance_14 = ALLOCATE Int - value_15 = LOAD 1 - result_init_16 = CALL Int_init - left_12 = GetAttr position value - right_13 = GetAttr instance_14 value - op_11 = left_12 - right_13 - result_10 = ALLOCATE Int - result_init_17 = CALL Int_init - result_9 = VCALL CellularAutomaton cell - result_0 = result_9 - GOTO label_2 - LABEL label_1 - result_23 = VCALL CellularAutomaton num_cells - instance_24 = ALLOCATE Int - value_25 = LOAD 1 - result_init_26 = CALL Int_init - left_21 = GetAttr result_23 value - right_22 = GetAttr instance_24 value - op_20 = left_21 - right_22 - result_19 = ALLOCATE Int - result_init_27 = CALL Int_init - result_18 = VCALL CellularAutomaton cell - result_0 = result_18 - LABEL label_2 - - RETURN result_0 -} -function CellularAutomaton.cell_right_neighbor { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL result_9 - LOCAL instance_10 - LOCAL value_11 - LOCAL result_init_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL instance_20 - LOCAL value_21 - LOCAL result_init_22 - LOCAL result_init_23 - LOCAL result_24 - LOCAL instance_25 - LOCAL value_26 - LOCAL result_init_27 - - result_9 = VCALL CellularAutomaton num_cells - instance_10 = ALLOCATE Int - value_11 = LOAD 1 - result_init_12 = CALL Int_init - left_7 = GetAttr result_9 value - right_8 = GetAttr instance_10 value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_13 = CALL Int_init - left_3 = GetAttr position value - right_4 = GetAttr result_5 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_3 - instance_20 = ALLOCATE Int - value_21 = LOAD 1 - result_init_22 = CALL Int_init - left_18 = GetAttr position value - right_19 = GetAttr instance_20 value - op_17 = left_18 + right_19 - result_16 = ALLOCATE Int - result_init_23 = CALL Int_init - result_15 = VCALL CellularAutomaton cell - result_0 = result_15 - GOTO label_4 - LABEL label_3 - instance_25 = ALLOCATE Int - value_26 = LOAD 0 - result_init_27 = CALL Int_init - result_24 = VCALL CellularAutomaton cell - result_0 = result_24 - LABEL label_4 - - RETURN result_0 -} -function CellularAutomaton.cell_at_next_evolution { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL result_9 - LOCAL op_10 - LOCAL left_11 - LOCAL right_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL result_18 - LOCAL internal_19 - LOCAL instance_20 - LOCAL result_init_21 - LOCAL result_init_22 - LOCAL instance_23 - LOCAL value_24 - LOCAL result_init_25 - LOCAL instance_26 - LOCAL value_27 - LOCAL result_init_28 - LOCAL result_29 - LOCAL result_30 - LOCAL op_31 - LOCAL left_32 - LOCAL right_33 - LOCAL result_34 - LOCAL internal_35 - LOCAL instance_36 - LOCAL result_init_37 - LOCAL result_init_38 - LOCAL instance_39 - LOCAL value_40 - LOCAL result_init_41 - LOCAL instance_42 - LOCAL value_43 - LOCAL result_init_44 - LOCAL result_init_45 - LOCAL result_46 - LOCAL result_47 - LOCAL op_48 - LOCAL left_49 - LOCAL right_50 - LOCAL result_51 - LOCAL internal_52 - LOCAL instance_53 - LOCAL result_init_54 - LOCAL result_init_55 - LOCAL instance_56 - LOCAL value_57 - LOCAL result_init_58 - LOCAL instance_59 - LOCAL value_60 - LOCAL result_init_61 - LOCAL result_init_62 - LOCAL instance_63 - LOCAL value_64 - LOCAL result_init_65 - LOCAL result_init_66 - LOCAL internal_67 - LOCAL instance_68 - LOCAL result_init_69 - LOCAL internal_70 - LOCAL instance_71 - LOCAL result_init_72 - - result_18 = VCALL CellularAutomaton cell - internal_19 = LOAD s_3 - instance_20 = ALLOCATE String - result_init_21 = CALL String_init - op_15 = CALL String_equals - result_14 = ALLOCATE Bool - result_init_22 = CALL Bool_init - IF result_14 GOTO label_5 - instance_23 = ALLOCATE Int - value_24 = LOAD 0 - result_init_25 = CALL Int_init - result_13 = instance_23 - GOTO label_6 - LABEL label_5 - instance_26 = ALLOCATE Int - value_27 = LOAD 1 - result_init_28 = CALL Int_init - result_13 = instance_26 - LABEL label_6 - result_34 = VCALL CellularAutomaton cell_left_neighbor - internal_35 = LOAD s_3 - instance_36 = ALLOCATE String - result_init_37 = CALL String_init - op_31 = CALL String_equals - result_30 = ALLOCATE Bool - result_init_38 = CALL Bool_init - IF result_30 GOTO label_7 - instance_39 = ALLOCATE Int - value_40 = LOAD 0 - result_init_41 = CALL Int_init - result_29 = instance_39 - GOTO label_8 - LABEL label_7 - instance_42 = ALLOCATE Int - value_43 = LOAD 1 - result_init_44 = CALL Int_init - result_29 = instance_42 - LABEL label_8 - left_11 = GetAttr result_13 value - right_12 = GetAttr result_29 value - op_10 = left_11 + right_12 - result_9 = ALLOCATE Int - result_init_45 = CALL Int_init - result_51 = VCALL CellularAutomaton cell_right_neighbor - internal_52 = LOAD s_3 - instance_53 = ALLOCATE String - result_init_54 = CALL String_init - op_48 = CALL String_equals - result_47 = ALLOCATE Bool - result_init_55 = CALL Bool_init - IF result_47 GOTO label_9 - instance_56 = ALLOCATE Int - value_57 = LOAD 0 - result_init_58 = CALL Int_init - result_46 = instance_56 - GOTO label_10 - LABEL label_9 - instance_59 = ALLOCATE Int - value_60 = LOAD 1 - result_init_61 = CALL Int_init - result_46 = instance_59 - LABEL label_10 - left_7 = GetAttr result_9 value - right_8 = GetAttr result_46 value - op_6 = left_7 + right_8 - result_5 = ALLOCATE Int - result_init_62 = CALL Int_init - instance_63 = ALLOCATE Int - value_64 = LOAD 1 - result_init_65 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_63 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_66 = CALL Bool_init - IF result_1 GOTO label_11 - internal_67 = LOAD s_4 - instance_68 = ALLOCATE String - result_init_69 = CALL String_init - result_0 = instance_68 - GOTO label_12 - LABEL label_11 - internal_70 = LOAD s_3 - instance_71 = ALLOCATE String - result_init_72 = CALL String_init - result_0 = instance_71 - LABEL label_12 - - RETURN result_0 -} -function CellularAutomaton.evolve { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL position_3 - LOCAL result_4 - LOCAL num_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL temp_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL result_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL instance_23 - LOCAL value_24 - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL result_27 - LOCAL result_28 - LOCAL let_result_29 - LOCAL let_result_30 - LOCAL let_result_31 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - position_3 = instance_0 - result_4 = VCALL CellularAutomaton num_cells - num_5 = result_4 - instance_6 = ALLOCATE String - value_7 = LOAD empty_str - result_init_8 = CALL String_init - temp_9 = instance_6 - LABEL label_13 - left_13 = GetAttr position_3 value - right_14 = GetAttr num_5 value - op_12 = left_13 < right_14 - result_11 = ALLOCATE Bool - result_init_15 = CALL Bool_init - IF result_11 GOTO label_14 - GOTO label_15 - LABEL label_14 - result_17 = VCALL CellularAutomaton cell_at_next_evolution - result_16 = VCALL String concat - temp_9 = result_16 - instance_23 = ALLOCATE Int - value_24 = LOAD 1 - result_init_25 = CALL Int_init - left_21 = GetAttr position_3 value - right_22 = GetAttr instance_23 value - op_20 = left_21 + right_22 - result_19 = ALLOCATE Int - result_init_26 = CALL Int_init - position_3 = result_19 - GOTO label_13 - LABEL label_15 - result_10 = LOAD VOID - SetAttr self population_map temp_9 - let_result_29 = self - let_result_30 = let_result_29 - let_result_31 = let_result_30 - - RETURN let_result_31 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL Object_init - - RETURN - SetAttr self cells None -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL internal_3 - LOCAL instance_4 - LOCAL result_init_5 - LOCAL result_6 - LOCAL result_7 - LOCAL Main.cells - LOCAL instance_9 - LOCAL value_10 - LOCAL result_init_11 - LOCAL countdown_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL instance_18 - LOCAL value_19 - LOCAL result_init_20 - LOCAL result_init_21 - LOCAL result_22 - LOCAL Main.cells - LOCAL result_24 - LOCAL Main.cells - LOCAL result_26 - LOCAL op_27 - LOCAL left_28 - LOCAL right_29 - LOCAL instance_30 - LOCAL value_31 - LOCAL result_init_32 - LOCAL result_init_33 - LOCAL result_34 - LOCAL let_result_35 - - result_1 = ALLOCATE CellularAutomaton - init_2 = CALL CellularAutomaton_init - internal_3 = LOAD s_5 - instance_4 = ALLOCATE String - result_init_5 = CALL String_init - result_0 = VCALL CellularAutomaton init - SetAttr self cells result_0 - Main.cells = GetAttr self cells - result_7 = VCALL CellularAutomaton print - instance_9 = ALLOCATE Int - value_10 = LOAD 20 - result_init_11 = CALL Int_init - countdown_12 = instance_9 - LABEL label_16 - instance_18 = ALLOCATE Int - value_19 = LOAD 0 - result_init_20 = CALL Int_init - left_16 = GetAttr instance_18 value - right_17 = GetAttr countdown_12 value - op_15 = left_16 < right_17 - result_14 = ALLOCATE Bool - result_init_21 = CALL Bool_init - IF result_14 GOTO label_17 - GOTO label_18 - LABEL label_17 - Main.cells = GetAttr self cells - result_22 = VCALL CellularAutomaton evolve - Main.cells = GetAttr self cells - result_24 = VCALL CellularAutomaton print - instance_30 = ALLOCATE Int - value_31 = LOAD 1 - result_init_32 = CALL Int_init - left_28 = GetAttr countdown_12 value - right_29 = GetAttr instance_30 value - op_27 = left_28 - right_29 - result_26 = ALLOCATE Int - result_init_33 = CALL Int_init - countdown_12 = result_26 - GOTO label_16 - LABEL label_18 - result_13 = LOAD VOID - let_result_35 = result_13 - - RETURN self -} \ No newline at end of file diff --git a/tests/codegen/cells_test.cil b/tests/codegen/cells_test.cil deleted file mode 100644 index 072c8338..00000000 --- a/tests/codegen/cells_test.cil +++ /dev/null @@ -1,763 +0,0 @@ - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function CellularAutomaton_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE String - value_2 = LOAD empty_str - result_init_3 = CALL String_init - SetAttr self population_map instance_1 -} -function CellularAutomaton.init { - PARAM self - PARAM map - - LOCAL result_0 - - SetAttr self population_map map - - RETURN self -} -function CellularAutomaton.print { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL population_map_2 - LOCAL internal_3 - LOCAL instance_4 - LOCAL result_init_5 - - population_map_2 = GetAttr self population_map - internal_3 = LOAD s_3 - instance_4 = ALLOCATE String - result_init_5 = CALL String_init - result_1 = VCALL String concat - result_0 = VCALL CellularAutomaton out_string - - RETURN self -} -function CellularAutomaton.num_cells { - PARAM self - - LOCAL result_0 - LOCAL population_map_1 - - population_map_1 = GetAttr self population_map - result_0 = VCALL String length - - RETURN result_0 -} -function CellularAutomaton.cell { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL population_map_1 - LOCAL instance_2 - LOCAL value_3 - LOCAL result_init_4 - - population_map_1 = GetAttr self population_map - instance_2 = ALLOCATE Int - value_3 = LOAD 1 - result_init_4 = CALL Int_init - result_0 = VCALL String substr - - RETURN result_0 -} -function CellularAutomaton.cell_left_neighbor { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL instance_5 - LOCAL value_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL op_11 - LOCAL left_12 - LOCAL right_13 - LOCAL instance_14 - LOCAL value_15 - LOCAL result_init_16 - LOCAL result_init_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL result_23 - LOCAL instance_24 - LOCAL value_25 - LOCAL result_init_26 - LOCAL result_init_27 - - instance_5 = ALLOCATE Int - value_6 = LOAD 0 - result_init_7 = CALL Int_init - left_3 = GetAttr position value - right_4 = GetAttr instance_5 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_1 - instance_14 = ALLOCATE Int - value_15 = LOAD 1 - result_init_16 = CALL Int_init - left_12 = GetAttr position value - right_13 = GetAttr instance_14 value - op_11 = left_12 - right_13 - result_10 = ALLOCATE Int - result_init_17 = CALL Int_init - result_9 = VCALL CellularAutomaton cell - result_0 = result_9 - GOTO label_2 - LABEL label_1 - result_23 = VCALL CellularAutomaton num_cells - instance_24 = ALLOCATE Int - value_25 = LOAD 1 - result_init_26 = CALL Int_init - left_21 = GetAttr result_23 value - right_22 = GetAttr instance_24 value - op_20 = left_21 - right_22 - result_19 = ALLOCATE Int - result_init_27 = CALL Int_init - result_18 = VCALL CellularAutomaton cell - result_0 = result_18 - LABEL label_2 - - RETURN result_0 -} -function CellularAutomaton.cell_right_neighbor { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL result_9 - LOCAL instance_10 - LOCAL value_11 - LOCAL result_init_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL instance_20 - LOCAL value_21 - LOCAL result_init_22 - LOCAL result_init_23 - LOCAL result_24 - LOCAL instance_25 - LOCAL value_26 - LOCAL result_init_27 - - result_9 = VCALL CellularAutomaton num_cells - instance_10 = ALLOCATE Int - value_11 = LOAD 1 - result_init_12 = CALL Int_init - left_7 = GetAttr result_9 value - right_8 = GetAttr instance_10 value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_13 = CALL Int_init - left_3 = GetAttr position value - right_4 = GetAttr result_5 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_3 - instance_20 = ALLOCATE Int - value_21 = LOAD 1 - result_init_22 = CALL Int_init - left_18 = GetAttr position value - right_19 = GetAttr instance_20 value - op_17 = left_18 + right_19 - result_16 = ALLOCATE Int - result_init_23 = CALL Int_init - result_15 = VCALL CellularAutomaton cell - result_0 = result_15 - GOTO label_4 - LABEL label_3 - instance_25 = ALLOCATE Int - value_26 = LOAD 0 - result_init_27 = CALL Int_init - result_24 = VCALL CellularAutomaton cell - result_0 = result_24 - LABEL label_4 - - RETURN result_0 -} -function CellularAutomaton.cell_at_next_evolution { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL result_9 - LOCAL op_10 - LOCAL left_11 - LOCAL right_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL result_18 - LOCAL internal_19 - LOCAL instance_20 - LOCAL result_init_21 - LOCAL result_init_22 - LOCAL instance_23 - LOCAL value_24 - LOCAL result_init_25 - LOCAL instance_26 - LOCAL value_27 - LOCAL result_init_28 - LOCAL result_29 - LOCAL result_30 - LOCAL op_31 - LOCAL left_32 - LOCAL right_33 - LOCAL result_34 - LOCAL internal_35 - LOCAL instance_36 - LOCAL result_init_37 - LOCAL result_init_38 - LOCAL instance_39 - LOCAL value_40 - LOCAL result_init_41 - LOCAL instance_42 - LOCAL value_43 - LOCAL result_init_44 - LOCAL result_init_45 - LOCAL result_46 - LOCAL result_47 - LOCAL op_48 - LOCAL left_49 - LOCAL right_50 - LOCAL result_51 - LOCAL internal_52 - LOCAL instance_53 - LOCAL result_init_54 - LOCAL result_init_55 - LOCAL instance_56 - LOCAL value_57 - LOCAL result_init_58 - LOCAL instance_59 - LOCAL value_60 - LOCAL result_init_61 - LOCAL result_init_62 - LOCAL instance_63 - LOCAL value_64 - LOCAL result_init_65 - LOCAL result_init_66 - LOCAL internal_67 - LOCAL instance_68 - LOCAL result_init_69 - LOCAL internal_70 - LOCAL instance_71 - LOCAL result_init_72 - - result_18 = VCALL CellularAutomaton cell - internal_19 = LOAD s_4 - instance_20 = ALLOCATE String - result_init_21 = CALL String_init - left_16 = GetAttr result_18 value - right_17 = GetAttr instance_20 value - op_15 = left_16 = right_17 - result_14 = ALLOCATE Bool - result_init_22 = CALL Bool_init - IF result_14 GOTO label_5 - instance_23 = ALLOCATE Int - value_24 = LOAD 0 - result_init_25 = CALL Int_init - result_13 = instance_23 - GOTO label_6 - LABEL label_5 - instance_26 = ALLOCATE Int - value_27 = LOAD 1 - result_init_28 = CALL Int_init - result_13 = instance_26 - LABEL label_6 - result_34 = VCALL CellularAutomaton cell_left_neighbor - internal_35 = LOAD s_4 - instance_36 = ALLOCATE String - result_init_37 = CALL String_init - left_32 = GetAttr result_34 value - right_33 = GetAttr instance_36 value - op_31 = left_32 = right_33 - result_30 = ALLOCATE Bool - result_init_38 = CALL Bool_init - IF result_30 GOTO label_7 - instance_39 = ALLOCATE Int - value_40 = LOAD 0 - result_init_41 = CALL Int_init - result_29 = instance_39 - GOTO label_8 - LABEL label_7 - instance_42 = ALLOCATE Int - value_43 = LOAD 1 - result_init_44 = CALL Int_init - result_29 = instance_42 - LABEL label_8 - left_11 = GetAttr result_13 value - right_12 = GetAttr result_29 value - op_10 = left_11 + right_12 - result_9 = ALLOCATE Int - result_init_45 = CALL Int_init - result_51 = VCALL CellularAutomaton cell_right_neighbor - internal_52 = LOAD s_4 - instance_53 = ALLOCATE String - result_init_54 = CALL String_init - left_49 = GetAttr result_51 value - right_50 = GetAttr instance_53 value - op_48 = left_49 = right_50 - result_47 = ALLOCATE Bool - result_init_55 = CALL Bool_init - IF result_47 GOTO label_9 - instance_56 = ALLOCATE Int - value_57 = LOAD 0 - result_init_58 = CALL Int_init - result_46 = instance_56 - GOTO label_10 - LABEL label_9 - instance_59 = ALLOCATE Int - value_60 = LOAD 1 - result_init_61 = CALL Int_init - result_46 = instance_59 - LABEL label_10 - left_7 = GetAttr result_9 value - right_8 = GetAttr result_46 value - op_6 = left_7 + right_8 - result_5 = ALLOCATE Int - result_init_62 = CALL Int_init - instance_63 = ALLOCATE Int - value_64 = LOAD 1 - result_init_65 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_63 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_66 = CALL Bool_init - IF result_1 GOTO label_11 - internal_67 = LOAD s_5 - instance_68 = ALLOCATE String - result_init_69 = CALL String_init - result_0 = instance_68 - GOTO label_12 - LABEL label_11 - internal_70 = LOAD s_4 - instance_71 = ALLOCATE String - result_init_72 = CALL String_init - result_0 = instance_71 - LABEL label_12 - - RETURN result_0 -} -function CellularAutomaton.evolve { - PARAM self - - LOCAL position_0 - LOCAL result_1 - LOCAL num_2 - LOCAL temp_3 - LOCAL result_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL result_12 - LOCAL result_13 - LOCAL op_14 - LOCAL left_15 - LOCAL right_16 - LOCAL instance_17 - LOCAL value_18 - LOCAL result_init_19 - LOCAL result_init_20 - LOCAL result_21 - LOCAL result_22 - LOCAL let_result_23 - LOCAL let_result_24 - LOCAL let_result_25 - - position_0 = [] - result_1 = VCALL CellularAutomaton num_cells - num_2 = result_1 - temp_3 = [] - LABEL label_13 - left_7 = GetAttr position_0 value - right_8 = GetAttr num_2 value - op_6 = left_7 < right_8 - result_5 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_5 GOTO label_14 - GOTO label_15 - LABEL label_14 - result_11 = VCALL CellularAutomaton cell_at_next_evolution - result_10 = VCALL String concat - temp_3 = result_10 - instance_17 = ALLOCATE Int - value_18 = LOAD 1 - result_init_19 = CALL Int_init - left_15 = GetAttr position_0 value - right_16 = GetAttr instance_17 value - op_14 = left_15 + right_16 - result_13 = ALLOCATE Int - result_init_20 = CALL Int_init - position_0 = result_13 - GOTO label_13 - LABEL label_15 - result_4 = LOAD None - SetAttr self population_map temp_3 - let_result_23 = self - let_result_24 = let_result_23 - let_result_25 = let_result_24 - - RETURN let_result_25 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL Object_init - - RETURN - SetAttr self cells None -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL internal_3 - LOCAL instance_4 - LOCAL result_init_5 - LOCAL result_6 - LOCAL result_7 - LOCAL cells_8 - LOCAL instance_9 - LOCAL value_10 - LOCAL result_init_11 - LOCAL countdown_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL instance_18 - LOCAL value_19 - LOCAL result_init_20 - LOCAL result_init_21 - LOCAL result_22 - LOCAL cells_23 - LOCAL result_24 - LOCAL cells_25 - LOCAL result_26 - LOCAL op_27 - LOCAL left_28 - LOCAL right_29 - LOCAL instance_30 - LOCAL value_31 - LOCAL result_init_32 - LOCAL result_init_33 - LOCAL result_34 - LOCAL let_result_35 - - result_1 = ALLOCATE CellularAutomaton - init_2 = CALL CellularAutomaton_init - internal_3 = LOAD s_6 - instance_4 = ALLOCATE String - result_init_5 = CALL String_init - result_0 = VCALL CellularAutomaton init - SetAttr self cells result_0 - cells_8 = GetAttr self cells - result_7 = VCALL CellularAutomaton print - instance_9 = ALLOCATE Int - value_10 = LOAD 20 - result_init_11 = CALL Int_init - countdown_12 = instance_9 - LABEL label_16 - instance_18 = ALLOCATE Int - value_19 = LOAD 0 - result_init_20 = CALL Int_init - left_16 = GetAttr instance_18 value - right_17 = GetAttr countdown_12 value - op_15 = left_16 < right_17 - result_14 = ALLOCATE Bool - result_init_21 = CALL Bool_init - IF result_14 GOTO label_17 - GOTO label_18 - LABEL label_17 - cells_23 = GetAttr self cells - result_22 = VCALL CellularAutomaton evolve - cells_25 = GetAttr self cells - result_24 = VCALL CellularAutomaton print - instance_30 = ALLOCATE Int - value_31 = LOAD 1 - result_init_32 = CALL Int_init - left_28 = GetAttr countdown_12 value - right_29 = GetAttr instance_30 value - op_27 = left_28 - right_29 - result_26 = ALLOCATE Int - result_init_33 = CALL Int_init - countdown_12 = result_26 - GOTO label_16 - LABEL label_18 - result_13 = LOAD None - let_result_35 = result_13 - - RETURN self -} \ No newline at end of file diff --git a/tests/codegen/complex_test.cil b/tests/codegen/complex_test.cil deleted file mode 100644 index b81954db..00000000 --- a/tests/codegen/complex_test.cil +++ /dev/null @@ -1,601 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} -type Complex { - attribute x - attribute y - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method init : Complex.init - method print : Complex.print - method reflect_0 : Complex.reflect_0 - method reflect_X : Complex.reflect_X - method reflect_Y : Complex.reflect_Y -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: =(\n -s_4: =)\n -s_5: + -s_6: I - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL instance_3 - LOCAL value_4 - LOCAL result_init_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL c_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_15 - LOCAL result_16 - LOCAL result_17 - LOCAL result_init_18 - LOCAL result_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - LOCAL result_23 - LOCAL internal_24 - LOCAL instance_25 - LOCAL result_init_26 - LOCAL let_result_27 - - result_1 = ALLOCATE Complex - init_2 = CALL Complex_init - instance_3 = ALLOCATE Int - value_4 = LOAD 1 - result_init_5 = CALL Int_init - instance_6 = ALLOCATE Int - value_7 = LOAD 1 - result_init_8 = CALL Int_init - result_0 = VCALL Complex init - c_9 = result_0 - result_16 = VCALL Complex reflect_X - result_15 = VCALL Complex reflect_Y - result_17 = VCALL Complex reflect_0 - left_13 = GetAttr result_15 value - right_14 = GetAttr result_17 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_18 = CALL Bool_init - IF result_11 GOTO label_1 - internal_20 = LOAD s_3 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - result_19 = VCALL Main out_string - result_10 = result_19 - GOTO label_2 - LABEL label_1 - internal_24 = LOAD s_4 - instance_25 = ALLOCATE String - result_init_26 = CALL String_init - result_23 = VCALL Main out_string - result_10 = result_23 - LABEL label_2 - let_result_27 = result_10 - - RETURN let_result_27 -} -function Complex_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - LOCAL instance_4 - LOCAL value_5 - LOCAL result_init_6 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self x instance_1 - instance_4 = ALLOCATE Int - value_5 = LOAD 0 - result_init_6 = CALL Int_init - SetAttr self y instance_4 -} -function Complex.init { - PARAM self - PARAM a - PARAM b - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL x_4 - LOCAL result_init_5 - LOCAL result_6 - LOCAL op_7 - LOCAL left_8 - LOCAL right_9 - LOCAL y_10 - LOCAL result_init_11 - - x_4 = GetAttr self x - left_2 = GetAttr x_4 value - right_3 = GetAttr a value - op_1 = left_2 = right_3 - result_0 = ALLOCATE Bool - result_init_5 = CALL Bool_init - y_10 = GetAttr self y - left_8 = GetAttr y_10 value - right_9 = GetAttr b value - op_7 = left_8 = right_9 - result_6 = ALLOCATE Bool - result_init_11 = CALL Bool_init - - RETURN self -} -function Complex.print { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL y_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL result_12 - LOCAL result_13 - LOCAL x_14 - LOCAL internal_15 - LOCAL instance_16 - LOCAL result_init_17 - LOCAL y_18 - LOCAL internal_19 - LOCAL instance_20 - LOCAL result_init_21 - LOCAL result_22 - LOCAL x_23 - - y_5 = GetAttr self y - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - left_3 = GetAttr y_5 value - right_4 = GetAttr instance_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_1 GOTO label_3 - x_14 = GetAttr self x - result_13 = VCALL Complex out_int - internal_15 = LOAD s_5 - instance_16 = ALLOCATE String - result_init_17 = CALL String_init - result_12 = VCALL IO out_string - y_18 = GetAttr self y - result_11 = VCALL IO out_int - internal_19 = LOAD s_6 - instance_20 = ALLOCATE String - result_init_21 = CALL String_init - result_10 = VCALL IO out_string - result_0 = result_10 - GOTO label_4 - LABEL label_3 - x_23 = GetAttr self x - result_22 = VCALL Complex out_int - result_0 = result_22 - LABEL label_4 - - RETURN result_0 -} -function Complex.reflect_0 { - PARAM self - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL x_4 - LOCAL result_5 - LOCAL op_6 - LOCAL internal_7 - LOCAL x_8 - LOCAL result_init_9 - LOCAL result_init_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL y_15 - LOCAL result_16 - LOCAL op_17 - LOCAL internal_18 - LOCAL y_19 - LOCAL result_init_20 - LOCAL result_init_21 - - x_4 = GetAttr self x - x_8 = GetAttr self x - internal_7 = GetAttr x_8 value - op_6 = ~ internal_7 - result_5 = ALLOCATE Int - result_init_9 = CALL Int_init - left_2 = GetAttr x_4 value - left_2 = GetAttr x_4 value - op_1 = left_2 = right_3 - result_0 = ALLOCATE Bool - result_init_10 = CALL Bool_init - y_15 = GetAttr self y - y_19 = GetAttr self y - internal_18 = GetAttr y_19 value - op_17 = ~ internal_18 - result_16 = ALLOCATE Int - result_init_20 = CALL Int_init - left_13 = GetAttr y_15 value - left_13 = GetAttr y_15 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_21 = CALL Bool_init - - RETURN self -} -function Complex.reflect_X { - PARAM self - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL y_4 - LOCAL result_5 - LOCAL op_6 - LOCAL internal_7 - LOCAL y_8 - LOCAL result_init_9 - LOCAL result_init_10 - - y_4 = GetAttr self y - y_8 = GetAttr self y - internal_7 = GetAttr y_8 value - op_6 = ~ internal_7 - result_5 = ALLOCATE Int - result_init_9 = CALL Int_init - left_2 = GetAttr y_4 value - left_2 = GetAttr y_4 value - op_1 = left_2 = right_3 - result_0 = ALLOCATE Bool - result_init_10 = CALL Bool_init - - RETURN self -} -function Complex.reflect_Y { - PARAM self - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL x_4 - LOCAL result_5 - LOCAL op_6 - LOCAL internal_7 - LOCAL x_8 - LOCAL result_init_9 - LOCAL result_init_10 - - x_4 = GetAttr self x - x_8 = GetAttr self x - internal_7 = GetAttr x_8 value - op_6 = ~ internal_7 - result_5 = ALLOCATE Int - result_init_9 = CALL Int_init - left_2 = GetAttr x_4 value - left_2 = GetAttr x_4 value - op_1 = left_2 = right_3 - result_0 = ALLOCATE Bool - result_init_10 = CALL Bool_init - - RETURN self -} \ No newline at end of file diff --git a/tests/codegen/fib_test.cil b/tests/codegen/fib_test.cil deleted file mode 100644 index e4a4d5c3..00000000 --- a/tests/codegen/fib_test.cil +++ /dev/null @@ -1,419 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main - method fib : Main.fib -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: Enter n to find nth fibonacci number!\n -s_4: \n - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - LOCAL result_4 - LOCAL result_5 - LOCAL result_6 - LOCAL result_7 - LOCAL internal_8 - LOCAL instance_9 - LOCAL result_init_10 - - internal_1 = LOAD s_3 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL Main out_string - result_6 = VCALL Main in_int - result_5 = VCALL Main fib - result_4 = VCALL Main out_int - internal_8 = LOAD s_4 - instance_9 = ALLOCATE String - result_init_10 = CALL String_init - result_7 = VCALL Main out_string - - RETURN result_7 -} -function Main.fib { - PARAM self - PARAM i - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL a_3 - LOCAL instance_4 - LOCAL value_5 - LOCAL result_init_6 - LOCAL b_7 - LOCAL instance_8 - LOCAL value_9 - LOCAL result_init_10 - LOCAL c_11 - LOCAL result_12 - LOCAL result_13 - LOCAL op_14 - LOCAL internal_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL instance_20 - LOCAL value_21 - LOCAL result_init_22 - LOCAL result_init_23 - LOCAL result_init_24 - LOCAL result_25 - LOCAL op_26 - LOCAL left_27 - LOCAL right_28 - LOCAL result_init_29 - LOCAL result_30 - LOCAL result_31 - LOCAL op_32 - LOCAL left_33 - LOCAL right_34 - LOCAL instance_35 - LOCAL value_36 - LOCAL result_init_37 - LOCAL result_init_38 - LOCAL result_39 - LOCAL result_40 - LOCAL result_41 - LOCAL let_result_42 - - instance_0 = ALLOCATE Int - value_1 = LOAD 1 - result_init_2 = CALL Int_init - a_3 = instance_0 - instance_4 = ALLOCATE Int - value_5 = LOAD 0 - result_init_6 = CALL Int_init - b_7 = instance_4 - instance_8 = ALLOCATE Int - value_9 = LOAD 0 - result_init_10 = CALL Int_init - c_11 = instance_8 - LABEL label_1 - instance_20 = ALLOCATE Int - value_21 = LOAD 0 - result_init_22 = CALL Int_init - left_18 = GetAttr i value - right_19 = GetAttr instance_20 value - op_17 = left_18 = right_19 - result_16 = ALLOCATE Bool - result_init_23 = CALL Bool_init - internal_15 = GetAttr result_16 value - op_14 = not internal_15 - result_13 = ALLOCATE Bool - result_init_24 = CALL Bool_init - IF result_13 GOTO label_2 - GOTO label_3 - LABEL label_2 - left_27 = GetAttr a_3 value - right_28 = GetAttr b_7 value - op_26 = left_27 + right_28 - result_25 = ALLOCATE Int - result_init_29 = CALL Int_init - c_11 = result_25 - instance_35 = ALLOCATE Int - value_36 = LOAD 1 - result_init_37 = CALL Int_init - left_33 = GetAttr i value - right_34 = GetAttr instance_35 value - op_32 = left_33 - right_34 - result_31 = ALLOCATE Int - result_init_38 = CALL Int_init - i = result_31 - b_7 = a_3 - a_3 = c_11 - GOTO label_1 - LABEL label_3 - result_12 = LOAD None - let_result_42 = c_11 - - RETURN let_result_42 -} \ No newline at end of file diff --git a/tests/codegen/graph.cil b/tests/codegen/graph.cil deleted file mode 100644 index e3bb9f31..00000000 --- a/tests/codegen/graph.cil +++ /dev/null @@ -1,1998 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Graph { - attribute vertices - attribute edges - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method add_vertice : Graph.add_vertice - method print_E : Graph.print_E - method print_V : Graph.print_V -} -type Vertice { - attribute num - attribute out - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method outgoing : Vertice.outgoing - method number : Vertice.number - method init : Vertice.init - method add_out : Vertice.add_out - method print : Vertice.print -} -type Edge { - attribute from - attribute to - attribute weight - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method init : Edge.init - method print : Edge.print -} -type EList { - attribute car - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : EList.isNil - method head : EList.head - method tail : EList.tail - method cons : EList.cons - method append : EList.append - method print : EList.print -} -type ECons { - attribute car - attribute cdr - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : ECons.isNil - method head : ECons.head - method tail : ECons.tail - method cons : EList.cons - method append : EList.append - method print : ECons.print - method init : ECons.init -} -type VList { - attribute car - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : VList.isNil - method head : VList.head - method tail : VList.tail - method cons : VList.cons - method print : VList.print -} -type VCons { - attribute car - attribute cdr - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : VCons.isNil - method head : VCons.head - method tail : VCons.tail - method cons : VList.cons - method print : VCons.print - method init : VCons.init -} -type Parse { - attribute boolop - attribute rest - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method read_input : Parse.read_input - method parse_line : Parse.parse_line - method c2i : Parse.c2i - method a2i : Parse.a2i - method a2i_aux : Parse.a2i_aux -} -type Main { - attribute boolop - attribute rest - attribute g - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method read_input : Parse.read_input - method parse_line : Parse.parse_line - method c2i : Parse.c2i - method a2i : Parse.a2i - method a2i_aux : Parse.a2i_aux - method main : Main.main -} -type BoolOp { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method and : BoolOp.and - method or : BoolOp.or -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: ( -s_4: , -s_5: ) -s_6: 0 -s_7: 1 -s_8: 2 -s_9: 3 -s_10: 4 -s_11: 5 -s_12: 6 -s_13: 7 -s_14: 8 -s_15: 9 -s_16: - -s_17: - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT msg_0 - type_name_1 = TYPEOF self - PRINT type_name_1 - eol_2 = LOAD s_1 - PRINT eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Graph_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL result_3 - LOCAL init_4 - - result_0 = CALL Object_init - - RETURN - result_1 = ALLOCATE VList - init_2 = CALL VList_init - SetAttr self vertices result_1 - result_3 = ALLOCATE EList - init_4 = CALL EList_init - SetAttr self edges result_3 -} -function Graph.add_vertice { - PARAM self - PARAM v - - LOCAL result_0 - LOCAL result_1 - LOCAL Graph.edges - LOCAL result_3 - LOCAL result_4 - LOCAL Graph.vertices - LOCAL result_6 - - result_1 = VCALL Vertice outgoing - Graph.edges = GetAttr self edges - result_0 = VCALL EList append - SetAttr self edges result_0 - Graph.vertices = GetAttr self vertices - result_4 = VCALL VList cons - SetAttr self vertices result_4 - - RETURN result_4 -} -function Graph.print_E { - PARAM self - - LOCAL result_0 - LOCAL Graph.edges - - Graph.edges = GetAttr self edges - result_0 = VCALL EList print - - RETURN result_0 -} -function Graph.print_V { - PARAM self - - LOCAL result_0 - LOCAL Graph.vertices - - Graph.vertices = GetAttr self vertices - result_0 = VCALL VList print - - RETURN result_0 -} -function Vertice_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - LOCAL result_4 - LOCAL init_5 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self num instance_1 - result_4 = ALLOCATE EList - init_5 = CALL EList_init - SetAttr self out result_4 -} -function Vertice.outgoing { - PARAM self - - LOCAL Vertice.out - - Vertice.out = GetAttr self out - - RETURN Vertice.out -} -function Vertice.number { - PARAM self - - LOCAL Vertice.num - - Vertice.num = GetAttr self num - - RETURN Vertice.num -} -function Vertice.init { - PARAM self - PARAM n - - LOCAL result_0 - - SetAttr self num n - - RETURN self -} -function Vertice.add_out { - PARAM self - PARAM s - - LOCAL result_0 - LOCAL Vertice.out - LOCAL result_2 - - Vertice.out = GetAttr self out - result_0 = VCALL EList cons - SetAttr self out result_0 - - RETURN self -} -function Vertice.print { - PARAM self - - LOCAL result_0 - LOCAL Vertice.num - LOCAL result_2 - LOCAL Vertice.out - - Vertice.num = GetAttr self num - result_0 = VCALL Vertice out_int - Vertice.out = GetAttr self out - result_2 = VCALL EList print - - RETURN result_2 -} -function Edge_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - LOCAL instance_4 - LOCAL value_5 - LOCAL result_init_6 - LOCAL instance_7 - LOCAL value_8 - LOCAL result_init_9 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self from instance_1 - instance_4 = ALLOCATE Int - value_5 = LOAD 0 - result_init_6 = CALL Int_init - SetAttr self to instance_4 - instance_7 = ALLOCATE Int - value_8 = LOAD 0 - result_init_9 = CALL Int_init - SetAttr self weight instance_7 -} -function Edge.init { - PARAM self - PARAM f - PARAM t - PARAM w - - LOCAL result_0 - LOCAL result_1 - LOCAL result_2 - - SetAttr self from f - SetAttr self to t - SetAttr self weight w - - RETURN self -} -function Edge.print { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - LOCAL result_4 - LOCAL Edge.from - LOCAL result_6 - LOCAL internal_7 - LOCAL instance_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL Edge.to - LOCAL result_12 - LOCAL internal_13 - LOCAL instance_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL Edge.weight - - internal_1 = LOAD s_3 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL Edge out_string - Edge.from = GetAttr self from - result_4 = VCALL Edge out_int - internal_7 = LOAD s_4 - instance_8 = ALLOCATE String - result_init_9 = CALL String_init - result_6 = VCALL Edge out_string - Edge.to = GetAttr self to - result_10 = VCALL Edge out_int - internal_13 = LOAD s_5 - instance_14 = ALLOCATE String - result_init_15 = CALL String_init - result_12 = VCALL Edge out_string - Edge.weight = GetAttr self weight - result_16 = VCALL Edge out_int - - RETURN result_16 -} -function EList_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN - SetAttr self car None -} -function EList.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 1 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function EList.head { - PARAM self - - LOCAL result_0 - LOCAL EList.car - - result_0 = VCALL EList abort - EList.car = GetAttr self car - - RETURN EList.car -} -function EList.tail { - PARAM self - - LOCAL result_0 - - result_0 = VCALL EList abort - - RETURN self -} -function EList.cons { - PARAM self - PARAM e - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_1 = ALLOCATE ECons - init_2 = CALL ECons_init - result_0 = VCALL ECons init - - RETURN result_0 -} -function EList.append { - PARAM self - PARAM l - - LOCAL result_0 - LOCAL result_1 - LOCAL result_2 - LOCAL result_3 - LOCAL result_4 - LOCAL result_5 - - result_1 = VCALL EList isNil - IF result_1 GOTO label_1 - result_4 = VCALL EList tail - result_3 = VCALL EList append - result_5 = VCALL EList head - result_2 = VCALL EList cons - result_0 = result_2 - GOTO label_2 - LABEL label_1 - result_0 = l - LABEL label_2 - - RETURN result_0 -} -function EList.print { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_1 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL EList out_string - - RETURN result_0 -} -function ECons_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL EList_init - - RETURN - SetAttr self cdr None -} -function ECons.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function ECons.head { - PARAM self - - LOCAL ECons.car - - ECons.car = GetAttr self car - - RETURN ECons.car -} -function ECons.tail { - PARAM self - - LOCAL ECons.cdr - - ECons.cdr = GetAttr self cdr - - RETURN ECons.cdr -} -function ECons.init { - PARAM self - PARAM e - PARAM rest - - LOCAL result_0 - LOCAL result_1 - - SetAttr self car e - SetAttr self cdr rest - - RETURN self -} -function ECons.print { - PARAM self - - LOCAL result_0 - LOCAL ECons.car - LOCAL result_2 - LOCAL ECons.cdr - - ECons.car = GetAttr self car - result_0 = VCALL Edge print - ECons.cdr = GetAttr self cdr - result_2 = VCALL EList print - - RETURN result_2 -} -function VList_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN - SetAttr self car None -} -function VList.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 1 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function VList.head { - PARAM self - - LOCAL result_0 - LOCAL VList.car - - result_0 = VCALL VList abort - VList.car = GetAttr self car - - RETURN VList.car -} -function VList.tail { - PARAM self - - LOCAL result_0 - - result_0 = VCALL VList abort - - RETURN self -} -function VList.cons { - PARAM self - PARAM v - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_1 = ALLOCATE VCons - init_2 = CALL VCons_init - result_0 = VCALL VCons init - - RETURN result_0 -} -function VList.print { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_1 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL VList out_string - - RETURN result_0 -} -function VCons_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL VList_init - - RETURN - SetAttr self cdr None -} -function VCons.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function VCons.head { - PARAM self - - LOCAL VCons.car - - VCons.car = GetAttr self car - - RETURN VCons.car -} -function VCons.tail { - PARAM self - - LOCAL VCons.cdr - - VCons.cdr = GetAttr self cdr - - RETURN VCons.cdr -} -function VCons.init { - PARAM self - PARAM v - PARAM rest - - LOCAL result_0 - LOCAL result_1 - - SetAttr self car v - SetAttr self cdr rest - - RETURN self -} -function VCons.print { - PARAM self - - LOCAL result_0 - LOCAL VCons.car - LOCAL result_2 - LOCAL VCons.cdr - - VCons.car = GetAttr self car - result_0 = VCALL Vertice print - VCons.cdr = GetAttr self cdr - result_2 = VCALL VList print - - RETURN result_2 -} -function Parse_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL instance_3 - LOCAL value_4 - LOCAL result_init_5 - - result_0 = CALL IO_init - - RETURN - result_1 = ALLOCATE BoolOp - init_2 = CALL BoolOp_init - SetAttr self boolop result_1 - instance_3 = ALLOCATE String - value_4 = LOAD empty_str - result_init_5 = CALL String_init - SetAttr self rest instance_3 -} -function Parse.read_input { - PARAM self - - LOCAL result_0 - LOCAL init_1 - LOCAL g_2 - LOCAL result_3 - LOCAL line_4 - LOCAL result_5 - LOCAL result_6 - LOCAL Parse.boolop - LOCAL result_8 - LOCAL op_9 - LOCAL internal_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL internal_15 - LOCAL instance_16 - LOCAL result_init_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL result_20 - LOCAL op_21 - LOCAL internal_22 - LOCAL result_23 - LOCAL op_24 - LOCAL left_25 - LOCAL right_26 - LOCAL internal_27 - LOCAL instance_28 - LOCAL result_init_29 - LOCAL result_init_30 - LOCAL result_init_31 - LOCAL result_32 - LOCAL result_33 - LOCAL result_34 - LOCAL result_35 - LOCAL let_result_36 - LOCAL let_result_37 - - result_0 = ALLOCATE Graph - init_1 = CALL Graph_init - g_2 = result_0 - result_3 = VCALL Parse in_string - line_4 = result_3 - LABEL label_3 - Parse.boolop = GetAttr self boolop - internal_15 = LOAD empty_str - instance_16 = ALLOCATE String - result_init_17 = CALL String_init - op_12 = CALL String_equals - result_11 = ALLOCATE Bool - result_init_18 = CALL Bool_init - internal_10 = GetAttr result_11 value - op_9 = not internal_10 - result_8 = ALLOCATE Bool - result_init_19 = CALL Bool_init - internal_27 = LOAD s_1 - instance_28 = ALLOCATE String - result_init_29 = CALL String_init - op_24 = CALL String_equals - result_23 = ALLOCATE Bool - result_init_30 = CALL Bool_init - internal_22 = GetAttr result_23 value - op_21 = not internal_22 - result_20 = ALLOCATE Bool - result_init_31 = CALL Bool_init - result_6 = VCALL BoolOp and - IF result_6 GOTO label_4 - GOTO label_5 - LABEL label_4 - result_33 = VCALL Parse parse_line - result_32 = VCALL Graph add_vertice - result_34 = VCALL Parse in_string - line_4 = result_34 - GOTO label_3 - LABEL label_5 - result_5 = LOAD VOID - let_result_36 = result_5 - let_result_37 = g_2 - - RETURN let_result_37 -} -function Parse.parse_line { - PARAM self - PARAM s - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL result_3 - LOCAL v_4 - LOCAL result_5 - LOCAL result_6 - LOCAL op_7 - LOCAL internal_8 - LOCAL result_9 - LOCAL op_10 - LOCAL left_11 - LOCAL right_12 - LOCAL result_13 - LOCAL Parse.rest - LOCAL instance_15 - LOCAL value_16 - LOCAL result_init_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL result_20 - LOCAL Parse.rest - LOCAL succ_22 - LOCAL result_23 - LOCAL Parse.rest - LOCAL weight_25 - LOCAL result_26 - LOCAL result_27 - LOCAL result_28 - LOCAL init_29 - LOCAL result_30 - LOCAL let_result_31 - LOCAL let_result_32 - LOCAL let_result_33 - - result_1 = ALLOCATE Vertice - init_2 = CALL Vertice_init - result_3 = VCALL Parse a2i - result_0 = VCALL Vertice init - v_4 = result_0 - LABEL label_6 - Parse.rest = GetAttr self rest - result_13 = VCALL String length - instance_15 = ALLOCATE Int - value_16 = LOAD 0 - result_init_17 = CALL Int_init - left_11 = GetAttr result_13 value - right_12 = GetAttr instance_15 value - op_10 = left_11 = right_12 - result_9 = ALLOCATE Bool - result_init_18 = CALL Bool_init - internal_8 = GetAttr result_9 value - op_7 = not internal_8 - result_6 = ALLOCATE Bool - result_init_19 = CALL Bool_init - IF result_6 GOTO label_7 - GOTO label_8 - LABEL label_7 - Parse.rest = GetAttr self rest - result_20 = VCALL Parse a2i - succ_22 = result_20 - Parse.rest = GetAttr self rest - result_23 = VCALL Parse a2i - weight_25 = result_23 - result_28 = ALLOCATE Edge - init_29 = CALL Edge_init - result_30 = VCALL Vertice number - result_27 = VCALL Edge init - result_26 = VCALL Vertice add_out - let_result_31 = result_26 - let_result_32 = let_result_31 - GOTO label_6 - LABEL label_8 - result_5 = LOAD VOID - let_result_33 = v_4 - - RETURN let_result_33 -} -function Parse.c2i { - PARAM self - PARAM char - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL internal_5 - LOCAL instance_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL op_11 - LOCAL left_12 - LOCAL right_13 - LOCAL internal_14 - LOCAL instance_15 - LOCAL result_init_16 - LOCAL result_init_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL internal_23 - LOCAL instance_24 - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL result_27 - LOCAL result_28 - LOCAL op_29 - LOCAL left_30 - LOCAL right_31 - LOCAL internal_32 - LOCAL instance_33 - LOCAL result_init_34 - LOCAL result_init_35 - LOCAL result_36 - LOCAL result_37 - LOCAL op_38 - LOCAL left_39 - LOCAL right_40 - LOCAL internal_41 - LOCAL instance_42 - LOCAL result_init_43 - LOCAL result_init_44 - LOCAL result_45 - LOCAL result_46 - LOCAL op_47 - LOCAL left_48 - LOCAL right_49 - LOCAL internal_50 - LOCAL instance_51 - LOCAL result_init_52 - LOCAL result_init_53 - LOCAL result_54 - LOCAL result_55 - LOCAL op_56 - LOCAL left_57 - LOCAL right_58 - LOCAL internal_59 - LOCAL instance_60 - LOCAL result_init_61 - LOCAL result_init_62 - LOCAL result_63 - LOCAL result_64 - LOCAL op_65 - LOCAL left_66 - LOCAL right_67 - LOCAL internal_68 - LOCAL instance_69 - LOCAL result_init_70 - LOCAL result_init_71 - LOCAL result_72 - LOCAL result_73 - LOCAL op_74 - LOCAL left_75 - LOCAL right_76 - LOCAL internal_77 - LOCAL instance_78 - LOCAL result_init_79 - LOCAL result_init_80 - LOCAL result_81 - LOCAL result_82 - LOCAL op_83 - LOCAL left_84 - LOCAL right_85 - LOCAL internal_86 - LOCAL instance_87 - LOCAL result_init_88 - LOCAL result_init_89 - LOCAL result_90 - LOCAL instance_91 - LOCAL value_92 - LOCAL result_init_93 - LOCAL instance_94 - LOCAL value_95 - LOCAL result_init_96 - LOCAL instance_97 - LOCAL value_98 - LOCAL result_init_99 - LOCAL instance_100 - LOCAL value_101 - LOCAL result_init_102 - LOCAL instance_103 - LOCAL value_104 - LOCAL result_init_105 - LOCAL instance_106 - LOCAL value_107 - LOCAL result_init_108 - LOCAL instance_109 - LOCAL value_110 - LOCAL result_init_111 - LOCAL instance_112 - LOCAL value_113 - LOCAL result_init_114 - LOCAL instance_115 - LOCAL value_116 - LOCAL result_init_117 - LOCAL instance_118 - LOCAL value_119 - LOCAL result_init_120 - LOCAL instance_121 - LOCAL value_122 - LOCAL result_init_123 - - internal_5 = LOAD s_6 - instance_6 = ALLOCATE String - result_init_7 = CALL String_init - op_2 = CALL String_equals - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_9 - internal_14 = LOAD s_7 - instance_15 = ALLOCATE String - result_init_16 = CALL String_init - op_11 = CALL String_equals - result_10 = ALLOCATE Bool - result_init_17 = CALL Bool_init - IF result_10 GOTO label_10 - internal_23 = LOAD s_8 - instance_24 = ALLOCATE String - result_init_25 = CALL String_init - op_20 = CALL String_equals - result_19 = ALLOCATE Bool - result_init_26 = CALL Bool_init - IF result_19 GOTO label_11 - internal_32 = LOAD s_9 - instance_33 = ALLOCATE String - result_init_34 = CALL String_init - op_29 = CALL String_equals - result_28 = ALLOCATE Bool - result_init_35 = CALL Bool_init - IF result_28 GOTO label_12 - internal_41 = LOAD s_10 - instance_42 = ALLOCATE String - result_init_43 = CALL String_init - op_38 = CALL String_equals - result_37 = ALLOCATE Bool - result_init_44 = CALL Bool_init - IF result_37 GOTO label_13 - internal_50 = LOAD s_11 - instance_51 = ALLOCATE String - result_init_52 = CALL String_init - op_47 = CALL String_equals - result_46 = ALLOCATE Bool - result_init_53 = CALL Bool_init - IF result_46 GOTO label_14 - internal_59 = LOAD s_12 - instance_60 = ALLOCATE String - result_init_61 = CALL String_init - op_56 = CALL String_equals - result_55 = ALLOCATE Bool - result_init_62 = CALL Bool_init - IF result_55 GOTO label_15 - internal_68 = LOAD s_13 - instance_69 = ALLOCATE String - result_init_70 = CALL String_init - op_65 = CALL String_equals - result_64 = ALLOCATE Bool - result_init_71 = CALL Bool_init - IF result_64 GOTO label_16 - internal_77 = LOAD s_14 - instance_78 = ALLOCATE String - result_init_79 = CALL String_init - op_74 = CALL String_equals - result_73 = ALLOCATE Bool - result_init_80 = CALL Bool_init - IF result_73 GOTO label_17 - internal_86 = LOAD s_15 - instance_87 = ALLOCATE String - result_init_88 = CALL String_init - op_83 = CALL String_equals - result_82 = ALLOCATE Bool - result_init_89 = CALL Bool_init - IF result_82 GOTO label_18 - result_90 = VCALL Parse abort - instance_91 = ALLOCATE Int - value_92 = LOAD 0 - result_init_93 = CALL Int_init - result_81 = instance_91 - GOTO label_19 - LABEL label_18 - instance_94 = ALLOCATE Int - value_95 = LOAD 9 - result_init_96 = CALL Int_init - result_81 = instance_94 - LABEL label_19 - result_72 = result_81 - GOTO label_20 - LABEL label_17 - instance_97 = ALLOCATE Int - value_98 = LOAD 8 - result_init_99 = CALL Int_init - result_72 = instance_97 - LABEL label_20 - result_63 = result_72 - GOTO label_21 - LABEL label_16 - instance_100 = ALLOCATE Int - value_101 = LOAD 7 - result_init_102 = CALL Int_init - result_63 = instance_100 - LABEL label_21 - result_54 = result_63 - GOTO label_22 - LABEL label_15 - instance_103 = ALLOCATE Int - value_104 = LOAD 6 - result_init_105 = CALL Int_init - result_54 = instance_103 - LABEL label_22 - result_45 = result_54 - GOTO label_23 - LABEL label_14 - instance_106 = ALLOCATE Int - value_107 = LOAD 5 - result_init_108 = CALL Int_init - result_45 = instance_106 - LABEL label_23 - result_36 = result_45 - GOTO label_24 - LABEL label_13 - instance_109 = ALLOCATE Int - value_110 = LOAD 4 - result_init_111 = CALL Int_init - result_36 = instance_109 - LABEL label_24 - result_27 = result_36 - GOTO label_25 - LABEL label_12 - instance_112 = ALLOCATE Int - value_113 = LOAD 3 - result_init_114 = CALL Int_init - result_27 = instance_112 - LABEL label_25 - result_18 = result_27 - GOTO label_26 - LABEL label_11 - instance_115 = ALLOCATE Int - value_116 = LOAD 2 - result_init_117 = CALL Int_init - result_18 = instance_115 - LABEL label_26 - result_9 = result_18 - GOTO label_27 - LABEL label_10 - instance_118 = ALLOCATE Int - value_119 = LOAD 1 - result_init_120 = CALL Int_init - result_9 = instance_118 - LABEL label_27 - result_0 = result_9 - GOTO label_28 - LABEL label_9 - instance_121 = ALLOCATE Int - value_122 = LOAD 0 - result_init_123 = CALL Int_init - result_0 = instance_121 - LABEL label_28 - - RETURN result_0 -} -function Parse.a2i { - PARAM self - PARAM s - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL instance_19 - LOCAL value_20 - LOCAL result_init_21 - LOCAL internal_22 - LOCAL instance_23 - LOCAL result_init_24 - LOCAL result_init_25 - LOCAL result_26 - LOCAL result_27 - LOCAL op_28 - LOCAL left_29 - LOCAL right_30 - LOCAL result_31 - LOCAL instance_32 - LOCAL value_33 - LOCAL result_init_34 - LOCAL instance_35 - LOCAL value_36 - LOCAL result_init_37 - LOCAL internal_38 - LOCAL instance_39 - LOCAL result_init_40 - LOCAL result_init_41 - LOCAL result_42 - LOCAL result_43 - LOCAL result_44 - LOCAL result_45 - LOCAL op_46 - LOCAL left_47 - LOCAL right_48 - LOCAL result_49 - LOCAL instance_50 - LOCAL value_51 - LOCAL result_init_52 - LOCAL result_init_53 - LOCAL instance_54 - LOCAL value_55 - LOCAL result_init_56 - LOCAL result_57 - LOCAL op_58 - LOCAL internal_59 - LOCAL result_60 - LOCAL result_61 - LOCAL result_62 - LOCAL op_63 - LOCAL left_64 - LOCAL right_65 - LOCAL result_66 - LOCAL instance_67 - LOCAL value_68 - LOCAL result_init_69 - LOCAL result_init_70 - LOCAL instance_71 - LOCAL value_72 - LOCAL result_init_73 - LOCAL result_init_74 - LOCAL instance_75 - LOCAL value_76 - LOCAL result_init_77 - - result_5 = VCALL String length - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_1 GOTO label_29 - instance_16 = ALLOCATE Int - value_17 = LOAD 1 - result_init_18 = CALL Int_init - instance_19 = ALLOCATE Int - value_20 = LOAD 0 - result_init_21 = CALL Int_init - result_15 = VCALL String substr - internal_22 = LOAD s_16 - instance_23 = ALLOCATE String - result_init_24 = CALL String_init - op_12 = CALL String_equals - result_11 = ALLOCATE Bool - result_init_25 = CALL Bool_init - IF result_11 GOTO label_30 - instance_32 = ALLOCATE Int - value_33 = LOAD 1 - result_init_34 = CALL Int_init - instance_35 = ALLOCATE Int - value_36 = LOAD 0 - result_init_37 = CALL Int_init - result_31 = VCALL String substr - internal_38 = LOAD s_17 - instance_39 = ALLOCATE String - result_init_40 = CALL String_init - op_28 = CALL String_equals - result_27 = ALLOCATE Bool - result_init_41 = CALL Bool_init - IF result_27 GOTO label_31 - result_42 = VCALL Parse a2i_aux - result_26 = result_42 - GOTO label_32 - LABEL label_31 - result_49 = VCALL String length - instance_50 = ALLOCATE Int - value_51 = LOAD 1 - result_init_52 = CALL Int_init - left_47 = GetAttr result_49 value - right_48 = GetAttr instance_50 value - op_46 = left_47 - right_48 - result_45 = ALLOCATE Int - result_init_53 = CALL Int_init - instance_54 = ALLOCATE Int - value_55 = LOAD 1 - result_init_56 = CALL Int_init - result_44 = VCALL String substr - result_43 = VCALL Parse a2i - result_26 = result_43 - LABEL label_32 - result_10 = result_26 - GOTO label_33 - LABEL label_30 - result_66 = VCALL String length - instance_67 = ALLOCATE Int - value_68 = LOAD 1 - result_init_69 = CALL Int_init - left_64 = GetAttr result_66 value - right_65 = GetAttr instance_67 value - op_63 = left_64 - right_65 - result_62 = ALLOCATE Int - result_init_70 = CALL Int_init - instance_71 = ALLOCATE Int - value_72 = LOAD 1 - result_init_73 = CALL Int_init - result_61 = VCALL String substr - result_60 = VCALL Parse a2i_aux - internal_59 = GetAttr result_60 value - op_58 = ~ internal_59 - result_57 = ALLOCATE Int - result_init_74 = CALL Int_init - result_10 = result_57 - LABEL label_33 - result_0 = result_10 - GOTO label_34 - LABEL label_29 - instance_75 = ALLOCATE Int - value_76 = LOAD 0 - result_init_77 = CALL Int_init - result_0 = instance_75 - LABEL label_34 - - RETURN result_0 -} -function Parse.a2i_aux { - PARAM self - PARAM s - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL int_3 - LOCAL result_4 - LOCAL j_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL i_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL instance_17 - LOCAL value_18 - LOCAL result_init_19 - LOCAL c_20 - LOCAL result_21 - LOCAL result_22 - LOCAL op_23 - LOCAL left_24 - LOCAL right_25 - LOCAL internal_26 - LOCAL instance_27 - LOCAL result_init_28 - LOCAL result_init_29 - LOCAL result_30 - LOCAL result_31 - LOCAL op_32 - LOCAL left_33 - LOCAL right_34 - LOCAL internal_35 - LOCAL instance_36 - LOCAL result_init_37 - LOCAL result_init_38 - LOCAL result_39 - LOCAL op_40 - LOCAL left_41 - LOCAL right_42 - LOCAL result_43 - LOCAL op_44 - LOCAL left_45 - LOCAL right_46 - LOCAL instance_47 - LOCAL value_48 - LOCAL result_init_49 - LOCAL result_init_50 - LOCAL result_51 - LOCAL result_52 - LOCAL instance_53 - LOCAL value_54 - LOCAL result_init_55 - LOCAL result_init_56 - LOCAL result_57 - LOCAL result_58 - LOCAL op_59 - LOCAL left_60 - LOCAL right_61 - LOCAL instance_62 - LOCAL value_63 - LOCAL result_init_64 - LOCAL result_init_65 - LOCAL result_66 - LOCAL result_67 - LOCAL result_68 - LOCAL op_69 - LOCAL left_70 - LOCAL right_71 - LOCAL result_init_72 - LOCAL internal_73 - LOCAL instance_74 - LOCAL result_init_75 - LOCAL internal_76 - LOCAL instance_77 - LOCAL result_init_78 - LOCAL result_79 - LOCAL result_80 - LOCAL result_81 - LOCAL op_82 - LOCAL left_83 - LOCAL right_84 - LOCAL result_85 - LOCAL op_86 - LOCAL left_87 - LOCAL right_88 - LOCAL result_89 - LOCAL result_init_90 - LOCAL instance_91 - LOCAL value_92 - LOCAL result_init_93 - LOCAL result_init_94 - LOCAL result_95 - LOCAL op_96 - LOCAL left_97 - LOCAL right_98 - LOCAL instance_99 - LOCAL value_100 - LOCAL result_init_101 - LOCAL result_init_102 - LOCAL result_103 - LOCAL result_104 - LOCAL result_105 - LOCAL result_106 - LOCAL op_107 - LOCAL left_108 - LOCAL right_109 - LOCAL result_110 - LOCAL op_111 - LOCAL left_112 - LOCAL right_113 - LOCAL result_114 - LOCAL result_init_115 - LOCAL instance_116 - LOCAL value_117 - LOCAL result_init_118 - LOCAL result_init_119 - LOCAL result_120 - LOCAL op_121 - LOCAL left_122 - LOCAL right_123 - LOCAL instance_124 - LOCAL value_125 - LOCAL result_init_126 - LOCAL result_init_127 - LOCAL result_128 - LOCAL result_129 - LOCAL let_result_130 - LOCAL let_result_131 - LOCAL let_result_132 - LOCAL let_result_133 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - int_3 = instance_0 - result_4 = VCALL String length - j_5 = result_4 - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - i_9 = instance_6 - LABEL label_35 - left_13 = GetAttr i_9 value - right_14 = GetAttr j_5 value - op_12 = left_13 < right_14 - result_11 = ALLOCATE Bool - result_init_15 = CALL Bool_init - IF result_11 GOTO label_36 - GOTO label_37 - LABEL label_36 - instance_17 = ALLOCATE Int - value_18 = LOAD 1 - result_init_19 = CALL Int_init - result_16 = VCALL String substr - c_20 = result_16 - internal_26 = LOAD s_17 - instance_27 = ALLOCATE String - result_init_28 = CALL String_init - op_23 = CALL String_equals - result_22 = ALLOCATE Bool - result_init_29 = CALL Bool_init - IF result_22 GOTO label_38 - internal_35 = LOAD s_4 - instance_36 = ALLOCATE String - result_init_37 = CALL String_init - op_32 = CALL String_equals - result_31 = ALLOCATE Bool - result_init_38 = CALL Bool_init - IF result_31 GOTO label_39 - instance_47 = ALLOCATE Int - value_48 = LOAD 10 - result_init_49 = CALL Int_init - left_45 = GetAttr int_3 value - right_46 = GetAttr instance_47 value - op_44 = left_45 * right_46 - result_43 = ALLOCATE Int - result_init_50 = CALL Int_init - instance_53 = ALLOCATE Int - value_54 = LOAD 1 - result_init_55 = CALL Int_init - result_52 = VCALL String substr - result_51 = VCALL Parse c2i - left_41 = GetAttr result_43 value - right_42 = GetAttr result_51 value - op_40 = left_41 + right_42 - result_39 = ALLOCATE Int - result_init_56 = CALL Int_init - int_3 = result_39 - instance_62 = ALLOCATE Int - value_63 = LOAD 1 - result_init_64 = CALL Int_init - left_60 = GetAttr i_9 value - right_61 = GetAttr instance_62 value - op_59 = left_60 + right_61 - result_58 = ALLOCATE Int - result_init_65 = CALL Int_init - i_9 = result_58 - left_70 = GetAttr i_9 value - right_71 = GetAttr j_5 value - op_69 = left_70 = right_71 - result_68 = ALLOCATE Bool - result_init_72 = CALL Bool_init - IF result_68 GOTO label_40 - internal_73 = LOAD empty_str - instance_74 = ALLOCATE String - result_init_75 = CALL String_init - result_67 = instance_74 - GOTO label_41 - LABEL label_40 - internal_76 = LOAD empty_str - instance_77 = ALLOCATE String - result_init_78 = CALL String_init - SetAttr self rest instance_77 - result_67 = instance_77 - LABEL label_41 - result_30 = result_67 - GOTO label_42 - LABEL label_39 - result_89 = VCALL String length - left_87 = GetAttr result_89 value - right_88 = GetAttr i_9 value - op_86 = left_87 - right_88 - result_85 = ALLOCATE Int - result_init_90 = CALL Int_init - instance_91 = ALLOCATE Int - value_92 = LOAD 1 - result_init_93 = CALL Int_init - left_83 = GetAttr result_85 value - right_84 = GetAttr instance_91 value - op_82 = left_83 - right_84 - result_81 = ALLOCATE Int - result_init_94 = CALL Int_init - instance_99 = ALLOCATE Int - value_100 = LOAD 1 - result_init_101 = CALL Int_init - left_97 = GetAttr i_9 value - right_98 = GetAttr instance_99 value - op_96 = left_97 + right_98 - result_95 = ALLOCATE Int - result_init_102 = CALL Int_init - result_80 = VCALL String substr - SetAttr self rest result_80 - i_9 = j_5 - result_30 = j_5 - LABEL label_42 - result_21 = result_30 - GOTO label_43 - LABEL label_38 - result_114 = VCALL String length - left_112 = GetAttr result_114 value - right_113 = GetAttr i_9 value - op_111 = left_112 - right_113 - result_110 = ALLOCATE Int - result_init_115 = CALL Int_init - instance_116 = ALLOCATE Int - value_117 = LOAD 1 - result_init_118 = CALL Int_init - left_108 = GetAttr result_110 value - right_109 = GetAttr instance_116 value - op_107 = left_108 - right_109 - result_106 = ALLOCATE Int - result_init_119 = CALL Int_init - instance_124 = ALLOCATE Int - value_125 = LOAD 1 - result_init_126 = CALL Int_init - left_122 = GetAttr i_9 value - right_123 = GetAttr instance_124 value - op_121 = left_122 + right_123 - result_120 = ALLOCATE Int - result_init_127 = CALL Int_init - result_105 = VCALL String substr - SetAttr self rest result_105 - i_9 = j_5 - result_21 = j_5 - LABEL label_43 - let_result_130 = result_21 - GOTO label_35 - LABEL label_37 - result_10 = LOAD VOID - let_result_131 = result_10 - let_result_132 = let_result_131 - let_result_133 = int_3 - - RETURN let_result_133 -} -function Main_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - - result_0 = CALL Parse_init - - RETURN - result_1 = VCALL Main read_input - SetAttr self g result_1 -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL Main.g - LOCAL result_2 - LOCAL Main.g - - Main.g = GetAttr self g - result_0 = VCALL Graph print_V - Main.g = GetAttr self g - result_2 = VCALL Graph print_E - - RETURN result_2 -} -function BoolOp_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL Object_init - - RETURN -} -function BoolOp.and { - PARAM self - PARAM b1 - PARAM b2 - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - IF b1 GOTO label_44 - instance_1 = ALLOCATE Bool - value_2 = LOAD 0 - result_init_3 = CALL Bool_init - result_0 = instance_1 - GOTO label_45 - LABEL label_44 - result_0 = b2 - LABEL label_45 - - RETURN result_0 -} -function BoolOp.or { - PARAM self - PARAM b1 - PARAM b2 - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - IF b1 GOTO label_46 - result_0 = b2 - GOTO label_47 - LABEL label_46 - instance_1 = ALLOCATE Bool - value_2 = LOAD 1 - result_init_3 = CALL Bool_init - result_0 = instance_1 - LABEL label_47 - - RETURN result_0 -} \ No newline at end of file diff --git a/tests/codegen/graph_test.cil b/tests/codegen/graph_test.cil deleted file mode 100644 index 28f16965..00000000 --- a/tests/codegen/graph_test.cil +++ /dev/null @@ -1,2003 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Graph { - attribute vertices - attribute edges - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method add_vertice : Graph.add_vertice - method print_E : Graph.print_E - method print_V : Graph.print_V -} -type Vertice { - attribute num - attribute out - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method outgoing : Vertice.outgoing - method number : Vertice.number - method init : Vertice.init - method add_out : Vertice.add_out - method print : Vertice.print -} -type Edge { - attribute from - attribute to - attribute weight - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method init : Edge.init - method print : Edge.print -} -type EList { - attribute car - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : EList.isNil - method head : EList.head - method tail : EList.tail - method cons : EList.cons - method append : EList.append - method print : EList.print -} -type ECons { - attribute car - attribute cdr - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : ECons.isNil - method head : ECons.head - method tail : ECons.tail - method cons : EList.cons - method append : EList.append - method print : ECons.print - method init : ECons.init -} -type VList { - attribute car - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : VList.isNil - method head : VList.head - method tail : VList.tail - method cons : VList.cons - method print : VList.print -} -type VCons { - attribute car - attribute cdr - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : VCons.isNil - method head : VCons.head - method tail : VCons.tail - method cons : VList.cons - method print : VCons.print - method init : VCons.init -} -type Parse { - attribute boolop - attribute rest - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method read_input : Parse.read_input - method parse_line : Parse.parse_line - method c2i : Parse.c2i - method a2i : Parse.a2i - method a2i_aux : Parse.a2i_aux -} -type Main { - attribute boolop - attribute rest - attribute g - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method read_input : Parse.read_input - method parse_line : Parse.parse_line - method c2i : Parse.c2i - method a2i : Parse.a2i - method a2i_aux : Parse.a2i_aux - method main : Main.main -} -type BoolOp { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method and : BoolOp.and - method or : BoolOp.or -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: ( -s_4: , -s_5: ) -s_6: \n -s_7: 0 -s_8: 1 -s_9: 2 -s_10: 3 -s_11: 4 -s_12: 5 -s_13: 6 -s_14: 7 -s_15: 8 -s_16: 9 -s_17: - -s_18: - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Graph_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL result_3 - LOCAL init_4 - - result_0 = CALL Object_init - - RETURN - result_1 = ALLOCATE VList - init_2 = CALL VList_init - SetAttr self vertices result_1 - result_3 = ALLOCATE EList - init_4 = CALL EList_init - SetAttr self edges result_3 -} -function Graph.add_vertice { - PARAM self - PARAM v - - LOCAL result_0 - LOCAL result_1 - LOCAL edges_2 - LOCAL result_3 - LOCAL result_4 - LOCAL vertices_5 - LOCAL result_6 - - result_1 = VCALL Vertice outgoing - edges_2 = GetAttr self edges - result_0 = VCALL EList append - SetAttr self edges result_0 - vertices_5 = GetAttr self vertices - result_4 = VCALL VList cons - SetAttr self vertices result_4 - - RETURN result_4 -} -function Graph.print_E { - PARAM self - - LOCAL result_0 - LOCAL edges_1 - - edges_1 = GetAttr self edges - result_0 = VCALL EList print - - RETURN result_0 -} -function Graph.print_V { - PARAM self - - LOCAL result_0 - LOCAL vertices_1 - - vertices_1 = GetAttr self vertices - result_0 = VCALL VList print - - RETURN result_0 -} -function Vertice_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - LOCAL result_4 - LOCAL init_5 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self num instance_1 - result_4 = ALLOCATE EList - init_5 = CALL EList_init - SetAttr self out result_4 -} -function Vertice.outgoing { - PARAM self - - LOCAL out_0 - - out_0 = GetAttr self out - - RETURN out_0 -} -function Vertice.number { - PARAM self - - LOCAL num_0 - - num_0 = GetAttr self num - - RETURN num_0 -} -function Vertice.init { - PARAM self - PARAM n - - LOCAL result_0 - - SetAttr self num n - - RETURN self -} -function Vertice.add_out { - PARAM self - PARAM s - - LOCAL result_0 - LOCAL out_1 - LOCAL result_2 - - out_1 = GetAttr self out - result_0 = VCALL EList cons - SetAttr self out result_0 - - RETURN self -} -function Vertice.print { - PARAM self - - LOCAL result_0 - LOCAL num_1 - LOCAL result_2 - LOCAL out_3 - - num_1 = GetAttr self num - result_0 = VCALL Vertice out_int - out_3 = GetAttr self out - result_2 = VCALL EList print - - RETURN result_2 -} -function Edge_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - LOCAL instance_4 - LOCAL value_5 - LOCAL result_init_6 - LOCAL instance_7 - LOCAL value_8 - LOCAL result_init_9 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self from instance_1 - instance_4 = ALLOCATE Int - value_5 = LOAD 0 - result_init_6 = CALL Int_init - SetAttr self to instance_4 - instance_7 = ALLOCATE Int - value_8 = LOAD 0 - result_init_9 = CALL Int_init - SetAttr self weight instance_7 -} -function Edge.init { - PARAM self - PARAM f - PARAM t - PARAM w - - LOCAL result_0 - LOCAL result_1 - LOCAL result_2 - - SetAttr self from f - SetAttr self to t - SetAttr self weight w - - RETURN self -} -function Edge.print { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - LOCAL result_4 - LOCAL from_5 - LOCAL result_6 - LOCAL internal_7 - LOCAL instance_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL to_11 - LOCAL result_12 - LOCAL internal_13 - LOCAL instance_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL weight_17 - - internal_1 = LOAD s_3 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL Edge out_string - from_5 = GetAttr self from - result_4 = VCALL Edge out_int - internal_7 = LOAD s_4 - instance_8 = ALLOCATE String - result_init_9 = CALL String_init - result_6 = VCALL Edge out_string - to_11 = GetAttr self to - result_10 = VCALL Edge out_int - internal_13 = LOAD s_5 - instance_14 = ALLOCATE String - result_init_15 = CALL String_init - result_12 = VCALL Edge out_string - weight_17 = GetAttr self weight - result_16 = VCALL Edge out_int - - RETURN result_16 -} -function EList_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN - SetAttr self car None -} -function EList.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function EList.head { - PARAM self - - LOCAL result_0 - LOCAL car_1 - - result_0 = VCALL EList abort - car_1 = GetAttr self car - - RETURN car_1 -} -function EList.tail { - PARAM self - - LOCAL result_0 - - result_0 = VCALL EList abort - - RETURN self -} -function EList.cons { - PARAM self - PARAM e - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_1 = ALLOCATE ECons - init_2 = CALL ECons_init - result_0 = VCALL ECons init - - RETURN result_0 -} -function EList.append { - PARAM self - PARAM l - - LOCAL result_0 - LOCAL result_1 - LOCAL result_2 - LOCAL result_3 - LOCAL result_4 - LOCAL result_5 - - result_1 = VCALL EList isNil - IF result_1 GOTO label_1 - result_4 = VCALL EList tail - result_3 = VCALL EList append - result_5 = VCALL EList head - result_2 = VCALL EList cons - result_0 = result_2 - GOTO label_2 - LABEL label_1 - result_0 = l - LABEL label_2 - - RETURN result_0 -} -function EList.print { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_6 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL EList out_string - - RETURN result_0 -} -function ECons_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL EList_init - - RETURN - SetAttr self cdr None -} -function ECons.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function ECons.head { - PARAM self - - LOCAL car_0 - - car_0 = GetAttr self car - - RETURN car_0 -} -function ECons.tail { - PARAM self - - LOCAL cdr_0 - - cdr_0 = GetAttr self cdr - - RETURN cdr_0 -} -function ECons.init { - PARAM self - PARAM e - PARAM rest - - LOCAL result_0 - LOCAL result_1 - - SetAttr self car e - SetAttr self cdr rest - - RETURN self -} -function ECons.print { - PARAM self - - LOCAL result_0 - LOCAL car_1 - LOCAL result_2 - LOCAL cdr_3 - - car_1 = GetAttr self car - result_0 = VCALL Edge print - cdr_3 = GetAttr self cdr - result_2 = VCALL EList print - - RETURN result_2 -} -function VList_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN - SetAttr self car None -} -function VList.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function VList.head { - PARAM self - - LOCAL result_0 - LOCAL car_1 - - result_0 = VCALL VList abort - car_1 = GetAttr self car - - RETURN car_1 -} -function VList.tail { - PARAM self - - LOCAL result_0 - - result_0 = VCALL VList abort - - RETURN self -} -function VList.cons { - PARAM self - PARAM v - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_1 = ALLOCATE VCons - init_2 = CALL VCons_init - result_0 = VCALL VCons init - - RETURN result_0 -} -function VList.print { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_6 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL VList out_string - - RETURN result_0 -} -function VCons_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL VList_init - - RETURN - SetAttr self cdr None -} -function VCons.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function VCons.head { - PARAM self - - LOCAL car_0 - - car_0 = GetAttr self car - - RETURN car_0 -} -function VCons.tail { - PARAM self - - LOCAL cdr_0 - - cdr_0 = GetAttr self cdr - - RETURN cdr_0 -} -function VCons.init { - PARAM self - PARAM v - PARAM rest - - LOCAL result_0 - LOCAL result_1 - - SetAttr self car v - SetAttr self cdr rest - - RETURN self -} -function VCons.print { - PARAM self - - LOCAL result_0 - LOCAL car_1 - LOCAL result_2 - LOCAL cdr_3 - - car_1 = GetAttr self car - result_0 = VCALL Vertice print - cdr_3 = GetAttr self cdr - result_2 = VCALL VList print - - RETURN result_2 -} -function Parse_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL instance_3 - LOCAL value_4 - LOCAL result_init_5 - - result_0 = CALL IO_init - - RETURN - result_1 = ALLOCATE BoolOp - init_2 = CALL BoolOp_init - SetAttr self boolop result_1 - instance_3 = ALLOCATE String - value_4 = LOAD empty_str - result_init_5 = CALL String_init - SetAttr self rest instance_3 -} -function Parse.read_input { - PARAM self - - LOCAL result_0 - LOCAL init_1 - LOCAL g_2 - LOCAL result_3 - LOCAL line_4 - LOCAL result_5 - LOCAL result_6 - LOCAL boolop_7 - LOCAL result_8 - LOCAL op_9 - LOCAL internal_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL internal_15 - LOCAL instance_16 - LOCAL result_init_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL result_20 - LOCAL op_21 - LOCAL internal_22 - LOCAL result_23 - LOCAL op_24 - LOCAL left_25 - LOCAL right_26 - LOCAL internal_27 - LOCAL instance_28 - LOCAL result_init_29 - LOCAL result_init_30 - LOCAL result_init_31 - LOCAL result_32 - LOCAL result_33 - LOCAL result_34 - LOCAL result_35 - LOCAL let_result_36 - LOCAL let_result_37 - - result_0 = ALLOCATE Graph - init_1 = CALL Graph_init - g_2 = result_0 - result_3 = VCALL Parse in_string - line_4 = result_3 - LABEL label_3 - boolop_7 = GetAttr self boolop - internal_15 = LOAD empty_str - instance_16 = ALLOCATE String - result_init_17 = CALL String_init - op_12 = CALL String_equals - result_11 = ALLOCATE Bool - result_init_18 = CALL Bool_init - internal_10 = GetAttr result_11 value - op_9 = not internal_10 - result_8 = ALLOCATE Bool - result_init_19 = CALL Bool_init - internal_27 = LOAD s_6 - instance_28 = ALLOCATE String - result_init_29 = CALL String_init - op_24 = CALL String_equals - result_23 = ALLOCATE Bool - result_init_30 = CALL Bool_init - internal_22 = GetAttr result_23 value - op_21 = not internal_22 - result_20 = ALLOCATE Bool - result_init_31 = CALL Bool_init - result_6 = VCALL BoolOp and - IF result_6 GOTO label_4 - GOTO label_5 - LABEL label_4 - result_33 = VCALL Parse parse_line - result_32 = VCALL Graph add_vertice - result_34 = VCALL Parse in_string - line_4 = result_34 - GOTO label_3 - LABEL label_5 - result_5 = LOAD None - let_result_36 = result_5 - let_result_37 = g_2 - - RETURN let_result_37 -} -function Parse.parse_line { - PARAM self - PARAM s - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL result_3 - LOCAL v_4 - LOCAL result_5 - LOCAL result_6 - LOCAL op_7 - LOCAL internal_8 - LOCAL result_9 - LOCAL op_10 - LOCAL left_11 - LOCAL right_12 - LOCAL result_13 - LOCAL rest_14 - LOCAL instance_15 - LOCAL value_16 - LOCAL result_init_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL result_20 - LOCAL rest_21 - LOCAL succ_22 - LOCAL result_23 - LOCAL rest_24 - LOCAL weight_25 - LOCAL result_26 - LOCAL result_27 - LOCAL result_28 - LOCAL init_29 - LOCAL result_30 - LOCAL let_result_31 - LOCAL let_result_32 - LOCAL let_result_33 - - result_1 = ALLOCATE Vertice - init_2 = CALL Vertice_init - result_3 = VCALL Parse a2i - result_0 = VCALL Vertice init - v_4 = result_0 - LABEL label_6 - rest_14 = GetAttr self rest - result_13 = VCALL String length - instance_15 = ALLOCATE Int - value_16 = LOAD 0 - result_init_17 = CALL Int_init - left_11 = GetAttr result_13 value - right_12 = GetAttr instance_15 value - op_10 = left_11 = right_12 - result_9 = ALLOCATE Bool - result_init_18 = CALL Bool_init - internal_8 = GetAttr result_9 value - op_7 = not internal_8 - result_6 = ALLOCATE Bool - result_init_19 = CALL Bool_init - IF result_6 GOTO label_7 - GOTO label_8 - LABEL label_7 - rest_21 = GetAttr self rest - result_20 = VCALL Parse a2i - succ_22 = result_20 - rest_24 = GetAttr self rest - result_23 = VCALL Parse a2i - weight_25 = result_23 - result_28 = ALLOCATE Edge - init_29 = CALL Edge_init - result_30 = VCALL Vertice number - result_27 = VCALL Edge init - result_26 = VCALL Vertice add_out - let_result_31 = result_26 - let_result_32 = let_result_31 - GOTO label_6 - LABEL label_8 - result_5 = LOAD None - let_result_33 = v_4 - - RETURN let_result_33 -} -function Parse.c2i { - PARAM self - PARAM char - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL internal_5 - LOCAL instance_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL op_11 - LOCAL left_12 - LOCAL right_13 - LOCAL internal_14 - LOCAL instance_15 - LOCAL result_init_16 - LOCAL result_init_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL internal_23 - LOCAL instance_24 - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL result_27 - LOCAL result_28 - LOCAL op_29 - LOCAL left_30 - LOCAL right_31 - LOCAL internal_32 - LOCAL instance_33 - LOCAL result_init_34 - LOCAL result_init_35 - LOCAL result_36 - LOCAL result_37 - LOCAL op_38 - LOCAL left_39 - LOCAL right_40 - LOCAL internal_41 - LOCAL instance_42 - LOCAL result_init_43 - LOCAL result_init_44 - LOCAL result_45 - LOCAL result_46 - LOCAL op_47 - LOCAL left_48 - LOCAL right_49 - LOCAL internal_50 - LOCAL instance_51 - LOCAL result_init_52 - LOCAL result_init_53 - LOCAL result_54 - LOCAL result_55 - LOCAL op_56 - LOCAL left_57 - LOCAL right_58 - LOCAL internal_59 - LOCAL instance_60 - LOCAL result_init_61 - LOCAL result_init_62 - LOCAL result_63 - LOCAL result_64 - LOCAL op_65 - LOCAL left_66 - LOCAL right_67 - LOCAL internal_68 - LOCAL instance_69 - LOCAL result_init_70 - LOCAL result_init_71 - LOCAL result_72 - LOCAL result_73 - LOCAL op_74 - LOCAL left_75 - LOCAL right_76 - LOCAL internal_77 - LOCAL instance_78 - LOCAL result_init_79 - LOCAL result_init_80 - LOCAL result_81 - LOCAL result_82 - LOCAL op_83 - LOCAL left_84 - LOCAL right_85 - LOCAL internal_86 - LOCAL instance_87 - LOCAL result_init_88 - LOCAL result_init_89 - LOCAL result_90 - LOCAL instance_91 - LOCAL value_92 - LOCAL result_init_93 - LOCAL instance_94 - LOCAL value_95 - LOCAL result_init_96 - LOCAL instance_97 - LOCAL value_98 - LOCAL result_init_99 - LOCAL instance_100 - LOCAL value_101 - LOCAL result_init_102 - LOCAL instance_103 - LOCAL value_104 - LOCAL result_init_105 - LOCAL instance_106 - LOCAL value_107 - LOCAL result_init_108 - LOCAL instance_109 - LOCAL value_110 - LOCAL result_init_111 - LOCAL instance_112 - LOCAL value_113 - LOCAL result_init_114 - LOCAL instance_115 - LOCAL value_116 - LOCAL result_init_117 - LOCAL instance_118 - LOCAL value_119 - LOCAL result_init_120 - LOCAL instance_121 - LOCAL value_122 - LOCAL result_init_123 - - internal_5 = LOAD s_7 - instance_6 = ALLOCATE String - result_init_7 = CALL String_init - op_2 = CALL String_equals - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_9 - internal_14 = LOAD s_8 - instance_15 = ALLOCATE String - result_init_16 = CALL String_init - op_11 = CALL String_equals - result_10 = ALLOCATE Bool - result_init_17 = CALL Bool_init - IF result_10 GOTO label_10 - internal_23 = LOAD s_9 - instance_24 = ALLOCATE String - result_init_25 = CALL String_init - op_20 = CALL String_equals - result_19 = ALLOCATE Bool - result_init_26 = CALL Bool_init - IF result_19 GOTO label_11 - internal_32 = LOAD s_10 - instance_33 = ALLOCATE String - result_init_34 = CALL String_init - op_29 = CALL String_equals - result_28 = ALLOCATE Bool - result_init_35 = CALL Bool_init - IF result_28 GOTO label_12 - internal_41 = LOAD s_11 - instance_42 = ALLOCATE String - result_init_43 = CALL String_init - op_38 = CALL String_equals - result_37 = ALLOCATE Bool - result_init_44 = CALL Bool_init - IF result_37 GOTO label_13 - internal_50 = LOAD s_12 - instance_51 = ALLOCATE String - result_init_52 = CALL String_init - op_47 = CALL String_equals - result_46 = ALLOCATE Bool - result_init_53 = CALL Bool_init - IF result_46 GOTO label_14 - internal_59 = LOAD s_13 - instance_60 = ALLOCATE String - result_init_61 = CALL String_init - op_56 = CALL String_equals - result_55 = ALLOCATE Bool - result_init_62 = CALL Bool_init - IF result_55 GOTO label_15 - internal_68 = LOAD s_14 - instance_69 = ALLOCATE String - result_init_70 = CALL String_init - op_65 = CALL String_equals - result_64 = ALLOCATE Bool - result_init_71 = CALL Bool_init - IF result_64 GOTO label_16 - internal_77 = LOAD s_15 - instance_78 = ALLOCATE String - result_init_79 = CALL String_init - op_74 = CALL String_equals - result_73 = ALLOCATE Bool - result_init_80 = CALL Bool_init - IF result_73 GOTO label_17 - internal_86 = LOAD s_16 - instance_87 = ALLOCATE String - result_init_88 = CALL String_init - op_83 = CALL String_equals - result_82 = ALLOCATE Bool - result_init_89 = CALL Bool_init - IF result_82 GOTO label_18 - result_90 = VCALL Parse abort - instance_91 = ALLOCATE Int - value_92 = LOAD 0 - result_init_93 = CALL Int_init - result_81 = instance_91 - GOTO label_19 - LABEL label_18 - instance_94 = ALLOCATE Int - value_95 = LOAD 9 - result_init_96 = CALL Int_init - result_81 = instance_94 - LABEL label_19 - result_72 = result_81 - GOTO label_20 - LABEL label_17 - instance_97 = ALLOCATE Int - value_98 = LOAD 8 - result_init_99 = CALL Int_init - result_72 = instance_97 - LABEL label_20 - result_63 = result_72 - GOTO label_21 - LABEL label_16 - instance_100 = ALLOCATE Int - value_101 = LOAD 7 - result_init_102 = CALL Int_init - result_63 = instance_100 - LABEL label_21 - result_54 = result_63 - GOTO label_22 - LABEL label_15 - instance_103 = ALLOCATE Int - value_104 = LOAD 6 - result_init_105 = CALL Int_init - result_54 = instance_103 - LABEL label_22 - result_45 = result_54 - GOTO label_23 - LABEL label_14 - instance_106 = ALLOCATE Int - value_107 = LOAD 5 - result_init_108 = CALL Int_init - result_45 = instance_106 - LABEL label_23 - result_36 = result_45 - GOTO label_24 - LABEL label_13 - instance_109 = ALLOCATE Int - value_110 = LOAD 4 - result_init_111 = CALL Int_init - result_36 = instance_109 - LABEL label_24 - result_27 = result_36 - GOTO label_25 - LABEL label_12 - instance_112 = ALLOCATE Int - value_113 = LOAD 3 - result_init_114 = CALL Int_init - result_27 = instance_112 - LABEL label_25 - result_18 = result_27 - GOTO label_26 - LABEL label_11 - instance_115 = ALLOCATE Int - value_116 = LOAD 2 - result_init_117 = CALL Int_init - result_18 = instance_115 - LABEL label_26 - result_9 = result_18 - GOTO label_27 - LABEL label_10 - instance_118 = ALLOCATE Int - value_119 = LOAD 1 - result_init_120 = CALL Int_init - result_9 = instance_118 - LABEL label_27 - result_0 = result_9 - GOTO label_28 - LABEL label_9 - instance_121 = ALLOCATE Int - value_122 = LOAD 0 - result_init_123 = CALL Int_init - result_0 = instance_121 - LABEL label_28 - - RETURN result_0 -} -function Parse.a2i { - PARAM self - PARAM s - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL instance_19 - LOCAL value_20 - LOCAL result_init_21 - LOCAL internal_22 - LOCAL instance_23 - LOCAL result_init_24 - LOCAL result_init_25 - LOCAL result_26 - LOCAL result_27 - LOCAL op_28 - LOCAL left_29 - LOCAL right_30 - LOCAL result_31 - LOCAL instance_32 - LOCAL value_33 - LOCAL result_init_34 - LOCAL instance_35 - LOCAL value_36 - LOCAL result_init_37 - LOCAL internal_38 - LOCAL instance_39 - LOCAL result_init_40 - LOCAL result_init_41 - LOCAL result_42 - LOCAL result_43 - LOCAL result_44 - LOCAL result_45 - LOCAL op_46 - LOCAL left_47 - LOCAL right_48 - LOCAL result_49 - LOCAL instance_50 - LOCAL value_51 - LOCAL result_init_52 - LOCAL result_init_53 - LOCAL instance_54 - LOCAL value_55 - LOCAL result_init_56 - LOCAL result_57 - LOCAL op_58 - LOCAL internal_59 - LOCAL result_60 - LOCAL result_61 - LOCAL result_62 - LOCAL op_63 - LOCAL left_64 - LOCAL right_65 - LOCAL result_66 - LOCAL instance_67 - LOCAL value_68 - LOCAL result_init_69 - LOCAL result_init_70 - LOCAL instance_71 - LOCAL value_72 - LOCAL result_init_73 - LOCAL result_init_74 - LOCAL instance_75 - LOCAL value_76 - LOCAL result_init_77 - - result_5 = VCALL String length - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_1 GOTO label_29 - instance_16 = ALLOCATE Int - value_17 = LOAD 1 - result_init_18 = CALL Int_init - instance_19 = ALLOCATE Int - value_20 = LOAD 0 - result_init_21 = CALL Int_init - result_15 = VCALL String substr - internal_22 = LOAD s_17 - instance_23 = ALLOCATE String - result_init_24 = CALL String_init - left_13 = GetAttr result_15 value - right_14 = GetAttr instance_23 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_25 = CALL Bool_init - IF result_11 GOTO label_30 - instance_32 = ALLOCATE Int - value_33 = LOAD 1 - result_init_34 = CALL Int_init - instance_35 = ALLOCATE Int - value_36 = LOAD 0 - result_init_37 = CALL Int_init - result_31 = VCALL String substr - internal_38 = LOAD s_18 - instance_39 = ALLOCATE String - result_init_40 = CALL String_init - left_29 = GetAttr result_31 value - right_30 = GetAttr instance_39 value - op_28 = left_29 = right_30 - result_27 = ALLOCATE Bool - result_init_41 = CALL Bool_init - IF result_27 GOTO label_31 - result_42 = VCALL Parse a2i_aux - result_26 = result_42 - GOTO label_32 - LABEL label_31 - result_49 = VCALL String length - instance_50 = ALLOCATE Int - value_51 = LOAD 1 - result_init_52 = CALL Int_init - left_47 = GetAttr result_49 value - right_48 = GetAttr instance_50 value - op_46 = left_47 - right_48 - result_45 = ALLOCATE Int - result_init_53 = CALL Int_init - instance_54 = ALLOCATE Int - value_55 = LOAD 1 - result_init_56 = CALL Int_init - result_44 = VCALL String substr - result_43 = VCALL Parse a2i - result_26 = result_43 - LABEL label_32 - result_10 = result_26 - GOTO label_33 - LABEL label_30 - result_66 = VCALL String length - instance_67 = ALLOCATE Int - value_68 = LOAD 1 - result_init_69 = CALL Int_init - left_64 = GetAttr result_66 value - right_65 = GetAttr instance_67 value - op_63 = left_64 - right_65 - result_62 = ALLOCATE Int - result_init_70 = CALL Int_init - instance_71 = ALLOCATE Int - value_72 = LOAD 1 - result_init_73 = CALL Int_init - result_61 = VCALL String substr - result_60 = VCALL Parse a2i_aux - internal_59 = GetAttr result_60 value - op_58 = ~ internal_59 - result_57 = ALLOCATE Int - result_init_74 = CALL Int_init - result_10 = result_57 - LABEL label_33 - result_0 = result_10 - GOTO label_34 - LABEL label_29 - instance_75 = ALLOCATE Int - value_76 = LOAD 0 - result_init_77 = CALL Int_init - result_0 = instance_75 - LABEL label_34 - - RETURN result_0 -} -function Parse.a2i_aux { - PARAM self - PARAM s - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL int_3 - LOCAL result_4 - LOCAL j_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL i_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL instance_17 - LOCAL value_18 - LOCAL result_init_19 - LOCAL c_20 - LOCAL result_21 - LOCAL result_22 - LOCAL op_23 - LOCAL left_24 - LOCAL right_25 - LOCAL internal_26 - LOCAL instance_27 - LOCAL result_init_28 - LOCAL result_init_29 - LOCAL result_30 - LOCAL result_31 - LOCAL op_32 - LOCAL left_33 - LOCAL right_34 - LOCAL internal_35 - LOCAL instance_36 - LOCAL result_init_37 - LOCAL result_init_38 - LOCAL result_39 - LOCAL op_40 - LOCAL left_41 - LOCAL right_42 - LOCAL result_43 - LOCAL op_44 - LOCAL left_45 - LOCAL right_46 - LOCAL instance_47 - LOCAL value_48 - LOCAL result_init_49 - LOCAL result_init_50 - LOCAL result_51 - LOCAL result_52 - LOCAL instance_53 - LOCAL value_54 - LOCAL result_init_55 - LOCAL result_init_56 - LOCAL result_57 - LOCAL result_58 - LOCAL op_59 - LOCAL left_60 - LOCAL right_61 - LOCAL instance_62 - LOCAL value_63 - LOCAL result_init_64 - LOCAL result_init_65 - LOCAL result_66 - LOCAL result_67 - LOCAL result_68 - LOCAL op_69 - LOCAL left_70 - LOCAL right_71 - LOCAL result_init_72 - LOCAL internal_73 - LOCAL instance_74 - LOCAL result_init_75 - LOCAL internal_76 - LOCAL instance_77 - LOCAL result_init_78 - LOCAL result_79 - LOCAL result_80 - LOCAL result_81 - LOCAL op_82 - LOCAL left_83 - LOCAL right_84 - LOCAL result_85 - LOCAL op_86 - LOCAL left_87 - LOCAL right_88 - LOCAL result_89 - LOCAL result_init_90 - LOCAL instance_91 - LOCAL value_92 - LOCAL result_init_93 - LOCAL result_init_94 - LOCAL result_95 - LOCAL op_96 - LOCAL left_97 - LOCAL right_98 - LOCAL instance_99 - LOCAL value_100 - LOCAL result_init_101 - LOCAL result_init_102 - LOCAL result_103 - LOCAL result_104 - LOCAL result_105 - LOCAL result_106 - LOCAL op_107 - LOCAL left_108 - LOCAL right_109 - LOCAL result_110 - LOCAL op_111 - LOCAL left_112 - LOCAL right_113 - LOCAL result_114 - LOCAL result_init_115 - LOCAL instance_116 - LOCAL value_117 - LOCAL result_init_118 - LOCAL result_init_119 - LOCAL result_120 - LOCAL op_121 - LOCAL left_122 - LOCAL right_123 - LOCAL instance_124 - LOCAL value_125 - LOCAL result_init_126 - LOCAL result_init_127 - LOCAL result_128 - LOCAL result_129 - LOCAL let_result_130 - LOCAL let_result_131 - LOCAL let_result_132 - LOCAL let_result_133 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - int_3 = instance_0 - result_4 = VCALL String length - j_5 = result_4 - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - i_9 = instance_6 - LABEL label_35 - left_13 = GetAttr i_9 value - right_14 = GetAttr j_5 value - op_12 = left_13 < right_14 - result_11 = ALLOCATE Bool - result_init_15 = CALL Bool_init - IF result_11 GOTO label_36 - GOTO label_37 - LABEL label_36 - instance_17 = ALLOCATE Int - value_18 = LOAD 1 - result_init_19 = CALL Int_init - result_16 = VCALL String substr - c_20 = result_16 - internal_26 = LOAD s_18 - instance_27 = ALLOCATE String - result_init_28 = CALL String_init - op_23 = CALL String_equals - result_22 = ALLOCATE Bool - result_init_29 = CALL Bool_init - IF result_22 GOTO label_38 - internal_35 = LOAD s_4 - instance_36 = ALLOCATE String - result_init_37 = CALL String_init - op_32 = CALL String_equals - result_31 = ALLOCATE Bool - result_init_38 = CALL Bool_init - IF result_31 GOTO label_39 - instance_47 = ALLOCATE Int - value_48 = LOAD 10 - result_init_49 = CALL Int_init - left_45 = GetAttr int_3 value - right_46 = GetAttr instance_47 value - op_44 = left_45 * right_46 - result_43 = ALLOCATE Int - result_init_50 = CALL Int_init - instance_53 = ALLOCATE Int - value_54 = LOAD 1 - result_init_55 = CALL Int_init - result_52 = VCALL String substr - result_51 = VCALL Parse c2i - left_41 = GetAttr result_43 value - right_42 = GetAttr result_51 value - op_40 = left_41 + right_42 - result_39 = ALLOCATE Int - result_init_56 = CALL Int_init - int_3 = result_39 - instance_62 = ALLOCATE Int - value_63 = LOAD 1 - result_init_64 = CALL Int_init - left_60 = GetAttr i_9 value - right_61 = GetAttr instance_62 value - op_59 = left_60 + right_61 - result_58 = ALLOCATE Int - result_init_65 = CALL Int_init - i_9 = result_58 - left_70 = GetAttr i_9 value - right_71 = GetAttr j_5 value - op_69 = left_70 = right_71 - result_68 = ALLOCATE Bool - result_init_72 = CALL Bool_init - IF result_68 GOTO label_40 - internal_73 = LOAD empty_str - instance_74 = ALLOCATE String - result_init_75 = CALL String_init - result_67 = instance_74 - GOTO label_41 - LABEL label_40 - internal_76 = LOAD empty_str - instance_77 = ALLOCATE String - result_init_78 = CALL String_init - SetAttr self rest instance_77 - result_67 = instance_77 - LABEL label_41 - result_30 = result_67 - GOTO label_42 - LABEL label_39 - result_89 = VCALL String length - left_87 = GetAttr result_89 value - right_88 = GetAttr i_9 value - op_86 = left_87 - right_88 - result_85 = ALLOCATE Int - result_init_90 = CALL Int_init - instance_91 = ALLOCATE Int - value_92 = LOAD 1 - result_init_93 = CALL Int_init - left_83 = GetAttr result_85 value - right_84 = GetAttr instance_91 value - op_82 = left_83 - right_84 - result_81 = ALLOCATE Int - result_init_94 = CALL Int_init - instance_99 = ALLOCATE Int - value_100 = LOAD 1 - result_init_101 = CALL Int_init - left_97 = GetAttr i_9 value - right_98 = GetAttr instance_99 value - op_96 = left_97 + right_98 - result_95 = ALLOCATE Int - result_init_102 = CALL Int_init - result_80 = VCALL String substr - SetAttr self rest result_80 - i_9 = j_5 - result_30 = j_5 - LABEL label_42 - result_21 = result_30 - GOTO label_43 - LABEL label_38 - result_114 = VCALL String length - left_112 = GetAttr result_114 value - right_113 = GetAttr i_9 value - op_111 = left_112 - right_113 - result_110 = ALLOCATE Int - result_init_115 = CALL Int_init - instance_116 = ALLOCATE Int - value_117 = LOAD 1 - result_init_118 = CALL Int_init - left_108 = GetAttr result_110 value - right_109 = GetAttr instance_116 value - op_107 = left_108 - right_109 - result_106 = ALLOCATE Int - result_init_119 = CALL Int_init - instance_124 = ALLOCATE Int - value_125 = LOAD 1 - result_init_126 = CALL Int_init - left_122 = GetAttr i_9 value - right_123 = GetAttr instance_124 value - op_121 = left_122 + right_123 - result_120 = ALLOCATE Int - result_init_127 = CALL Int_init - result_105 = VCALL String substr - SetAttr self rest result_105 - i_9 = j_5 - result_21 = j_5 - LABEL label_43 - let_result_130 = result_21 - GOTO label_35 - LABEL label_37 - result_10 = LOAD None - let_result_131 = result_10 - let_result_132 = let_result_131 - let_result_133 = int_3 - - RETURN let_result_133 -} -function Main_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - - result_0 = CALL Parse_init - - RETURN - result_1 = VCALL Main read_input - SetAttr self g result_1 -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL g_1 - LOCAL result_2 - LOCAL g_3 - - g_1 = GetAttr self g - result_0 = VCALL Graph print_V - g_3 = GetAttr self g - result_2 = VCALL Graph print_E - - RETURN result_2 -} -function BoolOp_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL Object_init - - RETURN -} -function BoolOp.and { - PARAM self - PARAM b1 - PARAM b2 - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - IF b1 GOTO label_44 - instance_1 = ALLOCATE Bool - value_2 = LOAD 0 - result_init_3 = CALL Bool_init - result_0 = instance_1 - GOTO label_45 - LABEL label_44 - result_0 = b2 - LABEL label_45 - - RETURN result_0 -} -function BoolOp.or { - PARAM self - PARAM b1 - PARAM b2 - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - IF b1 GOTO label_46 - result_0 = b2 - GOTO label_47 - LABEL label_46 - instance_1 = ALLOCATE Bool - value_2 = LOAD 0 - result_init_3 = CALL Bool_init - result_0 = instance_1 - LABEL label_47 - - RETURN result_0 -} \ No newline at end of file diff --git a/tests/codegen/hairyscary_test.cil b/tests/codegen/hairyscary_test.cil deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/codegen/hello_world.cil b/tests/codegen/hello_world.cil deleted file mode 100644 index cecdc6bb..00000000 --- a/tests/codegen/hello_world.cil +++ /dev/null @@ -1,304 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: Hello, World. - - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT msg_0 - type_name_1 = TYPEOF self - PRINT type_name_1 - eol_2 = LOAD s_1 - PRINT eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_3 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL Main out_string - - RETURN result_0 -} \ No newline at end of file diff --git a/tests/codegen/hello_world_test.cil b/tests/codegen/hello_world_test.cil deleted file mode 100644 index daf2a2a7..00000000 --- a/tests/codegen/hello_world_test.cil +++ /dev/null @@ -1,303 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: Hello, World.\n - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_3 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL Main out_string - - RETURN result_0 -} \ No newline at end of file diff --git a/tests/codegen/io.cil b/tests/codegen/io.cil deleted file mode 100644 index 81e81085..00000000 --- a/tests/codegen/io.cil +++ /dev/null @@ -1,483 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type A { - attribute io - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_a : A.out_a -} -type B { - attribute io - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_a : A.out_a - method out_b : B.out_b -} -type C { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method out_c : C.out_c -} -type D { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method out_c : C.out_c - method out_d : D.out_d -} -type Main { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: A: Hello world - -s_4: B: Hello world - -s_5: C: Hello world - -s_6: D: Hello world - -s_7: Done. - - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT msg_0 - type_name_1 = TYPEOF self - PRINT type_name_1 - eol_2 = LOAD s_1 - PRINT eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function A_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_0 = CALL Object_init - - RETURN - result_1 = ALLOCATE IO - init_2 = CALL IO_init - SetAttr self io result_1 -} -function A.out_a { - PARAM self - - LOCAL result_0 - LOCAL A.io - LOCAL internal_2 - LOCAL instance_3 - LOCAL result_init_4 - - A.io = GetAttr self io - internal_2 = LOAD s_3 - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - result_0 = VCALL IO out_string - - RETURN result_0 -} -function B_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL A_init - - RETURN -} -function B.out_b { - PARAM self - - LOCAL result_0 - LOCAL B.io - LOCAL internal_2 - LOCAL instance_3 - LOCAL result_init_4 - - B.io = GetAttr self io - internal_2 = LOAD s_4 - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - result_0 = VCALL IO out_string - - RETURN result_0 -} -function C_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function C.out_c { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_5 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL C out_string - - RETURN result_0 -} -function D_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL C_init - - RETURN -} -function D.out_d { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_6 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL D out_string - - RETURN result_0 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL result_3 - LOCAL result_4 - LOCAL init_5 - LOCAL result_6 - LOCAL result_7 - LOCAL init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL init_11 - LOCAL result_12 - LOCAL internal_13 - LOCAL instance_14 - LOCAL result_init_15 - - result_1 = ALLOCATE A - init_2 = CALL A_init - result_0 = VCALL A out_a - result_4 = ALLOCATE B - init_5 = CALL B_init - result_3 = VCALL B out_b - result_7 = ALLOCATE C - init_8 = CALL C_init - result_6 = VCALL C out_c - result_10 = ALLOCATE D - init_11 = CALL D_init - result_9 = VCALL D out_d - internal_13 = LOAD s_7 - instance_14 = ALLOCATE String - result_init_15 = CALL String_init - result_12 = VCALL Main out_string - - RETURN result_12 -} \ No newline at end of file diff --git a/tests/codegen/io_test.cil b/tests/codegen/io_test.cil deleted file mode 100644 index 1b263260..00000000 --- a/tests/codegen/io_test.cil +++ /dev/null @@ -1,478 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type A { - attribute io - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_a : A.out_a -} -type B { - attribute io - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_a : A.out_a - method out_b : B.out_b -} -type C { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method out_c : C.out_c -} -type D { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method out_c : C.out_c - method out_d : D.out_d -} -type Main { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: A: Hello world\n -s_4: B: Hello world\n -s_5: C: Hello world\n -s_6: D: Hello world\n -s_7: Done.\n - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function A_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_0 = CALL Object_init - - RETURN - result_1 = ALLOCATE IO - init_2 = CALL IO_init - SetAttr self io result_1 -} -function A.out_a { - PARAM self - - LOCAL result_0 - LOCAL io_1 - LOCAL internal_2 - LOCAL instance_3 - LOCAL result_init_4 - - io_1 = GetAttr self io - internal_2 = LOAD s_3 - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - result_0 = VCALL IO out_string - - RETURN result_0 -} -function B_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL A_init - - RETURN -} -function B.out_b { - PARAM self - - LOCAL result_0 - LOCAL io_1 - LOCAL internal_2 - LOCAL instance_3 - LOCAL result_init_4 - - io_1 = GetAttr self io - internal_2 = LOAD s_4 - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - result_0 = VCALL IO out_string - - RETURN result_0 -} -function C_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function C.out_c { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_5 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL C out_string - - RETURN result_0 -} -function D_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL C_init - - RETURN -} -function D.out_d { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - - internal_1 = LOAD s_6 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL D out_string - - RETURN result_0 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL result_3 - LOCAL result_4 - LOCAL init_5 - LOCAL result_6 - LOCAL result_7 - LOCAL init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL init_11 - LOCAL result_12 - LOCAL internal_13 - LOCAL instance_14 - LOCAL result_init_15 - - result_1 = ALLOCATE A - init_2 = CALL A_init - result_0 = VCALL A out_a - result_4 = ALLOCATE B - init_5 = CALL B_init - result_3 = VCALL B out_b - result_7 = ALLOCATE C - init_8 = CALL C_init - result_6 = VCALL C out_c - result_10 = ALLOCATE D - init_11 = CALL D_init - result_9 = VCALL D out_d - internal_13 = LOAD s_7 - instance_14 = ALLOCATE String - result_init_15 = CALL String_init - result_12 = VCALL Main out_string - - RETURN result_12 -} \ No newline at end of file diff --git a/tests/codegen/life.cil b/tests/codegen/life.cil deleted file mode 100644 index 5780dbb4..00000000 --- a/tests/codegen/life.cil +++ /dev/null @@ -1,3425 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Board { - attribute rows - attribute columns - attribute board_size - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method size_of_board : Board.size_of_board - method board_init : Board.board_init -} -type CellularAutomaton { - attribute rows - attribute columns - attribute board_size - attribute population_map - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method size_of_board : Board.size_of_board - method board_init : Board.board_init - method init : CellularAutomaton.init - method print : CellularAutomaton.print - method num_cells : CellularAutomaton.num_cells - method cell : CellularAutomaton.cell - method north : CellularAutomaton.north - method south : CellularAutomaton.south - method east : CellularAutomaton.east - method west : CellularAutomaton.west - method northwest : CellularAutomaton.northwest - method northeast : CellularAutomaton.northeast - method southeast : CellularAutomaton.southeast - method southwest : CellularAutomaton.southwest - method neighbors : CellularAutomaton.neighbors - method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution - method evolve : CellularAutomaton.evolve - method option : CellularAutomaton.option - method prompt : CellularAutomaton.prompt - method prompt2 : CellularAutomaton.prompt2 -} -type Main { - attribute rows - attribute columns - attribute board_size - attribute population_map - attribute cells - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method size_of_board : Board.size_of_board - method board_init : Board.board_init - method init : CellularAutomaton.init - method print : CellularAutomaton.print - method num_cells : CellularAutomaton.num_cells - method cell : CellularAutomaton.cell - method north : CellularAutomaton.north - method south : CellularAutomaton.south - method east : CellularAutomaton.east - method west : CellularAutomaton.west - method northwest : CellularAutomaton.northwest - method northeast : CellularAutomaton.northeast - method southeast : CellularAutomaton.southeast - method southwest : CellularAutomaton.southwest - method neighbors : CellularAutomaton.neighbors - method cell_at_next_evolution : CellularAutomaton.cell_at_next_evolution - method evolve : CellularAutomaton.evolve - method option : CellularAutomaton.option - method prompt : CellularAutomaton.prompt - method prompt2 : CellularAutomaton.prompt2 - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: -s_4: X -s_5: - -s_6: -Please chose a number: - -s_7: 1: A cross - -s_8: 2: A slash from the upper left to lower right - -s_9: 3: A slash from the upper right to lower left - -s_10: 4: An X - -s_11: 5: A greater than sign - -s_12: 6: A less than sign - -s_13: 7: Two greater than signs - -s_14: 8: Two less than signs - -s_15: 9: A 'V' - -s_16: 10: An inverse 'V' - -s_17: 11: Numbers 9 and 10 combined - -s_18: 12: A full grid - -s_19: 13: A 'T' - -s_20: 14: A plus '+' - -s_21: 15: A 'W' - -s_22: 16: An 'M' - -s_23: 17: An 'E' - -s_24: 18: A '3' - -s_25: 19: An 'O' - -s_26: 20: An '8' - -s_27: 21: An 'S' - -s_28: Your choice => -s_29: -s_30: XXXX X XX X XXXX -s_31: XX X XX X XX X XX X XX -s_32: XX X XX X XX -s_33: XXX X X X X XXXX -s_34: XXXXX X XXXXX X XXXX -s_35: X X X X X X X -s_36: X X X X X X X -s_37: X X XXXXX X X -s_38: XXXXX X X X X -s_39: XXXXXXXXXXXXXXXXXXXXXXXXX -s_40: X X X X X X X X -s_41: X X X X X -s_42: X X X X X -s_43: X XX X X X -s_44: X X X XX X -s_45: X X X X X -s_46: X X X X X -s_47: X X X X X X X X X -s_48: X X X X X -s_49: X X X X X -s_50: XX XXXX XXXX XX -s_51: Would you like to continue with the next generation? - -s_52: Please use lowercase y or n for your answer [y]: -s_53: n -s_54: - - -s_55: Would you like to choose a background pattern? - -s_56: Please use lowercase y or n for your answer [n]: -s_57: y -s_58: Welcome to the Game of Life. - -s_59: There are many initial states to choose from. - - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT msg_0 - type_name_1 = TYPEOF self - PRINT type_name_1 - eol_2 = LOAD s_1 - PRINT eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Board_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - LOCAL instance_4 - LOCAL value_5 - LOCAL result_init_6 - LOCAL instance_7 - LOCAL value_8 - LOCAL result_init_9 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self rows instance_1 - instance_4 = ALLOCATE Int - value_5 = LOAD 0 - result_init_6 = CALL Int_init - SetAttr self columns instance_4 - instance_7 = ALLOCATE Int - value_8 = LOAD 0 - result_init_9 = CALL Int_init - SetAttr self board_size instance_7 -} -function Board.size_of_board { - PARAM self - PARAM initial - - LOCAL result_0 - - result_0 = VCALL String length - - RETURN result_0 -} -function Board.board_init { - PARAM self - PARAM start - - LOCAL result_0 - LOCAL size_1 - LOCAL result_2 - LOCAL result_3 - LOCAL op_4 - LOCAL left_5 - LOCAL right_6 - LOCAL instance_7 - LOCAL value_8 - LOCAL result_init_9 - LOCAL result_init_10 - LOCAL result_11 - LOCAL result_12 - LOCAL op_13 - LOCAL left_14 - LOCAL right_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL result_20 - LOCAL result_21 - LOCAL op_22 - LOCAL left_23 - LOCAL right_24 - LOCAL instance_25 - LOCAL value_26 - LOCAL result_init_27 - LOCAL result_init_28 - LOCAL result_29 - LOCAL result_30 - LOCAL op_31 - LOCAL left_32 - LOCAL right_33 - LOCAL instance_34 - LOCAL value_35 - LOCAL result_init_36 - LOCAL result_init_37 - LOCAL result_38 - LOCAL result_39 - LOCAL op_40 - LOCAL left_41 - LOCAL right_42 - LOCAL instance_43 - LOCAL value_44 - LOCAL result_init_45 - LOCAL result_init_46 - LOCAL result_47 - LOCAL result_48 - LOCAL op_49 - LOCAL left_50 - LOCAL right_51 - LOCAL instance_52 - LOCAL value_53 - LOCAL result_init_54 - LOCAL result_init_55 - LOCAL instance_56 - LOCAL value_57 - LOCAL result_init_58 - LOCAL result_59 - LOCAL instance_60 - LOCAL value_61 - LOCAL result_init_62 - LOCAL result_63 - LOCAL result_64 - LOCAL instance_65 - LOCAL value_66 - LOCAL result_init_67 - LOCAL result_68 - LOCAL instance_69 - LOCAL value_70 - LOCAL result_init_71 - LOCAL result_72 - LOCAL result_73 - LOCAL instance_74 - LOCAL value_75 - LOCAL result_init_76 - LOCAL result_77 - LOCAL instance_78 - LOCAL value_79 - LOCAL result_init_80 - LOCAL result_81 - LOCAL result_82 - LOCAL instance_83 - LOCAL value_84 - LOCAL result_init_85 - LOCAL result_86 - LOCAL instance_87 - LOCAL value_88 - LOCAL result_init_89 - LOCAL result_90 - LOCAL result_91 - LOCAL instance_92 - LOCAL value_93 - LOCAL result_init_94 - LOCAL result_95 - LOCAL instance_96 - LOCAL value_97 - LOCAL result_init_98 - LOCAL result_99 - LOCAL result_100 - LOCAL instance_101 - LOCAL value_102 - LOCAL result_init_103 - LOCAL result_104 - LOCAL instance_105 - LOCAL value_106 - LOCAL result_init_107 - LOCAL result_108 - LOCAL result_109 - LOCAL instance_110 - LOCAL value_111 - LOCAL result_init_112 - LOCAL result_113 - LOCAL instance_114 - LOCAL value_115 - LOCAL result_init_116 - LOCAL result_117 - LOCAL result_118 - LOCAL let_result_119 - - result_0 = VCALL Board size_of_board - size_1 = result_0 - instance_7 = ALLOCATE Int - value_8 = LOAD 15 - result_init_9 = CALL Int_init - left_5 = GetAttr size_1 value - right_6 = GetAttr instance_7 value - op_4 = left_5 = right_6 - result_3 = ALLOCATE Bool - result_init_10 = CALL Bool_init - IF result_3 GOTO label_1 - instance_16 = ALLOCATE Int - value_17 = LOAD 16 - result_init_18 = CALL Int_init - left_14 = GetAttr size_1 value - right_15 = GetAttr instance_16 value - op_13 = left_14 = right_15 - result_12 = ALLOCATE Bool - result_init_19 = CALL Bool_init - IF result_12 GOTO label_2 - instance_25 = ALLOCATE Int - value_26 = LOAD 20 - result_init_27 = CALL Int_init - left_23 = GetAttr size_1 value - right_24 = GetAttr instance_25 value - op_22 = left_23 = right_24 - result_21 = ALLOCATE Bool - result_init_28 = CALL Bool_init - IF result_21 GOTO label_3 - instance_34 = ALLOCATE Int - value_35 = LOAD 21 - result_init_36 = CALL Int_init - left_32 = GetAttr size_1 value - right_33 = GetAttr instance_34 value - op_31 = left_32 = right_33 - result_30 = ALLOCATE Bool - result_init_37 = CALL Bool_init - IF result_30 GOTO label_4 - instance_43 = ALLOCATE Int - value_44 = LOAD 25 - result_init_45 = CALL Int_init - left_41 = GetAttr size_1 value - right_42 = GetAttr instance_43 value - op_40 = left_41 = right_42 - result_39 = ALLOCATE Bool - result_init_46 = CALL Bool_init - IF result_39 GOTO label_5 - instance_52 = ALLOCATE Int - value_53 = LOAD 28 - result_init_54 = CALL Int_init - left_50 = GetAttr size_1 value - right_51 = GetAttr instance_52 value - op_49 = left_50 = right_51 - result_48 = ALLOCATE Bool - result_init_55 = CALL Bool_init - IF result_48 GOTO label_6 - instance_56 = ALLOCATE Int - value_57 = LOAD 5 - result_init_58 = CALL Int_init - SetAttr self rows instance_56 - instance_60 = ALLOCATE Int - value_61 = LOAD 5 - result_init_62 = CALL Int_init - SetAttr self columns instance_60 - SetAttr self board_size size_1 - result_47 = size_1 - GOTO label_7 - LABEL label_6 - instance_65 = ALLOCATE Int - value_66 = LOAD 7 - result_init_67 = CALL Int_init - SetAttr self rows instance_65 - instance_69 = ALLOCATE Int - value_70 = LOAD 4 - result_init_71 = CALL Int_init - SetAttr self columns instance_69 - SetAttr self board_size size_1 - result_47 = size_1 - LABEL label_7 - result_38 = result_47 - GOTO label_8 - LABEL label_5 - instance_74 = ALLOCATE Int - value_75 = LOAD 5 - result_init_76 = CALL Int_init - SetAttr self rows instance_74 - instance_78 = ALLOCATE Int - value_79 = LOAD 5 - result_init_80 = CALL Int_init - SetAttr self columns instance_78 - SetAttr self board_size size_1 - result_38 = size_1 - LABEL label_8 - result_29 = result_38 - GOTO label_9 - LABEL label_4 - instance_83 = ALLOCATE Int - value_84 = LOAD 3 - result_init_85 = CALL Int_init - SetAttr self rows instance_83 - instance_87 = ALLOCATE Int - value_88 = LOAD 7 - result_init_89 = CALL Int_init - SetAttr self columns instance_87 - SetAttr self board_size size_1 - result_29 = size_1 - LABEL label_9 - result_20 = result_29 - GOTO label_10 - LABEL label_3 - instance_92 = ALLOCATE Int - value_93 = LOAD 4 - result_init_94 = CALL Int_init - SetAttr self rows instance_92 - instance_96 = ALLOCATE Int - value_97 = LOAD 5 - result_init_98 = CALL Int_init - SetAttr self columns instance_96 - SetAttr self board_size size_1 - result_20 = size_1 - LABEL label_10 - result_11 = result_20 - GOTO label_11 - LABEL label_2 - instance_101 = ALLOCATE Int - value_102 = LOAD 4 - result_init_103 = CALL Int_init - SetAttr self rows instance_101 - instance_105 = ALLOCATE Int - value_106 = LOAD 4 - result_init_107 = CALL Int_init - SetAttr self columns instance_105 - SetAttr self board_size size_1 - result_11 = size_1 - LABEL label_11 - result_2 = result_11 - GOTO label_12 - LABEL label_1 - instance_110 = ALLOCATE Int - value_111 = LOAD 3 - result_init_112 = CALL Int_init - SetAttr self rows instance_110 - instance_114 = ALLOCATE Int - value_115 = LOAD 5 - result_init_116 = CALL Int_init - SetAttr self columns instance_114 - SetAttr self board_size size_1 - result_2 = size_1 - LABEL label_12 - let_result_119 = self - - RETURN let_result_119 -} -function CellularAutomaton_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = CALL Board_init - - RETURN - instance_1 = ALLOCATE String - value_2 = LOAD empty_str - result_init_3 = CALL String_init - SetAttr self population_map instance_1 -} -function CellularAutomaton.init { - PARAM self - PARAM map - - LOCAL result_0 - LOCAL result_1 - - SetAttr self population_map map - result_1 = VCALL CellularAutomaton board_init - - RETURN self -} -function CellularAutomaton.print { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL i_3 - LOCAL CellularAutomaton.board_size - LOCAL num_5 - LOCAL result_6 - LOCAL internal_7 - LOCAL instance_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL result_17 - LOCAL CellularAutomaton.population_map - LOCAL CellularAutomaton.columns - LOCAL result_20 - LOCAL internal_21 - LOCAL instance_22 - LOCAL result_init_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL CellularAutomaton.columns - LOCAL result_init_29 - LOCAL result_30 - LOCAL result_31 - LOCAL internal_32 - LOCAL instance_33 - LOCAL result_init_34 - LOCAL let_result_35 - LOCAL let_result_36 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - i_3 = instance_0 - CellularAutomaton.board_size = GetAttr self board_size - num_5 = CellularAutomaton.board_size - internal_7 = LOAD s_1 - instance_8 = ALLOCATE String - result_init_9 = CALL String_init - result_6 = VCALL CellularAutomaton out_string - LABEL label_13 - left_13 = GetAttr i_3 value - right_14 = GetAttr num_5 value - op_12 = left_13 < right_14 - result_11 = ALLOCATE Bool - result_init_15 = CALL Bool_init - IF result_11 GOTO label_14 - GOTO label_15 - LABEL label_14 - CellularAutomaton.population_map = GetAttr self population_map - CellularAutomaton.columns = GetAttr self columns - result_17 = VCALL String substr - result_16 = VCALL CellularAutomaton out_string - internal_21 = LOAD s_1 - instance_22 = ALLOCATE String - result_init_23 = CALL String_init - result_20 = VCALL CellularAutomaton out_string - CellularAutomaton.columns = GetAttr self columns - left_26 = GetAttr i_3 value - right_27 = GetAttr CellularAutomaton.columns value - op_25 = left_26 + right_27 - result_24 = ALLOCATE Int - result_init_29 = CALL Int_init - i_3 = result_24 - GOTO label_13 - LABEL label_15 - result_10 = LOAD VOID - internal_32 = LOAD s_1 - instance_33 = ALLOCATE String - result_init_34 = CALL String_init - result_31 = VCALL CellularAutomaton out_string - let_result_35 = self - let_result_36 = let_result_35 - - RETURN let_result_36 -} -function CellularAutomaton.num_cells { - PARAM self - - LOCAL result_0 - LOCAL CellularAutomaton.population_map - - CellularAutomaton.population_map = GetAttr self population_map - result_0 = VCALL String length - - RETURN result_0 -} -function CellularAutomaton.cell { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL CellularAutomaton.board_size - LOCAL instance_10 - LOCAL value_11 - LOCAL result_init_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL CellularAutomaton.population_map - LOCAL instance_17 - LOCAL value_18 - LOCAL result_init_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - - CellularAutomaton.board_size = GetAttr self board_size - instance_10 = ALLOCATE Int - value_11 = LOAD 1 - result_init_12 = CALL Int_init - left_7 = GetAttr CellularAutomaton.board_size value - right_8 = GetAttr instance_10 value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_13 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr position value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_16 - CellularAutomaton.population_map = GetAttr self population_map - instance_17 = ALLOCATE Int - value_18 = LOAD 1 - result_init_19 = CALL Int_init - result_15 = VCALL String substr - result_0 = result_15 - GOTO label_17 - LABEL label_16 - internal_20 = LOAD s_3 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - result_0 = instance_21 - LABEL label_17 - - RETURN result_0 -} -function CellularAutomaton.north { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL CellularAutomaton.columns - LOCAL result_init_10 - LOCAL instance_11 - LOCAL value_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL CellularAutomaton.columns - LOCAL result_init_21 - LOCAL internal_22 - LOCAL instance_23 - LOCAL result_init_24 - - CellularAutomaton.columns = GetAttr self columns - left_7 = GetAttr position value - right_8 = GetAttr CellularAutomaton.columns value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_10 = CALL Int_init - instance_11 = ALLOCATE Int - value_12 = LOAD 0 - result_init_13 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_11 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_18 - CellularAutomaton.columns = GetAttr self columns - left_18 = GetAttr position value - right_19 = GetAttr CellularAutomaton.columns value - op_17 = left_18 - right_19 - result_16 = ALLOCATE Int - result_init_21 = CALL Int_init - result_15 = VCALL CellularAutomaton cell - result_0 = result_15 - GOTO label_19 - LABEL label_18 - internal_22 = LOAD s_3 - instance_23 = ALLOCATE String - result_init_24 = CALL String_init - result_0 = instance_23 - LABEL label_19 - - RETURN result_0 -} -function CellularAutomaton.south { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL CellularAutomaton.board_size - LOCAL result_6 - LOCAL op_7 - LOCAL left_8 - LOCAL right_9 - LOCAL CellularAutomaton.columns - LOCAL result_init_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL CellularAutomaton.columns - LOCAL result_init_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - - CellularAutomaton.board_size = GetAttr self board_size - CellularAutomaton.columns = GetAttr self columns - left_8 = GetAttr position value - right_9 = GetAttr CellularAutomaton.columns value - op_7 = left_8 + right_9 - result_6 = ALLOCATE Int - result_init_11 = CALL Int_init - left_3 = GetAttr CellularAutomaton.board_size value - right_4 = GetAttr result_6 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_12 = CALL Bool_init - IF result_1 GOTO label_20 - CellularAutomaton.columns = GetAttr self columns - left_16 = GetAttr position value - right_17 = GetAttr CellularAutomaton.columns value - op_15 = left_16 + right_17 - result_14 = ALLOCATE Int - result_init_19 = CALL Int_init - result_13 = VCALL CellularAutomaton cell - result_0 = result_13 - GOTO label_21 - LABEL label_20 - internal_20 = LOAD s_3 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - result_0 = instance_21 - LABEL label_21 - - RETURN result_0 -} -function CellularAutomaton.east { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL result_9 - LOCAL op_10 - LOCAL left_11 - LOCAL right_12 - LOCAL result_13 - LOCAL op_14 - LOCAL left_15 - LOCAL right_16 - LOCAL instance_17 - LOCAL value_18 - LOCAL result_init_19 - LOCAL result_init_20 - LOCAL CellularAutomaton.columns - LOCAL result_init_22 - LOCAL CellularAutomaton.columns - LOCAL result_init_24 - LOCAL result_25 - LOCAL op_26 - LOCAL left_27 - LOCAL right_28 - LOCAL instance_29 - LOCAL value_30 - LOCAL result_init_31 - LOCAL result_init_32 - LOCAL result_init_33 - LOCAL result_34 - LOCAL result_35 - LOCAL op_36 - LOCAL left_37 - LOCAL right_38 - LOCAL instance_39 - LOCAL value_40 - LOCAL result_init_41 - LOCAL result_init_42 - LOCAL internal_43 - LOCAL instance_44 - LOCAL result_init_45 - - instance_17 = ALLOCATE Int - value_18 = LOAD 1 - result_init_19 = CALL Int_init - left_15 = GetAttr position value - right_16 = GetAttr instance_17 value - op_14 = left_15 + right_16 - result_13 = ALLOCATE Int - result_init_20 = CALL Int_init - CellularAutomaton.columns = GetAttr self columns - left_11 = GetAttr result_13 value - right_12 = GetAttr CellularAutomaton.columns value - op_10 = left_11 / right_12 - result_9 = ALLOCATE Int - result_init_22 = CALL Int_init - CellularAutomaton.columns = GetAttr self columns - left_7 = GetAttr result_9 value - right_8 = GetAttr CellularAutomaton.columns value - op_6 = left_7 * right_8 - result_5 = ALLOCATE Int - result_init_24 = CALL Int_init - instance_29 = ALLOCATE Int - value_30 = LOAD 1 - result_init_31 = CALL Int_init - left_27 = GetAttr position value - right_28 = GetAttr instance_29 value - op_26 = left_27 + right_28 - result_25 = ALLOCATE Int - result_init_32 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr result_25 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_33 = CALL Bool_init - IF result_1 GOTO label_22 - instance_39 = ALLOCATE Int - value_40 = LOAD 1 - result_init_41 = CALL Int_init - left_37 = GetAttr position value - right_38 = GetAttr instance_39 value - op_36 = left_37 + right_38 - result_35 = ALLOCATE Int - result_init_42 = CALL Int_init - result_34 = VCALL CellularAutomaton cell - result_0 = result_34 - GOTO label_23 - LABEL label_22 - internal_43 = LOAD s_3 - instance_44 = ALLOCATE String - result_init_45 = CALL String_init - result_0 = instance_44 - LABEL label_23 - - RETURN result_0 -} -function CellularAutomaton.west { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL instance_5 - LOCAL value_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL op_11 - LOCAL left_12 - LOCAL right_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL result_18 - LOCAL op_19 - LOCAL left_20 - LOCAL right_21 - LOCAL CellularAutomaton.columns - LOCAL result_init_23 - LOCAL CellularAutomaton.columns - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL result_27 - LOCAL result_28 - LOCAL op_29 - LOCAL left_30 - LOCAL right_31 - LOCAL instance_32 - LOCAL value_33 - LOCAL result_init_34 - LOCAL result_init_35 - LOCAL internal_36 - LOCAL instance_37 - LOCAL result_init_38 - LOCAL internal_39 - LOCAL instance_40 - LOCAL result_init_41 - - instance_5 = ALLOCATE Int - value_6 = LOAD 0 - result_init_7 = CALL Int_init - left_3 = GetAttr position value - right_4 = GetAttr instance_5 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_24 - CellularAutomaton.columns = GetAttr self columns - left_20 = GetAttr position value - right_21 = GetAttr CellularAutomaton.columns value - op_19 = left_20 / right_21 - result_18 = ALLOCATE Int - result_init_23 = CALL Int_init - CellularAutomaton.columns = GetAttr self columns - left_16 = GetAttr result_18 value - right_17 = GetAttr CellularAutomaton.columns value - op_15 = left_16 * right_17 - result_14 = ALLOCATE Int - result_init_25 = CALL Int_init - left_12 = GetAttr result_14 value - right_13 = GetAttr position value - op_11 = left_12 = right_13 - result_10 = ALLOCATE Bool - result_init_26 = CALL Bool_init - IF result_10 GOTO label_25 - instance_32 = ALLOCATE Int - value_33 = LOAD 1 - result_init_34 = CALL Int_init - left_30 = GetAttr position value - right_31 = GetAttr instance_32 value - op_29 = left_30 - right_31 - result_28 = ALLOCATE Int - result_init_35 = CALL Int_init - result_27 = VCALL CellularAutomaton cell - result_9 = result_27 - GOTO label_26 - LABEL label_25 - internal_36 = LOAD s_3 - instance_37 = ALLOCATE String - result_init_38 = CALL String_init - result_9 = instance_37 - LABEL label_26 - result_0 = result_9 - GOTO label_27 - LABEL label_24 - internal_39 = LOAD s_3 - instance_40 = ALLOCATE String - result_init_41 = CALL String_init - result_0 = instance_40 - LABEL label_27 - - RETURN result_0 -} -function CellularAutomaton.northwest { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL CellularAutomaton.columns - LOCAL result_init_10 - LOCAL instance_11 - LOCAL value_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL result_20 - LOCAL op_21 - LOCAL left_22 - LOCAL right_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL CellularAutomaton.columns - LOCAL result_init_29 - LOCAL CellularAutomaton.columns - LOCAL result_init_31 - LOCAL result_init_32 - LOCAL result_33 - LOCAL result_34 - LOCAL op_35 - LOCAL left_36 - LOCAL right_37 - LOCAL instance_38 - LOCAL value_39 - LOCAL result_init_40 - LOCAL result_init_41 - LOCAL internal_42 - LOCAL instance_43 - LOCAL result_init_44 - LOCAL internal_45 - LOCAL instance_46 - LOCAL result_init_47 - - CellularAutomaton.columns = GetAttr self columns - left_7 = GetAttr position value - right_8 = GetAttr CellularAutomaton.columns value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_10 = CALL Int_init - instance_11 = ALLOCATE Int - value_12 = LOAD 0 - result_init_13 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_11 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_28 - CellularAutomaton.columns = GetAttr self columns - left_26 = GetAttr position value - right_27 = GetAttr CellularAutomaton.columns value - op_25 = left_26 / right_27 - result_24 = ALLOCATE Int - result_init_29 = CALL Int_init - CellularAutomaton.columns = GetAttr self columns - left_22 = GetAttr result_24 value - right_23 = GetAttr CellularAutomaton.columns value - op_21 = left_22 * right_23 - result_20 = ALLOCATE Int - result_init_31 = CALL Int_init - left_18 = GetAttr result_20 value - right_19 = GetAttr position value - op_17 = left_18 = right_19 - result_16 = ALLOCATE Bool - result_init_32 = CALL Bool_init - IF result_16 GOTO label_29 - instance_38 = ALLOCATE Int - value_39 = LOAD 1 - result_init_40 = CALL Int_init - left_36 = GetAttr position value - right_37 = GetAttr instance_38 value - op_35 = left_36 - right_37 - result_34 = ALLOCATE Int - result_init_41 = CALL Int_init - result_33 = VCALL CellularAutomaton north - result_15 = result_33 - GOTO label_30 - LABEL label_29 - internal_42 = LOAD s_3 - instance_43 = ALLOCATE String - result_init_44 = CALL String_init - result_15 = instance_43 - LABEL label_30 - result_0 = result_15 - GOTO label_31 - LABEL label_28 - internal_45 = LOAD s_3 - instance_46 = ALLOCATE String - result_init_47 = CALL String_init - result_0 = instance_46 - LABEL label_31 - - RETURN result_0 -} -function CellularAutomaton.northeast { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL CellularAutomaton.columns - LOCAL result_init_10 - LOCAL instance_11 - LOCAL value_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL result_20 - LOCAL op_21 - LOCAL left_22 - LOCAL right_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL result_28 - LOCAL op_29 - LOCAL left_30 - LOCAL right_31 - LOCAL instance_32 - LOCAL value_33 - LOCAL result_init_34 - LOCAL result_init_35 - LOCAL CellularAutomaton.columns - LOCAL result_init_37 - LOCAL CellularAutomaton.columns - LOCAL result_init_39 - LOCAL result_40 - LOCAL op_41 - LOCAL left_42 - LOCAL right_43 - LOCAL instance_44 - LOCAL value_45 - LOCAL result_init_46 - LOCAL result_init_47 - LOCAL result_init_48 - LOCAL result_49 - LOCAL result_50 - LOCAL op_51 - LOCAL left_52 - LOCAL right_53 - LOCAL instance_54 - LOCAL value_55 - LOCAL result_init_56 - LOCAL result_init_57 - LOCAL internal_58 - LOCAL instance_59 - LOCAL result_init_60 - LOCAL internal_61 - LOCAL instance_62 - LOCAL result_init_63 - - CellularAutomaton.columns = GetAttr self columns - left_7 = GetAttr position value - right_8 = GetAttr CellularAutomaton.columns value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_10 = CALL Int_init - instance_11 = ALLOCATE Int - value_12 = LOAD 0 - result_init_13 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_11 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_32 - instance_32 = ALLOCATE Int - value_33 = LOAD 1 - result_init_34 = CALL Int_init - left_30 = GetAttr position value - right_31 = GetAttr instance_32 value - op_29 = left_30 + right_31 - result_28 = ALLOCATE Int - result_init_35 = CALL Int_init - CellularAutomaton.columns = GetAttr self columns - left_26 = GetAttr result_28 value - right_27 = GetAttr CellularAutomaton.columns value - op_25 = left_26 / right_27 - result_24 = ALLOCATE Int - result_init_37 = CALL Int_init - CellularAutomaton.columns = GetAttr self columns - left_22 = GetAttr result_24 value - right_23 = GetAttr CellularAutomaton.columns value - op_21 = left_22 * right_23 - result_20 = ALLOCATE Int - result_init_39 = CALL Int_init - instance_44 = ALLOCATE Int - value_45 = LOAD 1 - result_init_46 = CALL Int_init - left_42 = GetAttr position value - right_43 = GetAttr instance_44 value - op_41 = left_42 + right_43 - result_40 = ALLOCATE Int - result_init_47 = CALL Int_init - left_18 = GetAttr result_20 value - right_19 = GetAttr result_40 value - op_17 = left_18 = right_19 - result_16 = ALLOCATE Bool - result_init_48 = CALL Bool_init - IF result_16 GOTO label_33 - instance_54 = ALLOCATE Int - value_55 = LOAD 1 - result_init_56 = CALL Int_init - left_52 = GetAttr position value - right_53 = GetAttr instance_54 value - op_51 = left_52 + right_53 - result_50 = ALLOCATE Int - result_init_57 = CALL Int_init - result_49 = VCALL CellularAutomaton north - result_15 = result_49 - GOTO label_34 - LABEL label_33 - internal_58 = LOAD s_3 - instance_59 = ALLOCATE String - result_init_60 = CALL String_init - result_15 = instance_59 - LABEL label_34 - result_0 = result_15 - GOTO label_35 - LABEL label_32 - internal_61 = LOAD s_3 - instance_62 = ALLOCATE String - result_init_63 = CALL String_init - result_0 = instance_62 - LABEL label_35 - - RETURN result_0 -} -function CellularAutomaton.southeast { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL CellularAutomaton.board_size - LOCAL result_6 - LOCAL op_7 - LOCAL left_8 - LOCAL right_9 - LOCAL CellularAutomaton.columns - LOCAL result_init_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL result_18 - LOCAL op_19 - LOCAL left_20 - LOCAL right_21 - LOCAL result_22 - LOCAL op_23 - LOCAL left_24 - LOCAL right_25 - LOCAL result_26 - LOCAL op_27 - LOCAL left_28 - LOCAL right_29 - LOCAL instance_30 - LOCAL value_31 - LOCAL result_init_32 - LOCAL result_init_33 - LOCAL CellularAutomaton.columns - LOCAL result_init_35 - LOCAL CellularAutomaton.columns - LOCAL result_init_37 - LOCAL result_38 - LOCAL op_39 - LOCAL left_40 - LOCAL right_41 - LOCAL instance_42 - LOCAL value_43 - LOCAL result_init_44 - LOCAL result_init_45 - LOCAL result_init_46 - LOCAL result_47 - LOCAL result_48 - LOCAL op_49 - LOCAL left_50 - LOCAL right_51 - LOCAL instance_52 - LOCAL value_53 - LOCAL result_init_54 - LOCAL result_init_55 - LOCAL internal_56 - LOCAL instance_57 - LOCAL result_init_58 - LOCAL internal_59 - LOCAL instance_60 - LOCAL result_init_61 - - CellularAutomaton.board_size = GetAttr self board_size - CellularAutomaton.columns = GetAttr self columns - left_8 = GetAttr position value - right_9 = GetAttr CellularAutomaton.columns value - op_7 = left_8 + right_9 - result_6 = ALLOCATE Int - result_init_11 = CALL Int_init - left_3 = GetAttr CellularAutomaton.board_size value - right_4 = GetAttr result_6 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_12 = CALL Bool_init - IF result_1 GOTO label_36 - instance_30 = ALLOCATE Int - value_31 = LOAD 1 - result_init_32 = CALL Int_init - left_28 = GetAttr position value - right_29 = GetAttr instance_30 value - op_27 = left_28 + right_29 - result_26 = ALLOCATE Int - result_init_33 = CALL Int_init - CellularAutomaton.columns = GetAttr self columns - left_24 = GetAttr result_26 value - right_25 = GetAttr CellularAutomaton.columns value - op_23 = left_24 / right_25 - result_22 = ALLOCATE Int - result_init_35 = CALL Int_init - CellularAutomaton.columns = GetAttr self columns - left_20 = GetAttr result_22 value - right_21 = GetAttr CellularAutomaton.columns value - op_19 = left_20 * right_21 - result_18 = ALLOCATE Int - result_init_37 = CALL Int_init - instance_42 = ALLOCATE Int - value_43 = LOAD 1 - result_init_44 = CALL Int_init - left_40 = GetAttr position value - right_41 = GetAttr instance_42 value - op_39 = left_40 + right_41 - result_38 = ALLOCATE Int - result_init_45 = CALL Int_init - left_16 = GetAttr result_18 value - right_17 = GetAttr result_38 value - op_15 = left_16 = right_17 - result_14 = ALLOCATE Bool - result_init_46 = CALL Bool_init - IF result_14 GOTO label_37 - instance_52 = ALLOCATE Int - value_53 = LOAD 1 - result_init_54 = CALL Int_init - left_50 = GetAttr position value - right_51 = GetAttr instance_52 value - op_49 = left_50 + right_51 - result_48 = ALLOCATE Int - result_init_55 = CALL Int_init - result_47 = VCALL CellularAutomaton south - result_13 = result_47 - GOTO label_38 - LABEL label_37 - internal_56 = LOAD s_3 - instance_57 = ALLOCATE String - result_init_58 = CALL String_init - result_13 = instance_57 - LABEL label_38 - result_0 = result_13 - GOTO label_39 - LABEL label_36 - internal_59 = LOAD s_3 - instance_60 = ALLOCATE String - result_init_61 = CALL String_init - result_0 = instance_60 - LABEL label_39 - - RETURN result_0 -} -function CellularAutomaton.southwest { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL CellularAutomaton.board_size - LOCAL result_6 - LOCAL op_7 - LOCAL left_8 - LOCAL right_9 - LOCAL CellularAutomaton.columns - LOCAL result_init_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL result_18 - LOCAL op_19 - LOCAL left_20 - LOCAL right_21 - LOCAL result_22 - LOCAL op_23 - LOCAL left_24 - LOCAL right_25 - LOCAL CellularAutomaton.columns - LOCAL result_init_27 - LOCAL CellularAutomaton.columns - LOCAL result_init_29 - LOCAL result_init_30 - LOCAL result_31 - LOCAL result_32 - LOCAL op_33 - LOCAL left_34 - LOCAL right_35 - LOCAL instance_36 - LOCAL value_37 - LOCAL result_init_38 - LOCAL result_init_39 - LOCAL internal_40 - LOCAL instance_41 - LOCAL result_init_42 - LOCAL internal_43 - LOCAL instance_44 - LOCAL result_init_45 - - CellularAutomaton.board_size = GetAttr self board_size - CellularAutomaton.columns = GetAttr self columns - left_8 = GetAttr position value - right_9 = GetAttr CellularAutomaton.columns value - op_7 = left_8 + right_9 - result_6 = ALLOCATE Int - result_init_11 = CALL Int_init - left_3 = GetAttr CellularAutomaton.board_size value - right_4 = GetAttr result_6 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_12 = CALL Bool_init - IF result_1 GOTO label_40 - CellularAutomaton.columns = GetAttr self columns - left_24 = GetAttr position value - right_25 = GetAttr CellularAutomaton.columns value - op_23 = left_24 / right_25 - result_22 = ALLOCATE Int - result_init_27 = CALL Int_init - CellularAutomaton.columns = GetAttr self columns - left_20 = GetAttr result_22 value - right_21 = GetAttr CellularAutomaton.columns value - op_19 = left_20 * right_21 - result_18 = ALLOCATE Int - result_init_29 = CALL Int_init - left_16 = GetAttr result_18 value - right_17 = GetAttr position value - op_15 = left_16 = right_17 - result_14 = ALLOCATE Bool - result_init_30 = CALL Bool_init - IF result_14 GOTO label_41 - instance_36 = ALLOCATE Int - value_37 = LOAD 1 - result_init_38 = CALL Int_init - left_34 = GetAttr position value - right_35 = GetAttr instance_36 value - op_33 = left_34 - right_35 - result_32 = ALLOCATE Int - result_init_39 = CALL Int_init - result_31 = VCALL CellularAutomaton south - result_13 = result_31 - GOTO label_42 - LABEL label_41 - internal_40 = LOAD s_3 - instance_41 = ALLOCATE String - result_init_42 = CALL String_init - result_13 = instance_41 - LABEL label_42 - result_0 = result_13 - GOTO label_43 - LABEL label_40 - internal_43 = LOAD s_3 - instance_44 = ALLOCATE String - result_init_45 = CALL String_init - result_0 = instance_44 - LABEL label_43 - - RETURN result_0 -} -function CellularAutomaton.neighbors { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL result_4 - LOCAL op_5 - LOCAL left_6 - LOCAL right_7 - LOCAL result_8 - LOCAL op_9 - LOCAL left_10 - LOCAL right_11 - LOCAL result_12 - LOCAL op_13 - LOCAL left_14 - LOCAL right_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL result_20 - LOCAL op_21 - LOCAL left_22 - LOCAL right_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL result_28 - LOCAL result_29 - LOCAL op_30 - LOCAL left_31 - LOCAL right_32 - LOCAL result_33 - LOCAL internal_34 - LOCAL instance_35 - LOCAL result_init_36 - LOCAL result_init_37 - LOCAL instance_38 - LOCAL value_39 - LOCAL result_init_40 - LOCAL instance_41 - LOCAL value_42 - LOCAL result_init_43 - LOCAL result_44 - LOCAL result_45 - LOCAL op_46 - LOCAL left_47 - LOCAL right_48 - LOCAL result_49 - LOCAL internal_50 - LOCAL instance_51 - LOCAL result_init_52 - LOCAL result_init_53 - LOCAL instance_54 - LOCAL value_55 - LOCAL result_init_56 - LOCAL instance_57 - LOCAL value_58 - LOCAL result_init_59 - LOCAL result_init_60 - LOCAL result_61 - LOCAL result_62 - LOCAL op_63 - LOCAL left_64 - LOCAL right_65 - LOCAL result_66 - LOCAL internal_67 - LOCAL instance_68 - LOCAL result_init_69 - LOCAL result_init_70 - LOCAL instance_71 - LOCAL value_72 - LOCAL result_init_73 - LOCAL instance_74 - LOCAL value_75 - LOCAL result_init_76 - LOCAL result_init_77 - LOCAL result_78 - LOCAL result_79 - LOCAL op_80 - LOCAL left_81 - LOCAL right_82 - LOCAL result_83 - LOCAL internal_84 - LOCAL instance_85 - LOCAL result_init_86 - LOCAL result_init_87 - LOCAL instance_88 - LOCAL value_89 - LOCAL result_init_90 - LOCAL instance_91 - LOCAL value_92 - LOCAL result_init_93 - LOCAL result_init_94 - LOCAL result_95 - LOCAL result_96 - LOCAL op_97 - LOCAL left_98 - LOCAL right_99 - LOCAL result_100 - LOCAL internal_101 - LOCAL instance_102 - LOCAL result_init_103 - LOCAL result_init_104 - LOCAL instance_105 - LOCAL value_106 - LOCAL result_init_107 - LOCAL instance_108 - LOCAL value_109 - LOCAL result_init_110 - LOCAL result_init_111 - LOCAL result_112 - LOCAL result_113 - LOCAL op_114 - LOCAL left_115 - LOCAL right_116 - LOCAL result_117 - LOCAL internal_118 - LOCAL instance_119 - LOCAL result_init_120 - LOCAL result_init_121 - LOCAL instance_122 - LOCAL value_123 - LOCAL result_init_124 - LOCAL instance_125 - LOCAL value_126 - LOCAL result_init_127 - LOCAL result_init_128 - LOCAL result_129 - LOCAL result_130 - LOCAL op_131 - LOCAL left_132 - LOCAL right_133 - LOCAL result_134 - LOCAL internal_135 - LOCAL instance_136 - LOCAL result_init_137 - LOCAL result_init_138 - LOCAL instance_139 - LOCAL value_140 - LOCAL result_init_141 - LOCAL instance_142 - LOCAL value_143 - LOCAL result_init_144 - LOCAL result_init_145 - LOCAL result_146 - LOCAL result_147 - LOCAL op_148 - LOCAL left_149 - LOCAL right_150 - LOCAL result_151 - LOCAL internal_152 - LOCAL instance_153 - LOCAL result_init_154 - LOCAL result_init_155 - LOCAL instance_156 - LOCAL value_157 - LOCAL result_init_158 - LOCAL instance_159 - LOCAL value_160 - LOCAL result_init_161 - LOCAL result_init_162 - - result_33 = VCALL CellularAutomaton north - internal_34 = LOAD s_4 - instance_35 = ALLOCATE String - result_init_36 = CALL String_init - op_30 = CALL String_equals - result_29 = ALLOCATE Bool - result_init_37 = CALL Bool_init - IF result_29 GOTO label_44 - instance_38 = ALLOCATE Int - value_39 = LOAD 0 - result_init_40 = CALL Int_init - result_28 = instance_38 - GOTO label_45 - LABEL label_44 - instance_41 = ALLOCATE Int - value_42 = LOAD 1 - result_init_43 = CALL Int_init - result_28 = instance_41 - LABEL label_45 - result_49 = VCALL CellularAutomaton south - internal_50 = LOAD s_4 - instance_51 = ALLOCATE String - result_init_52 = CALL String_init - op_46 = CALL String_equals - result_45 = ALLOCATE Bool - result_init_53 = CALL Bool_init - IF result_45 GOTO label_46 - instance_54 = ALLOCATE Int - value_55 = LOAD 0 - result_init_56 = CALL Int_init - result_44 = instance_54 - GOTO label_47 - LABEL label_46 - instance_57 = ALLOCATE Int - value_58 = LOAD 1 - result_init_59 = CALL Int_init - result_44 = instance_57 - LABEL label_47 - left_26 = GetAttr result_28 value - right_27 = GetAttr result_44 value - op_25 = left_26 + right_27 - result_24 = ALLOCATE Int - result_init_60 = CALL Int_init - result_66 = VCALL CellularAutomaton east - internal_67 = LOAD s_4 - instance_68 = ALLOCATE String - result_init_69 = CALL String_init - op_63 = CALL String_equals - result_62 = ALLOCATE Bool - result_init_70 = CALL Bool_init - IF result_62 GOTO label_48 - instance_71 = ALLOCATE Int - value_72 = LOAD 0 - result_init_73 = CALL Int_init - result_61 = instance_71 - GOTO label_49 - LABEL label_48 - instance_74 = ALLOCATE Int - value_75 = LOAD 1 - result_init_76 = CALL Int_init - result_61 = instance_74 - LABEL label_49 - left_22 = GetAttr result_24 value - right_23 = GetAttr result_61 value - op_21 = left_22 + right_23 - result_20 = ALLOCATE Int - result_init_77 = CALL Int_init - result_83 = VCALL CellularAutomaton west - internal_84 = LOAD s_4 - instance_85 = ALLOCATE String - result_init_86 = CALL String_init - op_80 = CALL String_equals - result_79 = ALLOCATE Bool - result_init_87 = CALL Bool_init - IF result_79 GOTO label_50 - instance_88 = ALLOCATE Int - value_89 = LOAD 0 - result_init_90 = CALL Int_init - result_78 = instance_88 - GOTO label_51 - LABEL label_50 - instance_91 = ALLOCATE Int - value_92 = LOAD 1 - result_init_93 = CALL Int_init - result_78 = instance_91 - LABEL label_51 - left_18 = GetAttr result_20 value - right_19 = GetAttr result_78 value - op_17 = left_18 + right_19 - result_16 = ALLOCATE Int - result_init_94 = CALL Int_init - result_100 = VCALL CellularAutomaton northeast - internal_101 = LOAD s_4 - instance_102 = ALLOCATE String - result_init_103 = CALL String_init - op_97 = CALL String_equals - result_96 = ALLOCATE Bool - result_init_104 = CALL Bool_init - IF result_96 GOTO label_52 - instance_105 = ALLOCATE Int - value_106 = LOAD 0 - result_init_107 = CALL Int_init - result_95 = instance_105 - GOTO label_53 - LABEL label_52 - instance_108 = ALLOCATE Int - value_109 = LOAD 1 - result_init_110 = CALL Int_init - result_95 = instance_108 - LABEL label_53 - left_14 = GetAttr result_16 value - right_15 = GetAttr result_95 value - op_13 = left_14 + right_15 - result_12 = ALLOCATE Int - result_init_111 = CALL Int_init - result_117 = VCALL CellularAutomaton northwest - internal_118 = LOAD s_4 - instance_119 = ALLOCATE String - result_init_120 = CALL String_init - op_114 = CALL String_equals - result_113 = ALLOCATE Bool - result_init_121 = CALL Bool_init - IF result_113 GOTO label_54 - instance_122 = ALLOCATE Int - value_123 = LOAD 0 - result_init_124 = CALL Int_init - result_112 = instance_122 - GOTO label_55 - LABEL label_54 - instance_125 = ALLOCATE Int - value_126 = LOAD 1 - result_init_127 = CALL Int_init - result_112 = instance_125 - LABEL label_55 - left_10 = GetAttr result_12 value - right_11 = GetAttr result_112 value - op_9 = left_10 + right_11 - result_8 = ALLOCATE Int - result_init_128 = CALL Int_init - result_134 = VCALL CellularAutomaton southeast - internal_135 = LOAD s_4 - instance_136 = ALLOCATE String - result_init_137 = CALL String_init - op_131 = CALL String_equals - result_130 = ALLOCATE Bool - result_init_138 = CALL Bool_init - IF result_130 GOTO label_56 - instance_139 = ALLOCATE Int - value_140 = LOAD 0 - result_init_141 = CALL Int_init - result_129 = instance_139 - GOTO label_57 - LABEL label_56 - instance_142 = ALLOCATE Int - value_143 = LOAD 1 - result_init_144 = CALL Int_init - result_129 = instance_142 - LABEL label_57 - left_6 = GetAttr result_8 value - right_7 = GetAttr result_129 value - op_5 = left_6 + right_7 - result_4 = ALLOCATE Int - result_init_145 = CALL Int_init - result_151 = VCALL CellularAutomaton southwest - internal_152 = LOAD s_4 - instance_153 = ALLOCATE String - result_init_154 = CALL String_init - op_148 = CALL String_equals - result_147 = ALLOCATE Bool - result_init_155 = CALL Bool_init - IF result_147 GOTO label_58 - instance_156 = ALLOCATE Int - value_157 = LOAD 0 - result_init_158 = CALL Int_init - result_146 = instance_156 - GOTO label_59 - LABEL label_58 - instance_159 = ALLOCATE Int - value_160 = LOAD 1 - result_init_161 = CALL Int_init - result_146 = instance_159 - LABEL label_59 - left_2 = GetAttr result_4 value - right_3 = GetAttr result_146 value - op_1 = left_2 + right_3 - result_0 = ALLOCATE Int - result_init_162 = CALL Int_init - - RETURN result_0 -} -function CellularAutomaton.cell_at_next_evolution { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - LOCAL result_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL result_28 - LOCAL internal_29 - LOCAL instance_30 - LOCAL result_init_31 - LOCAL result_init_32 - LOCAL internal_33 - LOCAL instance_34 - LOCAL result_init_35 - LOCAL internal_36 - LOCAL instance_37 - LOCAL result_init_38 - LOCAL internal_39 - LOCAL instance_40 - LOCAL result_init_41 - - result_5 = VCALL CellularAutomaton neighbors - instance_6 = ALLOCATE Int - value_7 = LOAD 3 - result_init_8 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_1 GOTO label_60 - result_15 = VCALL CellularAutomaton neighbors - instance_16 = ALLOCATE Int - value_17 = LOAD 2 - result_init_18 = CALL Int_init - left_13 = GetAttr result_15 value - right_14 = GetAttr instance_16 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_19 = CALL Bool_init - IF result_11 GOTO label_61 - internal_20 = LOAD s_5 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - result_10 = instance_21 - GOTO label_62 - LABEL label_61 - result_28 = VCALL CellularAutomaton cell - internal_29 = LOAD s_4 - instance_30 = ALLOCATE String - result_init_31 = CALL String_init - op_25 = CALL String_equals - result_24 = ALLOCATE Bool - result_init_32 = CALL Bool_init - IF result_24 GOTO label_63 - internal_33 = LOAD s_5 - instance_34 = ALLOCATE String - result_init_35 = CALL String_init - result_23 = instance_34 - GOTO label_64 - LABEL label_63 - internal_36 = LOAD s_4 - instance_37 = ALLOCATE String - result_init_38 = CALL String_init - result_23 = instance_37 - LABEL label_64 - result_10 = result_23 - LABEL label_62 - result_0 = result_10 - GOTO label_65 - LABEL label_60 - internal_39 = LOAD s_4 - instance_40 = ALLOCATE String - result_init_41 = CALL String_init - result_0 = instance_40 - LABEL label_65 - - RETURN result_0 -} -function CellularAutomaton.evolve { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL position_3 - LOCAL result_4 - LOCAL num_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL temp_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL result_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL instance_23 - LOCAL value_24 - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL result_27 - LOCAL result_28 - LOCAL let_result_29 - LOCAL let_result_30 - LOCAL let_result_31 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - position_3 = instance_0 - result_4 = VCALL CellularAutomaton num_cells - num_5 = result_4 - instance_6 = ALLOCATE String - value_7 = LOAD empty_str - result_init_8 = CALL String_init - temp_9 = instance_6 - LABEL label_66 - left_13 = GetAttr position_3 value - right_14 = GetAttr num_5 value - op_12 = left_13 < right_14 - result_11 = ALLOCATE Bool - result_init_15 = CALL Bool_init - IF result_11 GOTO label_67 - GOTO label_68 - LABEL label_67 - result_17 = VCALL CellularAutomaton cell_at_next_evolution - result_16 = VCALL String concat - temp_9 = result_16 - instance_23 = ALLOCATE Int - value_24 = LOAD 1 - result_init_25 = CALL Int_init - left_21 = GetAttr position_3 value - right_22 = GetAttr instance_23 value - op_20 = left_21 + right_22 - result_19 = ALLOCATE Int - result_init_26 = CALL Int_init - position_3 = result_19 - GOTO label_66 - LABEL label_68 - result_10 = LOAD VOID - SetAttr self population_map temp_9 - let_result_29 = self - let_result_30 = let_result_29 - let_result_31 = let_result_30 - - RETURN let_result_31 -} -function CellularAutomaton.option { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL num_3 - LOCAL result_4 - LOCAL internal_5 - LOCAL instance_6 - LOCAL result_init_7 - LOCAL result_8 - LOCAL internal_9 - LOCAL instance_10 - LOCAL result_init_11 - LOCAL result_12 - LOCAL internal_13 - LOCAL instance_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL internal_17 - LOCAL instance_18 - LOCAL result_init_19 - LOCAL result_20 - LOCAL internal_21 - LOCAL instance_22 - LOCAL result_init_23 - LOCAL result_24 - LOCAL internal_25 - LOCAL instance_26 - LOCAL result_init_27 - LOCAL result_28 - LOCAL internal_29 - LOCAL instance_30 - LOCAL result_init_31 - LOCAL result_32 - LOCAL internal_33 - LOCAL instance_34 - LOCAL result_init_35 - LOCAL result_36 - LOCAL internal_37 - LOCAL instance_38 - LOCAL result_init_39 - LOCAL result_40 - LOCAL internal_41 - LOCAL instance_42 - LOCAL result_init_43 - LOCAL result_44 - LOCAL internal_45 - LOCAL instance_46 - LOCAL result_init_47 - LOCAL result_48 - LOCAL internal_49 - LOCAL instance_50 - LOCAL result_init_51 - LOCAL result_52 - LOCAL internal_53 - LOCAL instance_54 - LOCAL result_init_55 - LOCAL result_56 - LOCAL internal_57 - LOCAL instance_58 - LOCAL result_init_59 - LOCAL result_60 - LOCAL internal_61 - LOCAL instance_62 - LOCAL result_init_63 - LOCAL result_64 - LOCAL internal_65 - LOCAL instance_66 - LOCAL result_init_67 - LOCAL result_68 - LOCAL internal_69 - LOCAL instance_70 - LOCAL result_init_71 - LOCAL result_72 - LOCAL internal_73 - LOCAL instance_74 - LOCAL result_init_75 - LOCAL result_76 - LOCAL internal_77 - LOCAL instance_78 - LOCAL result_init_79 - LOCAL result_80 - LOCAL internal_81 - LOCAL instance_82 - LOCAL result_init_83 - LOCAL result_84 - LOCAL internal_85 - LOCAL instance_86 - LOCAL result_init_87 - LOCAL result_88 - LOCAL internal_89 - LOCAL instance_90 - LOCAL result_init_91 - LOCAL result_92 - LOCAL internal_93 - LOCAL instance_94 - LOCAL result_init_95 - LOCAL result_96 - LOCAL result_97 - LOCAL result_98 - LOCAL internal_99 - LOCAL instance_100 - LOCAL result_init_101 - LOCAL result_102 - LOCAL result_103 - LOCAL op_104 - LOCAL left_105 - LOCAL right_106 - LOCAL instance_107 - LOCAL value_108 - LOCAL result_init_109 - LOCAL result_init_110 - LOCAL result_111 - LOCAL result_112 - LOCAL op_113 - LOCAL left_114 - LOCAL right_115 - LOCAL instance_116 - LOCAL value_117 - LOCAL result_init_118 - LOCAL result_init_119 - LOCAL result_120 - LOCAL result_121 - LOCAL op_122 - LOCAL left_123 - LOCAL right_124 - LOCAL instance_125 - LOCAL value_126 - LOCAL result_init_127 - LOCAL result_init_128 - LOCAL result_129 - LOCAL result_130 - LOCAL op_131 - LOCAL left_132 - LOCAL right_133 - LOCAL instance_134 - LOCAL value_135 - LOCAL result_init_136 - LOCAL result_init_137 - LOCAL result_138 - LOCAL result_139 - LOCAL op_140 - LOCAL left_141 - LOCAL right_142 - LOCAL instance_143 - LOCAL value_144 - LOCAL result_init_145 - LOCAL result_init_146 - LOCAL result_147 - LOCAL result_148 - LOCAL op_149 - LOCAL left_150 - LOCAL right_151 - LOCAL instance_152 - LOCAL value_153 - LOCAL result_init_154 - LOCAL result_init_155 - LOCAL result_156 - LOCAL result_157 - LOCAL op_158 - LOCAL left_159 - LOCAL right_160 - LOCAL instance_161 - LOCAL value_162 - LOCAL result_init_163 - LOCAL result_init_164 - LOCAL result_165 - LOCAL result_166 - LOCAL op_167 - LOCAL left_168 - LOCAL right_169 - LOCAL instance_170 - LOCAL value_171 - LOCAL result_init_172 - LOCAL result_init_173 - LOCAL result_174 - LOCAL result_175 - LOCAL op_176 - LOCAL left_177 - LOCAL right_178 - LOCAL instance_179 - LOCAL value_180 - LOCAL result_init_181 - LOCAL result_init_182 - LOCAL result_183 - LOCAL result_184 - LOCAL op_185 - LOCAL left_186 - LOCAL right_187 - LOCAL instance_188 - LOCAL value_189 - LOCAL result_init_190 - LOCAL result_init_191 - LOCAL result_192 - LOCAL result_193 - LOCAL op_194 - LOCAL left_195 - LOCAL right_196 - LOCAL instance_197 - LOCAL value_198 - LOCAL result_init_199 - LOCAL result_init_200 - LOCAL result_201 - LOCAL result_202 - LOCAL op_203 - LOCAL left_204 - LOCAL right_205 - LOCAL instance_206 - LOCAL value_207 - LOCAL result_init_208 - LOCAL result_init_209 - LOCAL result_210 - LOCAL result_211 - LOCAL op_212 - LOCAL left_213 - LOCAL right_214 - LOCAL instance_215 - LOCAL value_216 - LOCAL result_init_217 - LOCAL result_init_218 - LOCAL result_219 - LOCAL result_220 - LOCAL op_221 - LOCAL left_222 - LOCAL right_223 - LOCAL instance_224 - LOCAL value_225 - LOCAL result_init_226 - LOCAL result_init_227 - LOCAL result_228 - LOCAL result_229 - LOCAL op_230 - LOCAL left_231 - LOCAL right_232 - LOCAL instance_233 - LOCAL value_234 - LOCAL result_init_235 - LOCAL result_init_236 - LOCAL result_237 - LOCAL result_238 - LOCAL op_239 - LOCAL left_240 - LOCAL right_241 - LOCAL instance_242 - LOCAL value_243 - LOCAL result_init_244 - LOCAL result_init_245 - LOCAL result_246 - LOCAL result_247 - LOCAL op_248 - LOCAL left_249 - LOCAL right_250 - LOCAL instance_251 - LOCAL value_252 - LOCAL result_init_253 - LOCAL result_init_254 - LOCAL result_255 - LOCAL result_256 - LOCAL op_257 - LOCAL left_258 - LOCAL right_259 - LOCAL instance_260 - LOCAL value_261 - LOCAL result_init_262 - LOCAL result_init_263 - LOCAL result_264 - LOCAL result_265 - LOCAL op_266 - LOCAL left_267 - LOCAL right_268 - LOCAL instance_269 - LOCAL value_270 - LOCAL result_init_271 - LOCAL result_init_272 - LOCAL result_273 - LOCAL result_274 - LOCAL op_275 - LOCAL left_276 - LOCAL right_277 - LOCAL instance_278 - LOCAL value_279 - LOCAL result_init_280 - LOCAL result_init_281 - LOCAL result_282 - LOCAL result_283 - LOCAL op_284 - LOCAL left_285 - LOCAL right_286 - LOCAL instance_287 - LOCAL value_288 - LOCAL result_init_289 - LOCAL result_init_290 - LOCAL internal_291 - LOCAL instance_292 - LOCAL result_init_293 - LOCAL internal_294 - LOCAL instance_295 - LOCAL result_init_296 - LOCAL internal_297 - LOCAL instance_298 - LOCAL result_init_299 - LOCAL internal_300 - LOCAL instance_301 - LOCAL result_init_302 - LOCAL internal_303 - LOCAL instance_304 - LOCAL result_init_305 - LOCAL internal_306 - LOCAL instance_307 - LOCAL result_init_308 - LOCAL internal_309 - LOCAL instance_310 - LOCAL result_init_311 - LOCAL internal_312 - LOCAL instance_313 - LOCAL result_init_314 - LOCAL internal_315 - LOCAL instance_316 - LOCAL result_init_317 - LOCAL internal_318 - LOCAL instance_319 - LOCAL result_init_320 - LOCAL internal_321 - LOCAL instance_322 - LOCAL result_init_323 - LOCAL internal_324 - LOCAL instance_325 - LOCAL result_init_326 - LOCAL internal_327 - LOCAL instance_328 - LOCAL result_init_329 - LOCAL internal_330 - LOCAL instance_331 - LOCAL result_init_332 - LOCAL internal_333 - LOCAL instance_334 - LOCAL result_init_335 - LOCAL internal_336 - LOCAL instance_337 - LOCAL result_init_338 - LOCAL internal_339 - LOCAL instance_340 - LOCAL result_init_341 - LOCAL internal_342 - LOCAL instance_343 - LOCAL result_init_344 - LOCAL internal_345 - LOCAL instance_346 - LOCAL result_init_347 - LOCAL internal_348 - LOCAL instance_349 - LOCAL result_init_350 - LOCAL internal_351 - LOCAL instance_352 - LOCAL result_init_353 - LOCAL internal_354 - LOCAL instance_355 - LOCAL result_init_356 - LOCAL let_result_357 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - num_3 = instance_0 - internal_5 = LOAD s_6 - instance_6 = ALLOCATE String - result_init_7 = CALL String_init - result_4 = VCALL CellularAutomaton out_string - internal_9 = LOAD s_7 - instance_10 = ALLOCATE String - result_init_11 = CALL String_init - result_8 = VCALL CellularAutomaton out_string - internal_13 = LOAD s_8 - instance_14 = ALLOCATE String - result_init_15 = CALL String_init - result_12 = VCALL CellularAutomaton out_string - internal_17 = LOAD s_9 - instance_18 = ALLOCATE String - result_init_19 = CALL String_init - result_16 = VCALL CellularAutomaton out_string - internal_21 = LOAD s_10 - instance_22 = ALLOCATE String - result_init_23 = CALL String_init - result_20 = VCALL CellularAutomaton out_string - internal_25 = LOAD s_11 - instance_26 = ALLOCATE String - result_init_27 = CALL String_init - result_24 = VCALL CellularAutomaton out_string - internal_29 = LOAD s_12 - instance_30 = ALLOCATE String - result_init_31 = CALL String_init - result_28 = VCALL CellularAutomaton out_string - internal_33 = LOAD s_13 - instance_34 = ALLOCATE String - result_init_35 = CALL String_init - result_32 = VCALL CellularAutomaton out_string - internal_37 = LOAD s_14 - instance_38 = ALLOCATE String - result_init_39 = CALL String_init - result_36 = VCALL CellularAutomaton out_string - internal_41 = LOAD s_15 - instance_42 = ALLOCATE String - result_init_43 = CALL String_init - result_40 = VCALL CellularAutomaton out_string - internal_45 = LOAD s_16 - instance_46 = ALLOCATE String - result_init_47 = CALL String_init - result_44 = VCALL CellularAutomaton out_string - internal_49 = LOAD s_17 - instance_50 = ALLOCATE String - result_init_51 = CALL String_init - result_48 = VCALL CellularAutomaton out_string - internal_53 = LOAD s_18 - instance_54 = ALLOCATE String - result_init_55 = CALL String_init - result_52 = VCALL CellularAutomaton out_string - internal_57 = LOAD s_19 - instance_58 = ALLOCATE String - result_init_59 = CALL String_init - result_56 = VCALL CellularAutomaton out_string - internal_61 = LOAD s_20 - instance_62 = ALLOCATE String - result_init_63 = CALL String_init - result_60 = VCALL CellularAutomaton out_string - internal_65 = LOAD s_21 - instance_66 = ALLOCATE String - result_init_67 = CALL String_init - result_64 = VCALL CellularAutomaton out_string - internal_69 = LOAD s_22 - instance_70 = ALLOCATE String - result_init_71 = CALL String_init - result_68 = VCALL CellularAutomaton out_string - internal_73 = LOAD s_23 - instance_74 = ALLOCATE String - result_init_75 = CALL String_init - result_72 = VCALL CellularAutomaton out_string - internal_77 = LOAD s_24 - instance_78 = ALLOCATE String - result_init_79 = CALL String_init - result_76 = VCALL CellularAutomaton out_string - internal_81 = LOAD s_25 - instance_82 = ALLOCATE String - result_init_83 = CALL String_init - result_80 = VCALL CellularAutomaton out_string - internal_85 = LOAD s_26 - instance_86 = ALLOCATE String - result_init_87 = CALL String_init - result_84 = VCALL CellularAutomaton out_string - internal_89 = LOAD s_27 - instance_90 = ALLOCATE String - result_init_91 = CALL String_init - result_88 = VCALL CellularAutomaton out_string - internal_93 = LOAD s_28 - instance_94 = ALLOCATE String - result_init_95 = CALL String_init - result_92 = VCALL CellularAutomaton out_string - result_96 = VCALL CellularAutomaton in_int - num_3 = result_96 - internal_99 = LOAD s_1 - instance_100 = ALLOCATE String - result_init_101 = CALL String_init - result_98 = VCALL CellularAutomaton out_string - instance_107 = ALLOCATE Int - value_108 = LOAD 1 - result_init_109 = CALL Int_init - left_105 = GetAttr num_3 value - right_106 = GetAttr instance_107 value - op_104 = left_105 = right_106 - result_103 = ALLOCATE Bool - result_init_110 = CALL Bool_init - IF result_103 GOTO label_69 - instance_116 = ALLOCATE Int - value_117 = LOAD 2 - result_init_118 = CALL Int_init - left_114 = GetAttr num_3 value - right_115 = GetAttr instance_116 value - op_113 = left_114 = right_115 - result_112 = ALLOCATE Bool - result_init_119 = CALL Bool_init - IF result_112 GOTO label_70 - instance_125 = ALLOCATE Int - value_126 = LOAD 3 - result_init_127 = CALL Int_init - left_123 = GetAttr num_3 value - right_124 = GetAttr instance_125 value - op_122 = left_123 = right_124 - result_121 = ALLOCATE Bool - result_init_128 = CALL Bool_init - IF result_121 GOTO label_71 - instance_134 = ALLOCATE Int - value_135 = LOAD 4 - result_init_136 = CALL Int_init - left_132 = GetAttr num_3 value - right_133 = GetAttr instance_134 value - op_131 = left_132 = right_133 - result_130 = ALLOCATE Bool - result_init_137 = CALL Bool_init - IF result_130 GOTO label_72 - instance_143 = ALLOCATE Int - value_144 = LOAD 5 - result_init_145 = CALL Int_init - left_141 = GetAttr num_3 value - right_142 = GetAttr instance_143 value - op_140 = left_141 = right_142 - result_139 = ALLOCATE Bool - result_init_146 = CALL Bool_init - IF result_139 GOTO label_73 - instance_152 = ALLOCATE Int - value_153 = LOAD 6 - result_init_154 = CALL Int_init - left_150 = GetAttr num_3 value - right_151 = GetAttr instance_152 value - op_149 = left_150 = right_151 - result_148 = ALLOCATE Bool - result_init_155 = CALL Bool_init - IF result_148 GOTO label_74 - instance_161 = ALLOCATE Int - value_162 = LOAD 7 - result_init_163 = CALL Int_init - left_159 = GetAttr num_3 value - right_160 = GetAttr instance_161 value - op_158 = left_159 = right_160 - result_157 = ALLOCATE Bool - result_init_164 = CALL Bool_init - IF result_157 GOTO label_75 - instance_170 = ALLOCATE Int - value_171 = LOAD 8 - result_init_172 = CALL Int_init - left_168 = GetAttr num_3 value - right_169 = GetAttr instance_170 value - op_167 = left_168 = right_169 - result_166 = ALLOCATE Bool - result_init_173 = CALL Bool_init - IF result_166 GOTO label_76 - instance_179 = ALLOCATE Int - value_180 = LOAD 9 - result_init_181 = CALL Int_init - left_177 = GetAttr num_3 value - right_178 = GetAttr instance_179 value - op_176 = left_177 = right_178 - result_175 = ALLOCATE Bool - result_init_182 = CALL Bool_init - IF result_175 GOTO label_77 - instance_188 = ALLOCATE Int - value_189 = LOAD 10 - result_init_190 = CALL Int_init - left_186 = GetAttr num_3 value - right_187 = GetAttr instance_188 value - op_185 = left_186 = right_187 - result_184 = ALLOCATE Bool - result_init_191 = CALL Bool_init - IF result_184 GOTO label_78 - instance_197 = ALLOCATE Int - value_198 = LOAD 11 - result_init_199 = CALL Int_init - left_195 = GetAttr num_3 value - right_196 = GetAttr instance_197 value - op_194 = left_195 = right_196 - result_193 = ALLOCATE Bool - result_init_200 = CALL Bool_init - IF result_193 GOTO label_79 - instance_206 = ALLOCATE Int - value_207 = LOAD 12 - result_init_208 = CALL Int_init - left_204 = GetAttr num_3 value - right_205 = GetAttr instance_206 value - op_203 = left_204 = right_205 - result_202 = ALLOCATE Bool - result_init_209 = CALL Bool_init - IF result_202 GOTO label_80 - instance_215 = ALLOCATE Int - value_216 = LOAD 13 - result_init_217 = CALL Int_init - left_213 = GetAttr num_3 value - right_214 = GetAttr instance_215 value - op_212 = left_213 = right_214 - result_211 = ALLOCATE Bool - result_init_218 = CALL Bool_init - IF result_211 GOTO label_81 - instance_224 = ALLOCATE Int - value_225 = LOAD 14 - result_init_226 = CALL Int_init - left_222 = GetAttr num_3 value - right_223 = GetAttr instance_224 value - op_221 = left_222 = right_223 - result_220 = ALLOCATE Bool - result_init_227 = CALL Bool_init - IF result_220 GOTO label_82 - instance_233 = ALLOCATE Int - value_234 = LOAD 15 - result_init_235 = CALL Int_init - left_231 = GetAttr num_3 value - right_232 = GetAttr instance_233 value - op_230 = left_231 = right_232 - result_229 = ALLOCATE Bool - result_init_236 = CALL Bool_init - IF result_229 GOTO label_83 - instance_242 = ALLOCATE Int - value_243 = LOAD 16 - result_init_244 = CALL Int_init - left_240 = GetAttr num_3 value - right_241 = GetAttr instance_242 value - op_239 = left_240 = right_241 - result_238 = ALLOCATE Bool - result_init_245 = CALL Bool_init - IF result_238 GOTO label_84 - instance_251 = ALLOCATE Int - value_252 = LOAD 17 - result_init_253 = CALL Int_init - left_249 = GetAttr num_3 value - right_250 = GetAttr instance_251 value - op_248 = left_249 = right_250 - result_247 = ALLOCATE Bool - result_init_254 = CALL Bool_init - IF result_247 GOTO label_85 - instance_260 = ALLOCATE Int - value_261 = LOAD 18 - result_init_262 = CALL Int_init - left_258 = GetAttr num_3 value - right_259 = GetAttr instance_260 value - op_257 = left_258 = right_259 - result_256 = ALLOCATE Bool - result_init_263 = CALL Bool_init - IF result_256 GOTO label_86 - instance_269 = ALLOCATE Int - value_270 = LOAD 19 - result_init_271 = CALL Int_init - left_267 = GetAttr num_3 value - right_268 = GetAttr instance_269 value - op_266 = left_267 = right_268 - result_265 = ALLOCATE Bool - result_init_272 = CALL Bool_init - IF result_265 GOTO label_87 - instance_278 = ALLOCATE Int - value_279 = LOAD 20 - result_init_280 = CALL Int_init - left_276 = GetAttr num_3 value - right_277 = GetAttr instance_278 value - op_275 = left_276 = right_277 - result_274 = ALLOCATE Bool - result_init_281 = CALL Bool_init - IF result_274 GOTO label_88 - instance_287 = ALLOCATE Int - value_288 = LOAD 21 - result_init_289 = CALL Int_init - left_285 = GetAttr num_3 value - right_286 = GetAttr instance_287 value - op_284 = left_285 = right_286 - result_283 = ALLOCATE Bool - result_init_290 = CALL Bool_init - IF result_283 GOTO label_89 - internal_291 = LOAD s_29 - instance_292 = ALLOCATE String - result_init_293 = CALL String_init - result_282 = instance_292 - GOTO label_90 - LABEL label_89 - internal_294 = LOAD s_30 - instance_295 = ALLOCATE String - result_init_296 = CALL String_init - result_282 = instance_295 - LABEL label_90 - result_273 = result_282 - GOTO label_91 - LABEL label_88 - internal_297 = LOAD s_31 - instance_298 = ALLOCATE String - result_init_299 = CALL String_init - result_273 = instance_298 - LABEL label_91 - result_264 = result_273 - GOTO label_92 - LABEL label_87 - internal_300 = LOAD s_32 - instance_301 = ALLOCATE String - result_init_302 = CALL String_init - result_264 = instance_301 - LABEL label_92 - result_255 = result_264 - GOTO label_93 - LABEL label_86 - internal_303 = LOAD s_33 - instance_304 = ALLOCATE String - result_init_305 = CALL String_init - result_255 = instance_304 - LABEL label_93 - result_246 = result_255 - GOTO label_94 - LABEL label_85 - internal_306 = LOAD s_34 - instance_307 = ALLOCATE String - result_init_308 = CALL String_init - result_246 = instance_307 - LABEL label_94 - result_237 = result_246 - GOTO label_95 - LABEL label_84 - internal_309 = LOAD s_35 - instance_310 = ALLOCATE String - result_init_311 = CALL String_init - result_237 = instance_310 - LABEL label_95 - result_228 = result_237 - GOTO label_96 - LABEL label_83 - internal_312 = LOAD s_36 - instance_313 = ALLOCATE String - result_init_314 = CALL String_init - result_228 = instance_313 - LABEL label_96 - result_219 = result_228 - GOTO label_97 - LABEL label_82 - internal_315 = LOAD s_37 - instance_316 = ALLOCATE String - result_init_317 = CALL String_init - result_219 = instance_316 - LABEL label_97 - result_210 = result_219 - GOTO label_98 - LABEL label_81 - internal_318 = LOAD s_38 - instance_319 = ALLOCATE String - result_init_320 = CALL String_init - result_210 = instance_319 - LABEL label_98 - result_201 = result_210 - GOTO label_99 - LABEL label_80 - internal_321 = LOAD s_39 - instance_322 = ALLOCATE String - result_init_323 = CALL String_init - result_201 = instance_322 - LABEL label_99 - result_192 = result_201 - GOTO label_100 - LABEL label_79 - internal_324 = LOAD s_40 - instance_325 = ALLOCATE String - result_init_326 = CALL String_init - result_192 = instance_325 - LABEL label_100 - result_183 = result_192 - GOTO label_101 - LABEL label_78 - internal_327 = LOAD s_41 - instance_328 = ALLOCATE String - result_init_329 = CALL String_init - result_183 = instance_328 - LABEL label_101 - result_174 = result_183 - GOTO label_102 - LABEL label_77 - internal_330 = LOAD s_42 - instance_331 = ALLOCATE String - result_init_332 = CALL String_init - result_174 = instance_331 - LABEL label_102 - result_165 = result_174 - GOTO label_103 - LABEL label_76 - internal_333 = LOAD s_43 - instance_334 = ALLOCATE String - result_init_335 = CALL String_init - result_165 = instance_334 - LABEL label_103 - result_156 = result_165 - GOTO label_104 - LABEL label_75 - internal_336 = LOAD s_44 - instance_337 = ALLOCATE String - result_init_338 = CALL String_init - result_156 = instance_337 - LABEL label_104 - result_147 = result_156 - GOTO label_105 - LABEL label_74 - internal_339 = LOAD s_45 - instance_340 = ALLOCATE String - result_init_341 = CALL String_init - result_147 = instance_340 - LABEL label_105 - result_138 = result_147 - GOTO label_106 - LABEL label_73 - internal_342 = LOAD s_46 - instance_343 = ALLOCATE String - result_init_344 = CALL String_init - result_138 = instance_343 - LABEL label_106 - result_129 = result_138 - GOTO label_107 - LABEL label_72 - internal_345 = LOAD s_47 - instance_346 = ALLOCATE String - result_init_347 = CALL String_init - result_129 = instance_346 - LABEL label_107 - result_120 = result_129 - GOTO label_108 - LABEL label_71 - internal_348 = LOAD s_48 - instance_349 = ALLOCATE String - result_init_350 = CALL String_init - result_120 = instance_349 - LABEL label_108 - result_111 = result_120 - GOTO label_109 - LABEL label_70 - internal_351 = LOAD s_49 - instance_352 = ALLOCATE String - result_init_353 = CALL String_init - result_111 = instance_352 - LABEL label_109 - result_102 = result_111 - GOTO label_110 - LABEL label_69 - internal_354 = LOAD s_50 - instance_355 = ALLOCATE String - result_init_356 = CALL String_init - result_102 = instance_355 - LABEL label_110 - let_result_357 = result_102 - - RETURN let_result_357 -} -function CellularAutomaton.prompt { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL ans_3 - LOCAL result_4 - LOCAL internal_5 - LOCAL instance_6 - LOCAL result_init_7 - LOCAL result_8 - LOCAL internal_9 - LOCAL instance_10 - LOCAL result_init_11 - LOCAL result_12 - LOCAL result_13 - LOCAL result_14 - LOCAL internal_15 - LOCAL instance_16 - LOCAL result_init_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL internal_23 - LOCAL instance_24 - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL instance_27 - LOCAL value_28 - LOCAL result_init_29 - LOCAL instance_30 - LOCAL value_31 - LOCAL result_init_32 - LOCAL let_result_33 - - instance_0 = ALLOCATE String - value_1 = LOAD empty_str - result_init_2 = CALL String_init - ans_3 = instance_0 - internal_5 = LOAD s_51 - instance_6 = ALLOCATE String - result_init_7 = CALL String_init - result_4 = VCALL CellularAutomaton out_string - internal_9 = LOAD s_52 - instance_10 = ALLOCATE String - result_init_11 = CALL String_init - result_8 = VCALL CellularAutomaton out_string - result_12 = VCALL CellularAutomaton in_string - ans_3 = result_12 - internal_15 = LOAD s_1 - instance_16 = ALLOCATE String - result_init_17 = CALL String_init - result_14 = VCALL CellularAutomaton out_string - internal_23 = LOAD s_53 - instance_24 = ALLOCATE String - result_init_25 = CALL String_init - op_20 = CALL String_equals - result_19 = ALLOCATE Bool - result_init_26 = CALL Bool_init - IF result_19 GOTO label_111 - instance_27 = ALLOCATE Bool - value_28 = LOAD 1 - result_init_29 = CALL Bool_init - result_18 = instance_27 - GOTO label_112 - LABEL label_111 - instance_30 = ALLOCATE Bool - value_31 = LOAD 0 - result_init_32 = CALL Bool_init - result_18 = instance_30 - LABEL label_112 - let_result_33 = result_18 - - RETURN let_result_33 -} -function CellularAutomaton.prompt2 { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL ans_3 - LOCAL result_4 - LOCAL internal_5 - LOCAL instance_6 - LOCAL result_init_7 - LOCAL result_8 - LOCAL internal_9 - LOCAL instance_10 - LOCAL result_init_11 - LOCAL result_12 - LOCAL internal_13 - LOCAL instance_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL result_17 - LOCAL result_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL internal_23 - LOCAL instance_24 - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL instance_27 - LOCAL value_28 - LOCAL result_init_29 - LOCAL instance_30 - LOCAL value_31 - LOCAL result_init_32 - LOCAL let_result_33 - - instance_0 = ALLOCATE String - value_1 = LOAD empty_str - result_init_2 = CALL String_init - ans_3 = instance_0 - internal_5 = LOAD s_54 - instance_6 = ALLOCATE String - result_init_7 = CALL String_init - result_4 = VCALL CellularAutomaton out_string - internal_9 = LOAD s_55 - instance_10 = ALLOCATE String - result_init_11 = CALL String_init - result_8 = VCALL CellularAutomaton out_string - internal_13 = LOAD s_56 - instance_14 = ALLOCATE String - result_init_15 = CALL String_init - result_12 = VCALL CellularAutomaton out_string - result_16 = VCALL CellularAutomaton in_string - ans_3 = result_16 - internal_23 = LOAD s_57 - instance_24 = ALLOCATE String - result_init_25 = CALL String_init - op_20 = CALL String_equals - result_19 = ALLOCATE Bool - result_init_26 = CALL Bool_init - IF result_19 GOTO label_113 - instance_27 = ALLOCATE Bool - value_28 = LOAD 0 - result_init_29 = CALL Bool_init - result_18 = instance_27 - GOTO label_114 - LABEL label_113 - instance_30 = ALLOCATE Bool - value_31 = LOAD 1 - result_init_32 = CALL Bool_init - result_18 = instance_30 - LABEL label_114 - let_result_33 = result_18 - - RETURN let_result_33 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL CellularAutomaton_init - - RETURN - SetAttr self cells None -} -function Main.main { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL continue_3 - LOCAL instance_4 - LOCAL value_5 - LOCAL result_init_6 - LOCAL choice_7 - LOCAL result_8 - LOCAL internal_9 - LOCAL instance_10 - LOCAL result_init_11 - LOCAL result_12 - LOCAL internal_13 - LOCAL instance_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL result_17 - LOCAL instance_18 - LOCAL value_19 - LOCAL result_init_20 - LOCAL result_21 - LOCAL result_22 - LOCAL result_23 - LOCAL result_24 - LOCAL result_25 - LOCAL init_26 - LOCAL result_27 - LOCAL result_28 - LOCAL Main.cells - LOCAL result_30 - LOCAL result_31 - LOCAL result_32 - LOCAL instance_33 - LOCAL value_34 - LOCAL result_init_35 - LOCAL result_36 - LOCAL result_37 - LOCAL Main.cells - LOCAL result_39 - LOCAL Main.cells - LOCAL let_result_41 - LOCAL let_result_42 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - continue_3 = instance_0 - instance_4 = ALLOCATE String - value_5 = LOAD empty_str - result_init_6 = CALL String_init - choice_7 = instance_4 - internal_9 = LOAD s_58 - instance_10 = ALLOCATE String - result_init_11 = CALL String_init - result_8 = VCALL Main out_string - internal_13 = LOAD s_59 - instance_14 = ALLOCATE String - result_init_15 = CALL String_init - result_12 = VCALL Main out_string - LABEL label_115 - result_17 = VCALL Main prompt2 - IF result_17 GOTO label_116 - GOTO label_117 - LABEL label_116 - instance_18 = ALLOCATE Bool - value_19 = LOAD 1 - result_init_20 = CALL Bool_init - continue_3 = instance_18 - result_22 = VCALL Main option - choice_7 = result_22 - result_25 = ALLOCATE CellularAutomaton - init_26 = CALL CellularAutomaton_init - result_24 = VCALL CellularAutomaton init - SetAttr self cells result_24 - Main.cells = GetAttr self cells - result_28 = VCALL CellularAutomaton print - LABEL label_118 - IF continue_3 GOTO label_119 - GOTO label_120 - LABEL label_119 - result_32 = VCALL Main prompt - IF result_32 GOTO label_121 - instance_33 = ALLOCATE Bool - value_34 = LOAD 0 - result_init_35 = CALL Bool_init - continue_3 = instance_33 - result_31 = instance_33 - GOTO label_122 - LABEL label_121 - Main.cells = GetAttr self cells - result_37 = VCALL CellularAutomaton evolve - Main.cells = GetAttr self cells - result_39 = VCALL CellularAutomaton print - result_31 = result_39 - LABEL label_122 - GOTO label_118 - LABEL label_120 - result_30 = LOAD VOID - GOTO label_115 - LABEL label_117 - result_16 = LOAD VOID - let_result_41 = self - let_result_42 = let_result_41 - - RETURN let_result_42 -} \ No newline at end of file diff --git a/tests/codegen/life_test.cil b/tests/codegen/life_test.cil deleted file mode 100644 index 6413b964..00000000 --- a/tests/codegen/life_test.cil +++ /dev/null @@ -1,3187 +0,0 @@ - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Board_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - LOCAL instance_4 - LOCAL value_5 - LOCAL result_init_6 - LOCAL instance_7 - LOCAL value_8 - LOCAL result_init_9 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self rows instance_1 - instance_4 = ALLOCATE Int - value_5 = LOAD 0 - result_init_6 = CALL Int_init - SetAttr self columns instance_4 - instance_7 = ALLOCATE Int - value_8 = LOAD 0 - result_init_9 = CALL Int_init - SetAttr self board_size instance_7 -} -function Board.size_of_board { - PARAM self - PARAM initial - - LOCAL result_0 - - result_0 = VCALL String length - - RETURN result_0 -} -function Board.board_init { - PARAM self - PARAM start - - LOCAL result_0 - LOCAL size_1 - LOCAL result_2 - LOCAL result_3 - LOCAL op_4 - LOCAL left_5 - LOCAL right_6 - LOCAL instance_7 - LOCAL value_8 - LOCAL result_init_9 - LOCAL result_init_10 - LOCAL result_11 - LOCAL result_12 - LOCAL op_13 - LOCAL left_14 - LOCAL right_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL result_20 - LOCAL result_21 - LOCAL op_22 - LOCAL left_23 - LOCAL right_24 - LOCAL instance_25 - LOCAL value_26 - LOCAL result_init_27 - LOCAL result_init_28 - LOCAL result_29 - LOCAL result_30 - LOCAL op_31 - LOCAL left_32 - LOCAL right_33 - LOCAL instance_34 - LOCAL value_35 - LOCAL result_init_36 - LOCAL result_init_37 - LOCAL result_38 - LOCAL result_39 - LOCAL op_40 - LOCAL left_41 - LOCAL right_42 - LOCAL instance_43 - LOCAL value_44 - LOCAL result_init_45 - LOCAL result_init_46 - LOCAL result_47 - LOCAL result_48 - LOCAL op_49 - LOCAL left_50 - LOCAL right_51 - LOCAL instance_52 - LOCAL value_53 - LOCAL result_init_54 - LOCAL result_init_55 - LOCAL instance_56 - LOCAL value_57 - LOCAL result_init_58 - LOCAL result_59 - LOCAL instance_60 - LOCAL value_61 - LOCAL result_init_62 - LOCAL result_63 - LOCAL result_64 - LOCAL instance_65 - LOCAL value_66 - LOCAL result_init_67 - LOCAL result_68 - LOCAL instance_69 - LOCAL value_70 - LOCAL result_init_71 - LOCAL result_72 - LOCAL result_73 - LOCAL instance_74 - LOCAL value_75 - LOCAL result_init_76 - LOCAL result_77 - LOCAL instance_78 - LOCAL value_79 - LOCAL result_init_80 - LOCAL result_81 - LOCAL result_82 - LOCAL instance_83 - LOCAL value_84 - LOCAL result_init_85 - LOCAL result_86 - LOCAL instance_87 - LOCAL value_88 - LOCAL result_init_89 - LOCAL result_90 - LOCAL result_91 - LOCAL instance_92 - LOCAL value_93 - LOCAL result_init_94 - LOCAL result_95 - LOCAL instance_96 - LOCAL value_97 - LOCAL result_init_98 - LOCAL result_99 - LOCAL result_100 - LOCAL instance_101 - LOCAL value_102 - LOCAL result_init_103 - LOCAL result_104 - LOCAL instance_105 - LOCAL value_106 - LOCAL result_init_107 - LOCAL result_108 - LOCAL result_109 - LOCAL instance_110 - LOCAL value_111 - LOCAL result_init_112 - LOCAL result_113 - LOCAL instance_114 - LOCAL value_115 - LOCAL result_init_116 - LOCAL result_117 - LOCAL result_118 - LOCAL let_result_119 - - result_0 = VCALL Board size_of_board - size_1 = result_0 - instance_7 = ALLOCATE Int - value_8 = LOAD 15 - result_init_9 = CALL Int_init - left_5 = GetAttr size_1 value - right_6 = GetAttr instance_7 value - op_4 = left_5 = right_6 - result_3 = ALLOCATE Bool - result_init_10 = CALL Bool_init - IF result_3 GOTO label_1 - instance_16 = ALLOCATE Int - value_17 = LOAD 16 - result_init_18 = CALL Int_init - left_14 = GetAttr size_1 value - right_15 = GetAttr instance_16 value - op_13 = left_14 = right_15 - result_12 = ALLOCATE Bool - result_init_19 = CALL Bool_init - IF result_12 GOTO label_2 - instance_25 = ALLOCATE Int - value_26 = LOAD 20 - result_init_27 = CALL Int_init - left_23 = GetAttr size_1 value - right_24 = GetAttr instance_25 value - op_22 = left_23 = right_24 - result_21 = ALLOCATE Bool - result_init_28 = CALL Bool_init - IF result_21 GOTO label_3 - instance_34 = ALLOCATE Int - value_35 = LOAD 21 - result_init_36 = CALL Int_init - left_32 = GetAttr size_1 value - right_33 = GetAttr instance_34 value - op_31 = left_32 = right_33 - result_30 = ALLOCATE Bool - result_init_37 = CALL Bool_init - IF result_30 GOTO label_4 - instance_43 = ALLOCATE Int - value_44 = LOAD 25 - result_init_45 = CALL Int_init - left_41 = GetAttr size_1 value - right_42 = GetAttr instance_43 value - op_40 = left_41 = right_42 - result_39 = ALLOCATE Bool - result_init_46 = CALL Bool_init - IF result_39 GOTO label_5 - instance_52 = ALLOCATE Int - value_53 = LOAD 28 - result_init_54 = CALL Int_init - left_50 = GetAttr size_1 value - right_51 = GetAttr instance_52 value - op_49 = left_50 = right_51 - result_48 = ALLOCATE Bool - result_init_55 = CALL Bool_init - IF result_48 GOTO label_6 - instance_56 = ALLOCATE Int - value_57 = LOAD 5 - result_init_58 = CALL Int_init - SetAttr self rows instance_56 - instance_60 = ALLOCATE Int - value_61 = LOAD 5 - result_init_62 = CALL Int_init - SetAttr self columns instance_60 - SetAttr self board_size size_1 - result_47 = size_1 - GOTO label_7 - LABEL label_6 - instance_65 = ALLOCATE Int - value_66 = LOAD 7 - result_init_67 = CALL Int_init - SetAttr self rows instance_65 - instance_69 = ALLOCATE Int - value_70 = LOAD 4 - result_init_71 = CALL Int_init - SetAttr self columns instance_69 - SetAttr self board_size size_1 - result_47 = size_1 - LABEL label_7 - result_38 = result_47 - GOTO label_8 - LABEL label_5 - instance_74 = ALLOCATE Int - value_75 = LOAD 5 - result_init_76 = CALL Int_init - SetAttr self rows instance_74 - instance_78 = ALLOCATE Int - value_79 = LOAD 5 - result_init_80 = CALL Int_init - SetAttr self columns instance_78 - SetAttr self board_size size_1 - result_38 = size_1 - LABEL label_8 - result_29 = result_38 - GOTO label_9 - LABEL label_4 - instance_83 = ALLOCATE Int - value_84 = LOAD 3 - result_init_85 = CALL Int_init - SetAttr self rows instance_83 - instance_87 = ALLOCATE Int - value_88 = LOAD 7 - result_init_89 = CALL Int_init - SetAttr self columns instance_87 - SetAttr self board_size size_1 - result_29 = size_1 - LABEL label_9 - result_20 = result_29 - GOTO label_10 - LABEL label_3 - instance_92 = ALLOCATE Int - value_93 = LOAD 4 - result_init_94 = CALL Int_init - SetAttr self rows instance_92 - instance_96 = ALLOCATE Int - value_97 = LOAD 5 - result_init_98 = CALL Int_init - SetAttr self columns instance_96 - SetAttr self board_size size_1 - result_20 = size_1 - LABEL label_10 - result_11 = result_20 - GOTO label_11 - LABEL label_2 - instance_101 = ALLOCATE Int - value_102 = LOAD 4 - result_init_103 = CALL Int_init - SetAttr self rows instance_101 - instance_105 = ALLOCATE Int - value_106 = LOAD 4 - result_init_107 = CALL Int_init - SetAttr self columns instance_105 - SetAttr self board_size size_1 - result_11 = size_1 - LABEL label_11 - result_2 = result_11 - GOTO label_12 - LABEL label_1 - instance_110 = ALLOCATE Int - value_111 = LOAD 3 - result_init_112 = CALL Int_init - SetAttr self rows instance_110 - instance_114 = ALLOCATE Int - value_115 = LOAD 5 - result_init_116 = CALL Int_init - SetAttr self columns instance_114 - SetAttr self board_size size_1 - result_2 = size_1 - LABEL label_12 - let_result_119 = self - - RETURN let_result_119 -} -function CellularAutomaton_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = CALL Board_init - - RETURN - instance_1 = ALLOCATE String - value_2 = LOAD empty_str - result_init_3 = CALL String_init - SetAttr self population_map instance_1 -} -function CellularAutomaton.init { - PARAM self - PARAM map - - LOCAL result_0 - LOCAL result_1 - - SetAttr self population_map map - result_1 = VCALL CellularAutomaton board_init - - RETURN self -} -function CellularAutomaton.print { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL i_3 - LOCAL board_size_4 - LOCAL num_5 - LOCAL result_6 - LOCAL internal_7 - LOCAL instance_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_init_15 - LOCAL result_16 - LOCAL result_17 - LOCAL population_map_18 - LOCAL columns_19 - LOCAL result_20 - LOCAL internal_21 - LOCAL instance_22 - LOCAL result_init_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL columns_28 - LOCAL result_init_29 - LOCAL result_30 - LOCAL result_31 - LOCAL internal_32 - LOCAL instance_33 - LOCAL result_init_34 - LOCAL let_result_35 - LOCAL let_result_36 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - i_3 = instance_0 - board_size_4 = GetAttr self board_size - num_5 = board_size_4 - internal_7 = LOAD s_3 - instance_8 = ALLOCATE String - result_init_9 = CALL String_init - result_6 = VCALL CellularAutomaton out_string - LABEL label_13 - left_13 = GetAttr i_3 value - right_14 = GetAttr num_5 value - op_12 = left_13 < right_14 - result_11 = ALLOCATE Bool - result_init_15 = CALL Bool_init - IF result_11 GOTO label_14 - GOTO label_15 - LABEL label_14 - population_map_18 = GetAttr self population_map - columns_19 = GetAttr self columns - result_17 = VCALL String substr - result_16 = VCALL CellularAutomaton out_string - internal_21 = LOAD s_3 - instance_22 = ALLOCATE String - result_init_23 = CALL String_init - result_20 = VCALL CellularAutomaton out_string - columns_28 = GetAttr self columns - left_26 = GetAttr i_3 value - right_27 = GetAttr columns_28 value - op_25 = left_26 + right_27 - result_24 = ALLOCATE Int - result_init_29 = CALL Int_init - i_3 = result_24 - GOTO label_13 - LABEL label_15 - result_10 = LOAD None - internal_32 = LOAD s_3 - instance_33 = ALLOCATE String - result_init_34 = CALL String_init - result_31 = VCALL CellularAutomaton out_string - let_result_35 = self - let_result_36 = let_result_35 - - RETURN let_result_36 -} -function CellularAutomaton.num_cells { - PARAM self - - LOCAL result_0 - LOCAL population_map_1 - - population_map_1 = GetAttr self population_map - result_0 = VCALL String length - - RETURN result_0 -} -function CellularAutomaton.cell { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL board_size_9 - LOCAL instance_10 - LOCAL value_11 - LOCAL result_init_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL population_map_16 - LOCAL instance_17 - LOCAL value_18 - LOCAL result_init_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - - board_size_9 = GetAttr self board_size - instance_10 = ALLOCATE Int - value_11 = LOAD 1 - result_init_12 = CALL Int_init - left_7 = GetAttr board_size_9 value - right_8 = GetAttr instance_10 value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_13 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr position value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_16 - population_map_16 = GetAttr self population_map - instance_17 = ALLOCATE Int - value_18 = LOAD 1 - result_init_19 = CALL Int_init - result_15 = VCALL String substr - result_0 = result_15 - GOTO label_17 - LABEL label_16 - internal_20 = LOAD s_4 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - result_0 = instance_21 - LABEL label_17 - - RETURN result_0 -} -function CellularAutomaton.north { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL columns_9 - LOCAL result_init_10 - LOCAL instance_11 - LOCAL value_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL columns_20 - LOCAL result_init_21 - LOCAL internal_22 - LOCAL instance_23 - LOCAL result_init_24 - - columns_9 = GetAttr self columns - left_7 = GetAttr position value - right_8 = GetAttr columns_9 value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_10 = CALL Int_init - instance_11 = ALLOCATE Int - value_12 = LOAD 0 - result_init_13 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_11 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_18 - columns_20 = GetAttr self columns - left_18 = GetAttr position value - right_19 = GetAttr columns_20 value - op_17 = left_18 - right_19 - result_16 = ALLOCATE Int - result_init_21 = CALL Int_init - result_15 = VCALL CellularAutomaton cell - result_0 = result_15 - GOTO label_19 - LABEL label_18 - internal_22 = LOAD s_4 - instance_23 = ALLOCATE String - result_init_24 = CALL String_init - result_0 = instance_23 - LABEL label_19 - - RETURN result_0 -} -function CellularAutomaton.south { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL board_size_5 - LOCAL result_6 - LOCAL op_7 - LOCAL left_8 - LOCAL right_9 - LOCAL columns_10 - LOCAL result_init_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL columns_18 - LOCAL result_init_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - - board_size_5 = GetAttr self board_size - columns_10 = GetAttr self columns - left_8 = GetAttr position value - right_9 = GetAttr columns_10 value - op_7 = left_8 + right_9 - result_6 = ALLOCATE Int - result_init_11 = CALL Int_init - left_3 = GetAttr board_size_5 value - right_4 = GetAttr result_6 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_12 = CALL Bool_init - IF result_1 GOTO label_20 - columns_18 = GetAttr self columns - left_16 = GetAttr position value - right_17 = GetAttr columns_18 value - op_15 = left_16 + right_17 - result_14 = ALLOCATE Int - result_init_19 = CALL Int_init - result_13 = VCALL CellularAutomaton cell - result_0 = result_13 - GOTO label_21 - LABEL label_20 - internal_20 = LOAD s_4 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - result_0 = instance_21 - LABEL label_21 - - RETURN result_0 -} -function CellularAutomaton.east { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL result_9 - LOCAL op_10 - LOCAL left_11 - LOCAL right_12 - LOCAL result_13 - LOCAL op_14 - LOCAL left_15 - LOCAL right_16 - LOCAL instance_17 - LOCAL value_18 - LOCAL result_init_19 - LOCAL result_init_20 - LOCAL columns_21 - LOCAL result_init_22 - LOCAL columns_23 - LOCAL result_init_24 - LOCAL result_25 - LOCAL op_26 - LOCAL left_27 - LOCAL right_28 - LOCAL instance_29 - LOCAL value_30 - LOCAL result_init_31 - LOCAL result_init_32 - LOCAL result_init_33 - LOCAL result_34 - LOCAL result_35 - LOCAL op_36 - LOCAL left_37 - LOCAL right_38 - LOCAL instance_39 - LOCAL value_40 - LOCAL result_init_41 - LOCAL result_init_42 - LOCAL internal_43 - LOCAL instance_44 - LOCAL result_init_45 - - instance_17 = ALLOCATE Int - value_18 = LOAD 1 - result_init_19 = CALL Int_init - left_15 = GetAttr position value - right_16 = GetAttr instance_17 value - op_14 = left_15 + right_16 - result_13 = ALLOCATE Int - result_init_20 = CALL Int_init - columns_21 = GetAttr self columns - left_11 = GetAttr result_13 value - right_12 = GetAttr columns_21 value - op_10 = left_11 / right_12 - result_9 = ALLOCATE Int - result_init_22 = CALL Int_init - columns_23 = GetAttr self columns - left_7 = GetAttr result_9 value - right_8 = GetAttr columns_23 value - op_6 = left_7 * right_8 - result_5 = ALLOCATE Int - result_init_24 = CALL Int_init - instance_29 = ALLOCATE Int - value_30 = LOAD 1 - result_init_31 = CALL Int_init - left_27 = GetAttr position value - right_28 = GetAttr instance_29 value - op_26 = left_27 + right_28 - result_25 = ALLOCATE Int - result_init_32 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr result_25 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_33 = CALL Bool_init - IF result_1 GOTO label_22 - instance_39 = ALLOCATE Int - value_40 = LOAD 1 - result_init_41 = CALL Int_init - left_37 = GetAttr position value - right_38 = GetAttr instance_39 value - op_36 = left_37 + right_38 - result_35 = ALLOCATE Int - result_init_42 = CALL Int_init - result_34 = VCALL CellularAutomaton cell - result_0 = result_34 - GOTO label_23 - LABEL label_22 - internal_43 = LOAD s_4 - instance_44 = ALLOCATE String - result_init_45 = CALL String_init - result_0 = instance_44 - LABEL label_23 - - RETURN result_0 -} -function CellularAutomaton.west { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL instance_5 - LOCAL value_6 - LOCAL result_init_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL op_11 - LOCAL left_12 - LOCAL right_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL result_18 - LOCAL op_19 - LOCAL left_20 - LOCAL right_21 - LOCAL columns_22 - LOCAL result_init_23 - LOCAL columns_24 - LOCAL result_init_25 - LOCAL result_init_26 - LOCAL result_27 - LOCAL result_28 - LOCAL op_29 - LOCAL left_30 - LOCAL right_31 - LOCAL instance_32 - LOCAL value_33 - LOCAL result_init_34 - LOCAL result_init_35 - LOCAL internal_36 - LOCAL instance_37 - LOCAL result_init_38 - LOCAL internal_39 - LOCAL instance_40 - LOCAL result_init_41 - - instance_5 = ALLOCATE Int - value_6 = LOAD 0 - result_init_7 = CALL Int_init - left_3 = GetAttr position value - right_4 = GetAttr instance_5 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_8 = CALL Bool_init - IF result_1 GOTO label_24 - columns_22 = GetAttr self columns - left_20 = GetAttr position value - right_21 = GetAttr columns_22 value - op_19 = left_20 / right_21 - result_18 = ALLOCATE Int - result_init_23 = CALL Int_init - columns_24 = GetAttr self columns - left_16 = GetAttr result_18 value - right_17 = GetAttr columns_24 value - op_15 = left_16 * right_17 - result_14 = ALLOCATE Int - result_init_25 = CALL Int_init - left_12 = GetAttr result_14 value - right_13 = GetAttr position value - op_11 = left_12 = right_13 - result_10 = ALLOCATE Bool - result_init_26 = CALL Bool_init - IF result_10 GOTO label_25 - instance_32 = ALLOCATE Int - value_33 = LOAD 1 - result_init_34 = CALL Int_init - left_30 = GetAttr position value - right_31 = GetAttr instance_32 value - op_29 = left_30 - right_31 - result_28 = ALLOCATE Int - result_init_35 = CALL Int_init - result_27 = VCALL CellularAutomaton cell - result_9 = result_27 - GOTO label_26 - LABEL label_25 - internal_36 = LOAD s_4 - instance_37 = ALLOCATE String - result_init_38 = CALL String_init - result_9 = instance_37 - LABEL label_26 - result_0 = result_9 - GOTO label_27 - LABEL label_24 - internal_39 = LOAD s_4 - instance_40 = ALLOCATE String - result_init_41 = CALL String_init - result_0 = instance_40 - LABEL label_27 - - RETURN result_0 -} -function CellularAutomaton.northwest { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL columns_9 - LOCAL result_init_10 - LOCAL instance_11 - LOCAL value_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL result_20 - LOCAL op_21 - LOCAL left_22 - LOCAL right_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL columns_28 - LOCAL result_init_29 - LOCAL columns_30 - LOCAL result_init_31 - LOCAL result_init_32 - LOCAL result_33 - LOCAL result_34 - LOCAL op_35 - LOCAL left_36 - LOCAL right_37 - LOCAL instance_38 - LOCAL value_39 - LOCAL result_init_40 - LOCAL result_init_41 - LOCAL internal_42 - LOCAL instance_43 - LOCAL result_init_44 - LOCAL internal_45 - LOCAL instance_46 - LOCAL result_init_47 - - columns_9 = GetAttr self columns - left_7 = GetAttr position value - right_8 = GetAttr columns_9 value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_10 = CALL Int_init - instance_11 = ALLOCATE Int - value_12 = LOAD 0 - result_init_13 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_11 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_28 - columns_28 = GetAttr self columns - left_26 = GetAttr position value - right_27 = GetAttr columns_28 value - op_25 = left_26 / right_27 - result_24 = ALLOCATE Int - result_init_29 = CALL Int_init - columns_30 = GetAttr self columns - left_22 = GetAttr result_24 value - right_23 = GetAttr columns_30 value - op_21 = left_22 * right_23 - result_20 = ALLOCATE Int - result_init_31 = CALL Int_init - left_18 = GetAttr result_20 value - right_19 = GetAttr position value - op_17 = left_18 = right_19 - result_16 = ALLOCATE Bool - result_init_32 = CALL Bool_init - IF result_16 GOTO label_29 - instance_38 = ALLOCATE Int - value_39 = LOAD 1 - result_init_40 = CALL Int_init - left_36 = GetAttr position value - right_37 = GetAttr instance_38 value - op_35 = left_36 - right_37 - result_34 = ALLOCATE Int - result_init_41 = CALL Int_init - result_33 = VCALL CellularAutomaton north - result_15 = result_33 - GOTO label_30 - LABEL label_29 - internal_42 = LOAD s_4 - instance_43 = ALLOCATE String - result_init_44 = CALL String_init - result_15 = instance_43 - LABEL label_30 - result_0 = result_15 - GOTO label_31 - LABEL label_28 - internal_45 = LOAD s_4 - instance_46 = ALLOCATE String - result_init_47 = CALL String_init - result_0 = instance_46 - LABEL label_31 - - RETURN result_0 -} -function CellularAutomaton.northeast { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL op_6 - LOCAL left_7 - LOCAL right_8 - LOCAL columns_9 - LOCAL result_init_10 - LOCAL instance_11 - LOCAL value_12 - LOCAL result_init_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL result_20 - LOCAL op_21 - LOCAL left_22 - LOCAL right_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL result_28 - LOCAL op_29 - LOCAL left_30 - LOCAL right_31 - LOCAL instance_32 - LOCAL value_33 - LOCAL result_init_34 - LOCAL result_init_35 - LOCAL columns_36 - LOCAL result_init_37 - LOCAL columns_38 - LOCAL result_init_39 - LOCAL result_40 - LOCAL op_41 - LOCAL left_42 - LOCAL right_43 - LOCAL instance_44 - LOCAL value_45 - LOCAL result_init_46 - LOCAL result_init_47 - LOCAL result_init_48 - LOCAL result_49 - LOCAL result_50 - LOCAL op_51 - LOCAL left_52 - LOCAL right_53 - LOCAL instance_54 - LOCAL value_55 - LOCAL result_init_56 - LOCAL result_init_57 - LOCAL internal_58 - LOCAL instance_59 - LOCAL result_init_60 - LOCAL internal_61 - LOCAL instance_62 - LOCAL result_init_63 - - columns_9 = GetAttr self columns - left_7 = GetAttr position value - right_8 = GetAttr columns_9 value - op_6 = left_7 - right_8 - result_5 = ALLOCATE Int - result_init_10 = CALL Int_init - instance_11 = ALLOCATE Int - value_12 = LOAD 0 - result_init_13 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_11 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_14 = CALL Bool_init - IF result_1 GOTO label_32 - instance_32 = ALLOCATE Int - value_33 = LOAD 1 - result_init_34 = CALL Int_init - left_30 = GetAttr position value - right_31 = GetAttr instance_32 value - op_29 = left_30 + right_31 - result_28 = ALLOCATE Int - result_init_35 = CALL Int_init - columns_36 = GetAttr self columns - left_26 = GetAttr result_28 value - right_27 = GetAttr columns_36 value - op_25 = left_26 / right_27 - result_24 = ALLOCATE Int - result_init_37 = CALL Int_init - columns_38 = GetAttr self columns - left_22 = GetAttr result_24 value - right_23 = GetAttr columns_38 value - op_21 = left_22 * right_23 - result_20 = ALLOCATE Int - result_init_39 = CALL Int_init - instance_44 = ALLOCATE Int - value_45 = LOAD 1 - result_init_46 = CALL Int_init - left_42 = GetAttr position value - right_43 = GetAttr instance_44 value - op_41 = left_42 + right_43 - result_40 = ALLOCATE Int - result_init_47 = CALL Int_init - left_18 = GetAttr result_20 value - right_19 = GetAttr result_40 value - op_17 = left_18 = right_19 - result_16 = ALLOCATE Bool - result_init_48 = CALL Bool_init - IF result_16 GOTO label_33 - instance_54 = ALLOCATE Int - value_55 = LOAD 1 - result_init_56 = CALL Int_init - left_52 = GetAttr position value - right_53 = GetAttr instance_54 value - op_51 = left_52 + right_53 - result_50 = ALLOCATE Int - result_init_57 = CALL Int_init - result_49 = VCALL CellularAutomaton north - result_15 = result_49 - GOTO label_34 - LABEL label_33 - internal_58 = LOAD s_4 - instance_59 = ALLOCATE String - result_init_60 = CALL String_init - result_15 = instance_59 - LABEL label_34 - result_0 = result_15 - GOTO label_35 - LABEL label_32 - internal_61 = LOAD s_4 - instance_62 = ALLOCATE String - result_init_63 = CALL String_init - result_0 = instance_62 - LABEL label_35 - - RETURN result_0 -} -function CellularAutomaton.southeast { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL board_size_5 - LOCAL result_6 - LOCAL op_7 - LOCAL left_8 - LOCAL right_9 - LOCAL columns_10 - LOCAL result_init_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL result_18 - LOCAL op_19 - LOCAL left_20 - LOCAL right_21 - LOCAL result_22 - LOCAL op_23 - LOCAL left_24 - LOCAL right_25 - LOCAL result_26 - LOCAL op_27 - LOCAL left_28 - LOCAL right_29 - LOCAL instance_30 - LOCAL value_31 - LOCAL result_init_32 - LOCAL result_init_33 - LOCAL columns_34 - LOCAL result_init_35 - LOCAL columns_36 - LOCAL result_init_37 - LOCAL result_38 - LOCAL op_39 - LOCAL left_40 - LOCAL right_41 - LOCAL instance_42 - LOCAL value_43 - LOCAL result_init_44 - LOCAL result_init_45 - LOCAL result_init_46 - LOCAL result_47 - LOCAL result_48 - LOCAL op_49 - LOCAL left_50 - LOCAL right_51 - LOCAL instance_52 - LOCAL value_53 - LOCAL result_init_54 - LOCAL result_init_55 - LOCAL internal_56 - LOCAL instance_57 - LOCAL result_init_58 - LOCAL internal_59 - LOCAL instance_60 - LOCAL result_init_61 - - board_size_5 = GetAttr self board_size - columns_10 = GetAttr self columns - left_8 = GetAttr position value - right_9 = GetAttr columns_10 value - op_7 = left_8 + right_9 - result_6 = ALLOCATE Int - result_init_11 = CALL Int_init - left_3 = GetAttr board_size_5 value - right_4 = GetAttr result_6 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_12 = CALL Bool_init - IF result_1 GOTO label_36 - instance_30 = ALLOCATE Int - value_31 = LOAD 1 - result_init_32 = CALL Int_init - left_28 = GetAttr position value - right_29 = GetAttr instance_30 value - op_27 = left_28 + right_29 - result_26 = ALLOCATE Int - result_init_33 = CALL Int_init - columns_34 = GetAttr self columns - left_24 = GetAttr result_26 value - right_25 = GetAttr columns_34 value - op_23 = left_24 / right_25 - result_22 = ALLOCATE Int - result_init_35 = CALL Int_init - columns_36 = GetAttr self columns - left_20 = GetAttr result_22 value - right_21 = GetAttr columns_36 value - op_19 = left_20 * right_21 - result_18 = ALLOCATE Int - result_init_37 = CALL Int_init - instance_42 = ALLOCATE Int - value_43 = LOAD 1 - result_init_44 = CALL Int_init - left_40 = GetAttr position value - right_41 = GetAttr instance_42 value - op_39 = left_40 + right_41 - result_38 = ALLOCATE Int - result_init_45 = CALL Int_init - left_16 = GetAttr result_18 value - right_17 = GetAttr result_38 value - op_15 = left_16 = right_17 - result_14 = ALLOCATE Bool - result_init_46 = CALL Bool_init - IF result_14 GOTO label_37 - instance_52 = ALLOCATE Int - value_53 = LOAD 1 - result_init_54 = CALL Int_init - left_50 = GetAttr position value - right_51 = GetAttr instance_52 value - op_49 = left_50 + right_51 - result_48 = ALLOCATE Int - result_init_55 = CALL Int_init - result_47 = VCALL CellularAutomaton south - result_13 = result_47 - GOTO label_38 - LABEL label_37 - internal_56 = LOAD s_4 - instance_57 = ALLOCATE String - result_init_58 = CALL String_init - result_13 = instance_57 - LABEL label_38 - result_0 = result_13 - GOTO label_39 - LABEL label_36 - internal_59 = LOAD s_4 - instance_60 = ALLOCATE String - result_init_61 = CALL String_init - result_0 = instance_60 - LABEL label_39 - - RETURN result_0 -} -function CellularAutomaton.southwest { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL board_size_5 - LOCAL result_6 - LOCAL op_7 - LOCAL left_8 - LOCAL right_9 - LOCAL columns_10 - LOCAL result_init_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL result_14 - LOCAL op_15 - LOCAL left_16 - LOCAL right_17 - LOCAL result_18 - LOCAL op_19 - LOCAL left_20 - LOCAL right_21 - LOCAL result_22 - LOCAL op_23 - LOCAL left_24 - LOCAL right_25 - LOCAL columns_26 - LOCAL result_init_27 - LOCAL columns_28 - LOCAL result_init_29 - LOCAL result_init_30 - LOCAL result_31 - LOCAL result_32 - LOCAL op_33 - LOCAL left_34 - LOCAL right_35 - LOCAL instance_36 - LOCAL value_37 - LOCAL result_init_38 - LOCAL result_init_39 - LOCAL internal_40 - LOCAL instance_41 - LOCAL result_init_42 - LOCAL internal_43 - LOCAL instance_44 - LOCAL result_init_45 - - board_size_5 = GetAttr self board_size - columns_10 = GetAttr self columns - left_8 = GetAttr position value - right_9 = GetAttr columns_10 value - op_7 = left_8 + right_9 - result_6 = ALLOCATE Int - result_init_11 = CALL Int_init - left_3 = GetAttr board_size_5 value - right_4 = GetAttr result_6 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_12 = CALL Bool_init - IF result_1 GOTO label_40 - columns_26 = GetAttr self columns - left_24 = GetAttr position value - right_25 = GetAttr columns_26 value - op_23 = left_24 / right_25 - result_22 = ALLOCATE Int - result_init_27 = CALL Int_init - columns_28 = GetAttr self columns - left_20 = GetAttr result_22 value - right_21 = GetAttr columns_28 value - op_19 = left_20 * right_21 - result_18 = ALLOCATE Int - result_init_29 = CALL Int_init - left_16 = GetAttr result_18 value - right_17 = GetAttr position value - op_15 = left_16 = right_17 - result_14 = ALLOCATE Bool - result_init_30 = CALL Bool_init - IF result_14 GOTO label_41 - instance_36 = ALLOCATE Int - value_37 = LOAD 1 - result_init_38 = CALL Int_init - left_34 = GetAttr position value - right_35 = GetAttr instance_36 value - op_33 = left_34 - right_35 - result_32 = ALLOCATE Int - result_init_39 = CALL Int_init - result_31 = VCALL CellularAutomaton south - result_13 = result_31 - GOTO label_42 - LABEL label_41 - internal_40 = LOAD s_4 - instance_41 = ALLOCATE String - result_init_42 = CALL String_init - result_13 = instance_41 - LABEL label_42 - result_0 = result_13 - GOTO label_43 - LABEL label_40 - internal_43 = LOAD s_4 - instance_44 = ALLOCATE String - result_init_45 = CALL String_init - result_0 = instance_44 - LABEL label_43 - - RETURN result_0 -} -function CellularAutomaton.neighbors { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL result_4 - LOCAL op_5 - LOCAL left_6 - LOCAL right_7 - LOCAL result_8 - LOCAL op_9 - LOCAL left_10 - LOCAL right_11 - LOCAL result_12 - LOCAL op_13 - LOCAL left_14 - LOCAL right_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL result_20 - LOCAL op_21 - LOCAL left_22 - LOCAL right_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL result_28 - LOCAL result_29 - LOCAL op_30 - LOCAL left_31 - LOCAL right_32 - LOCAL result_33 - LOCAL internal_34 - LOCAL instance_35 - LOCAL result_init_36 - LOCAL result_init_37 - LOCAL instance_38 - LOCAL value_39 - LOCAL result_init_40 - LOCAL instance_41 - LOCAL value_42 - LOCAL result_init_43 - LOCAL result_44 - LOCAL result_45 - LOCAL op_46 - LOCAL left_47 - LOCAL right_48 - LOCAL result_49 - LOCAL internal_50 - LOCAL instance_51 - LOCAL result_init_52 - LOCAL result_init_53 - LOCAL instance_54 - LOCAL value_55 - LOCAL result_init_56 - LOCAL instance_57 - LOCAL value_58 - LOCAL result_init_59 - LOCAL result_init_60 - LOCAL result_61 - LOCAL result_62 - LOCAL op_63 - LOCAL left_64 - LOCAL right_65 - LOCAL result_66 - LOCAL internal_67 - LOCAL instance_68 - LOCAL result_init_69 - LOCAL result_init_70 - LOCAL instance_71 - LOCAL value_72 - LOCAL result_init_73 - LOCAL instance_74 - LOCAL value_75 - LOCAL result_init_76 - LOCAL result_init_77 - LOCAL result_78 - LOCAL result_79 - LOCAL op_80 - LOCAL left_81 - LOCAL right_82 - LOCAL result_83 - LOCAL internal_84 - LOCAL instance_85 - LOCAL result_init_86 - LOCAL result_init_87 - LOCAL instance_88 - LOCAL value_89 - LOCAL result_init_90 - LOCAL instance_91 - LOCAL value_92 - LOCAL result_init_93 - LOCAL result_init_94 - LOCAL result_95 - LOCAL result_96 - LOCAL op_97 - LOCAL left_98 - LOCAL right_99 - LOCAL result_100 - LOCAL internal_101 - LOCAL instance_102 - LOCAL result_init_103 - LOCAL result_init_104 - LOCAL instance_105 - LOCAL value_106 - LOCAL result_init_107 - LOCAL instance_108 - LOCAL value_109 - LOCAL result_init_110 - LOCAL result_init_111 - LOCAL result_112 - LOCAL result_113 - LOCAL op_114 - LOCAL left_115 - LOCAL right_116 - LOCAL result_117 - LOCAL internal_118 - LOCAL instance_119 - LOCAL result_init_120 - LOCAL result_init_121 - LOCAL instance_122 - LOCAL value_123 - LOCAL result_init_124 - LOCAL instance_125 - LOCAL value_126 - LOCAL result_init_127 - LOCAL result_init_128 - LOCAL result_129 - LOCAL result_130 - LOCAL op_131 - LOCAL left_132 - LOCAL right_133 - LOCAL result_134 - LOCAL internal_135 - LOCAL instance_136 - LOCAL result_init_137 - LOCAL result_init_138 - LOCAL instance_139 - LOCAL value_140 - LOCAL result_init_141 - LOCAL instance_142 - LOCAL value_143 - LOCAL result_init_144 - LOCAL result_init_145 - LOCAL result_146 - LOCAL result_147 - LOCAL op_148 - LOCAL left_149 - LOCAL right_150 - LOCAL result_151 - LOCAL internal_152 - LOCAL instance_153 - LOCAL result_init_154 - LOCAL result_init_155 - LOCAL instance_156 - LOCAL value_157 - LOCAL result_init_158 - LOCAL instance_159 - LOCAL value_160 - LOCAL result_init_161 - LOCAL result_init_162 - - result_33 = VCALL CellularAutomaton north - internal_34 = LOAD s_5 - instance_35 = ALLOCATE String - result_init_36 = CALL String_init - left_31 = GetAttr result_33 value - right_32 = GetAttr instance_35 value - op_30 = left_31 = right_32 - result_29 = ALLOCATE Bool - result_init_37 = CALL Bool_init - IF result_29 GOTO label_44 - instance_38 = ALLOCATE Int - value_39 = LOAD 0 - result_init_40 = CALL Int_init - result_28 = instance_38 - GOTO label_45 - LABEL label_44 - instance_41 = ALLOCATE Int - value_42 = LOAD 1 - result_init_43 = CALL Int_init - result_28 = instance_41 - LABEL label_45 - result_49 = VCALL CellularAutomaton south - internal_50 = LOAD s_5 - instance_51 = ALLOCATE String - result_init_52 = CALL String_init - left_47 = GetAttr result_49 value - right_48 = GetAttr instance_51 value - op_46 = left_47 = right_48 - result_45 = ALLOCATE Bool - result_init_53 = CALL Bool_init - IF result_45 GOTO label_46 - instance_54 = ALLOCATE Int - value_55 = LOAD 0 - result_init_56 = CALL Int_init - result_44 = instance_54 - GOTO label_47 - LABEL label_46 - instance_57 = ALLOCATE Int - value_58 = LOAD 1 - result_init_59 = CALL Int_init - result_44 = instance_57 - LABEL label_47 - left_26 = GetAttr result_28 value - right_27 = GetAttr result_44 value - op_25 = left_26 + right_27 - result_24 = ALLOCATE Int - result_init_60 = CALL Int_init - result_66 = VCALL CellularAutomaton east - internal_67 = LOAD s_5 - instance_68 = ALLOCATE String - result_init_69 = CALL String_init - left_64 = GetAttr result_66 value - right_65 = GetAttr instance_68 value - op_63 = left_64 = right_65 - result_62 = ALLOCATE Bool - result_init_70 = CALL Bool_init - IF result_62 GOTO label_48 - instance_71 = ALLOCATE Int - value_72 = LOAD 0 - result_init_73 = CALL Int_init - result_61 = instance_71 - GOTO label_49 - LABEL label_48 - instance_74 = ALLOCATE Int - value_75 = LOAD 1 - result_init_76 = CALL Int_init - result_61 = instance_74 - LABEL label_49 - left_22 = GetAttr result_24 value - right_23 = GetAttr result_61 value - op_21 = left_22 + right_23 - result_20 = ALLOCATE Int - result_init_77 = CALL Int_init - result_83 = VCALL CellularAutomaton west - internal_84 = LOAD s_5 - instance_85 = ALLOCATE String - result_init_86 = CALL String_init - left_81 = GetAttr result_83 value - right_82 = GetAttr instance_85 value - op_80 = left_81 = right_82 - result_79 = ALLOCATE Bool - result_init_87 = CALL Bool_init - IF result_79 GOTO label_50 - instance_88 = ALLOCATE Int - value_89 = LOAD 0 - result_init_90 = CALL Int_init - result_78 = instance_88 - GOTO label_51 - LABEL label_50 - instance_91 = ALLOCATE Int - value_92 = LOAD 1 - result_init_93 = CALL Int_init - result_78 = instance_91 - LABEL label_51 - left_18 = GetAttr result_20 value - right_19 = GetAttr result_78 value - op_17 = left_18 + right_19 - result_16 = ALLOCATE Int - result_init_94 = CALL Int_init - result_100 = VCALL CellularAutomaton northeast - internal_101 = LOAD s_5 - instance_102 = ALLOCATE String - result_init_103 = CALL String_init - left_98 = GetAttr result_100 value - right_99 = GetAttr instance_102 value - op_97 = left_98 = right_99 - result_96 = ALLOCATE Bool - result_init_104 = CALL Bool_init - IF result_96 GOTO label_52 - instance_105 = ALLOCATE Int - value_106 = LOAD 0 - result_init_107 = CALL Int_init - result_95 = instance_105 - GOTO label_53 - LABEL label_52 - instance_108 = ALLOCATE Int - value_109 = LOAD 1 - result_init_110 = CALL Int_init - result_95 = instance_108 - LABEL label_53 - left_14 = GetAttr result_16 value - right_15 = GetAttr result_95 value - op_13 = left_14 + right_15 - result_12 = ALLOCATE Int - result_init_111 = CALL Int_init - result_117 = VCALL CellularAutomaton northwest - internal_118 = LOAD s_5 - instance_119 = ALLOCATE String - result_init_120 = CALL String_init - left_115 = GetAttr result_117 value - right_116 = GetAttr instance_119 value - op_114 = left_115 = right_116 - result_113 = ALLOCATE Bool - result_init_121 = CALL Bool_init - IF result_113 GOTO label_54 - instance_122 = ALLOCATE Int - value_123 = LOAD 0 - result_init_124 = CALL Int_init - result_112 = instance_122 - GOTO label_55 - LABEL label_54 - instance_125 = ALLOCATE Int - value_126 = LOAD 1 - result_init_127 = CALL Int_init - result_112 = instance_125 - LABEL label_55 - left_10 = GetAttr result_12 value - right_11 = GetAttr result_112 value - op_9 = left_10 + right_11 - result_8 = ALLOCATE Int - result_init_128 = CALL Int_init - result_134 = VCALL CellularAutomaton southeast - internal_135 = LOAD s_5 - instance_136 = ALLOCATE String - result_init_137 = CALL String_init - left_132 = GetAttr result_134 value - right_133 = GetAttr instance_136 value - op_131 = left_132 = right_133 - result_130 = ALLOCATE Bool - result_init_138 = CALL Bool_init - IF result_130 GOTO label_56 - instance_139 = ALLOCATE Int - value_140 = LOAD 0 - result_init_141 = CALL Int_init - result_129 = instance_139 - GOTO label_57 - LABEL label_56 - instance_142 = ALLOCATE Int - value_143 = LOAD 1 - result_init_144 = CALL Int_init - result_129 = instance_142 - LABEL label_57 - left_6 = GetAttr result_8 value - right_7 = GetAttr result_129 value - op_5 = left_6 + right_7 - result_4 = ALLOCATE Int - result_init_145 = CALL Int_init - result_151 = VCALL CellularAutomaton southwest - internal_152 = LOAD s_5 - instance_153 = ALLOCATE String - result_init_154 = CALL String_init - left_149 = GetAttr result_151 value - right_150 = GetAttr instance_153 value - op_148 = left_149 = right_150 - result_147 = ALLOCATE Bool - result_init_155 = CALL Bool_init - IF result_147 GOTO label_58 - instance_156 = ALLOCATE Int - value_157 = LOAD 0 - result_init_158 = CALL Int_init - result_146 = instance_156 - GOTO label_59 - LABEL label_58 - instance_159 = ALLOCATE Int - value_160 = LOAD 1 - result_init_161 = CALL Int_init - result_146 = instance_159 - LABEL label_59 - left_2 = GetAttr result_4 value - right_3 = GetAttr result_146 value - op_1 = left_2 + right_3 - result_0 = ALLOCATE Int - result_init_162 = CALL Int_init - - RETURN result_0 -} -function CellularAutomaton.cell_at_next_evolution { - PARAM self - PARAM position - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - LOCAL result_23 - LOCAL result_24 - LOCAL op_25 - LOCAL left_26 - LOCAL right_27 - LOCAL result_28 - LOCAL internal_29 - LOCAL instance_30 - LOCAL result_init_31 - LOCAL result_init_32 - LOCAL internal_33 - LOCAL instance_34 - LOCAL result_init_35 - LOCAL internal_36 - LOCAL instance_37 - LOCAL result_init_38 - LOCAL internal_39 - LOCAL instance_40 - LOCAL result_init_41 - - result_5 = VCALL CellularAutomaton neighbors - instance_6 = ALLOCATE Int - value_7 = LOAD 3 - result_init_8 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_1 GOTO label_60 - result_15 = VCALL CellularAutomaton neighbors - instance_16 = ALLOCATE Int - value_17 = LOAD 2 - result_init_18 = CALL Int_init - left_13 = GetAttr result_15 value - right_14 = GetAttr instance_16 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_19 = CALL Bool_init - IF result_11 GOTO label_61 - internal_20 = LOAD s_6 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - result_10 = instance_21 - GOTO label_62 - LABEL label_61 - result_28 = VCALL CellularAutomaton cell - internal_29 = LOAD s_5 - instance_30 = ALLOCATE String - result_init_31 = CALL String_init - left_26 = GetAttr result_28 value - right_27 = GetAttr instance_30 value - op_25 = left_26 = right_27 - result_24 = ALLOCATE Bool - result_init_32 = CALL Bool_init - IF result_24 GOTO label_63 - internal_33 = LOAD s_6 - instance_34 = ALLOCATE String - result_init_35 = CALL String_init - result_23 = instance_34 - GOTO label_64 - LABEL label_63 - internal_36 = LOAD s_5 - instance_37 = ALLOCATE String - result_init_38 = CALL String_init - result_23 = instance_37 - LABEL label_64 - result_10 = result_23 - LABEL label_62 - result_0 = result_10 - GOTO label_65 - LABEL label_60 - internal_39 = LOAD s_5 - instance_40 = ALLOCATE String - result_init_41 = CALL String_init - result_0 = instance_40 - LABEL label_65 - - RETURN result_0 -} -function CellularAutomaton.evolve { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - LOCAL position_3 - LOCAL result_4 - LOCAL num_5 - LOCAL temp_6 - LOCAL result_7 - LOCAL result_8 - LOCAL op_9 - LOCAL left_10 - LOCAL right_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL result_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL instance_20 - LOCAL value_21 - LOCAL result_init_22 - LOCAL result_init_23 - LOCAL result_24 - LOCAL result_25 - LOCAL let_result_26 - LOCAL let_result_27 - LOCAL let_result_28 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - position_3 = instance_0 - result_4 = VCALL CellularAutomaton num_cells - num_5 = result_4 - temp_6 = [] - LABEL label_66 - left_10 = GetAttr position_3 value - right_11 = GetAttr num_5 value - op_9 = left_10 < right_11 - result_8 = ALLOCATE Bool - result_init_12 = CALL Bool_init - IF result_8 GOTO label_67 - GOTO label_68 - LABEL label_67 - result_14 = VCALL CellularAutomaton cell_at_next_evolution - result_13 = VCALL String concat - temp_6 = result_13 - instance_20 = ALLOCATE Int - value_21 = LOAD 1 - result_init_22 = CALL Int_init - left_18 = GetAttr position_3 value - right_19 = GetAttr instance_20 value - op_17 = left_18 + right_19 - result_16 = ALLOCATE Int - result_init_23 = CALL Int_init - position_3 = result_16 - GOTO label_66 - LABEL label_68 - result_7 = LOAD None - SetAttr self population_map temp_6 - let_result_26 = self - let_result_27 = let_result_26 - let_result_28 = let_result_27 - - RETURN let_result_28 -} -function CellularAutomaton.option { - PARAM self - - LOCAL num_0 - LOCAL result_1 - LOCAL internal_2 - LOCAL instance_3 - LOCAL result_init_4 - LOCAL result_5 - LOCAL internal_6 - LOCAL instance_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL internal_10 - LOCAL instance_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL internal_14 - LOCAL instance_15 - LOCAL result_init_16 - LOCAL result_17 - LOCAL internal_18 - LOCAL instance_19 - LOCAL result_init_20 - LOCAL result_21 - LOCAL internal_22 - LOCAL instance_23 - LOCAL result_init_24 - LOCAL result_25 - LOCAL internal_26 - LOCAL instance_27 - LOCAL result_init_28 - LOCAL result_29 - LOCAL internal_30 - LOCAL instance_31 - LOCAL result_init_32 - LOCAL result_33 - LOCAL internal_34 - LOCAL instance_35 - LOCAL result_init_36 - LOCAL result_37 - LOCAL internal_38 - LOCAL instance_39 - LOCAL result_init_40 - LOCAL result_41 - LOCAL internal_42 - LOCAL instance_43 - LOCAL result_init_44 - LOCAL result_45 - LOCAL internal_46 - LOCAL instance_47 - LOCAL result_init_48 - LOCAL result_49 - LOCAL internal_50 - LOCAL instance_51 - LOCAL result_init_52 - LOCAL result_53 - LOCAL internal_54 - LOCAL instance_55 - LOCAL result_init_56 - LOCAL result_57 - LOCAL internal_58 - LOCAL instance_59 - LOCAL result_init_60 - LOCAL result_61 - LOCAL internal_62 - LOCAL instance_63 - LOCAL result_init_64 - LOCAL result_65 - LOCAL internal_66 - LOCAL instance_67 - LOCAL result_init_68 - LOCAL result_69 - LOCAL internal_70 - LOCAL instance_71 - LOCAL result_init_72 - LOCAL result_73 - LOCAL internal_74 - LOCAL instance_75 - LOCAL result_init_76 - LOCAL result_77 - LOCAL internal_78 - LOCAL instance_79 - LOCAL result_init_80 - LOCAL result_81 - LOCAL internal_82 - LOCAL instance_83 - LOCAL result_init_84 - LOCAL result_85 - LOCAL internal_86 - LOCAL instance_87 - LOCAL result_init_88 - LOCAL result_89 - LOCAL internal_90 - LOCAL instance_91 - LOCAL result_init_92 - LOCAL result_93 - LOCAL result_94 - LOCAL result_95 - LOCAL internal_96 - LOCAL instance_97 - LOCAL result_init_98 - LOCAL result_99 - LOCAL result_100 - LOCAL op_101 - LOCAL left_102 - LOCAL right_103 - LOCAL instance_104 - LOCAL value_105 - LOCAL result_init_106 - LOCAL result_init_107 - LOCAL result_108 - LOCAL result_109 - LOCAL op_110 - LOCAL left_111 - LOCAL right_112 - LOCAL instance_113 - LOCAL value_114 - LOCAL result_init_115 - LOCAL result_init_116 - LOCAL result_117 - LOCAL result_118 - LOCAL op_119 - LOCAL left_120 - LOCAL right_121 - LOCAL instance_122 - LOCAL value_123 - LOCAL result_init_124 - LOCAL result_init_125 - LOCAL result_126 - LOCAL result_127 - LOCAL op_128 - LOCAL left_129 - LOCAL right_130 - LOCAL instance_131 - LOCAL value_132 - LOCAL result_init_133 - LOCAL result_init_134 - LOCAL result_135 - LOCAL result_136 - LOCAL op_137 - LOCAL left_138 - LOCAL right_139 - LOCAL instance_140 - LOCAL value_141 - LOCAL result_init_142 - LOCAL result_init_143 - LOCAL result_144 - LOCAL result_145 - LOCAL op_146 - LOCAL left_147 - LOCAL right_148 - LOCAL instance_149 - LOCAL value_150 - LOCAL result_init_151 - LOCAL result_init_152 - LOCAL result_153 - LOCAL result_154 - LOCAL op_155 - LOCAL left_156 - LOCAL right_157 - LOCAL instance_158 - LOCAL value_159 - LOCAL result_init_160 - LOCAL result_init_161 - LOCAL result_162 - LOCAL result_163 - LOCAL op_164 - LOCAL left_165 - LOCAL right_166 - LOCAL instance_167 - LOCAL value_168 - LOCAL result_init_169 - LOCAL result_init_170 - LOCAL result_171 - LOCAL result_172 - LOCAL op_173 - LOCAL left_174 - LOCAL right_175 - LOCAL instance_176 - LOCAL value_177 - LOCAL result_init_178 - LOCAL result_init_179 - LOCAL result_180 - LOCAL result_181 - LOCAL op_182 - LOCAL left_183 - LOCAL right_184 - LOCAL instance_185 - LOCAL value_186 - LOCAL result_init_187 - LOCAL result_init_188 - LOCAL result_189 - LOCAL result_190 - LOCAL op_191 - LOCAL left_192 - LOCAL right_193 - LOCAL instance_194 - LOCAL value_195 - LOCAL result_init_196 - LOCAL result_init_197 - LOCAL result_198 - LOCAL result_199 - LOCAL op_200 - LOCAL left_201 - LOCAL right_202 - LOCAL instance_203 - LOCAL value_204 - LOCAL result_init_205 - LOCAL result_init_206 - LOCAL result_207 - LOCAL result_208 - LOCAL op_209 - LOCAL left_210 - LOCAL right_211 - LOCAL instance_212 - LOCAL value_213 - LOCAL result_init_214 - LOCAL result_init_215 - LOCAL result_216 - LOCAL result_217 - LOCAL op_218 - LOCAL left_219 - LOCAL right_220 - LOCAL instance_221 - LOCAL value_222 - LOCAL result_init_223 - LOCAL result_init_224 - LOCAL result_225 - LOCAL result_226 - LOCAL op_227 - LOCAL left_228 - LOCAL right_229 - LOCAL instance_230 - LOCAL value_231 - LOCAL result_init_232 - LOCAL result_init_233 - LOCAL result_234 - LOCAL result_235 - LOCAL op_236 - LOCAL left_237 - LOCAL right_238 - LOCAL instance_239 - LOCAL value_240 - LOCAL result_init_241 - LOCAL result_init_242 - LOCAL result_243 - LOCAL result_244 - LOCAL op_245 - LOCAL left_246 - LOCAL right_247 - LOCAL instance_248 - LOCAL value_249 - LOCAL result_init_250 - LOCAL result_init_251 - LOCAL result_252 - LOCAL result_253 - LOCAL op_254 - LOCAL left_255 - LOCAL right_256 - LOCAL instance_257 - LOCAL value_258 - LOCAL result_init_259 - LOCAL result_init_260 - LOCAL result_261 - LOCAL result_262 - LOCAL op_263 - LOCAL left_264 - LOCAL right_265 - LOCAL instance_266 - LOCAL value_267 - LOCAL result_init_268 - LOCAL result_init_269 - LOCAL result_270 - LOCAL result_271 - LOCAL op_272 - LOCAL left_273 - LOCAL right_274 - LOCAL instance_275 - LOCAL value_276 - LOCAL result_init_277 - LOCAL result_init_278 - LOCAL result_279 - LOCAL result_280 - LOCAL op_281 - LOCAL left_282 - LOCAL right_283 - LOCAL instance_284 - LOCAL value_285 - LOCAL result_init_286 - LOCAL result_init_287 - LOCAL internal_288 - LOCAL instance_289 - LOCAL result_init_290 - LOCAL internal_291 - LOCAL instance_292 - LOCAL result_init_293 - LOCAL internal_294 - LOCAL instance_295 - LOCAL result_init_296 - LOCAL internal_297 - LOCAL instance_298 - LOCAL result_init_299 - LOCAL internal_300 - LOCAL instance_301 - LOCAL result_init_302 - LOCAL internal_303 - LOCAL instance_304 - LOCAL result_init_305 - LOCAL internal_306 - LOCAL instance_307 - LOCAL result_init_308 - LOCAL internal_309 - LOCAL instance_310 - LOCAL result_init_311 - LOCAL internal_312 - LOCAL instance_313 - LOCAL result_init_314 - LOCAL internal_315 - LOCAL instance_316 - LOCAL result_init_317 - LOCAL internal_318 - LOCAL instance_319 - LOCAL result_init_320 - LOCAL internal_321 - LOCAL instance_322 - LOCAL result_init_323 - LOCAL internal_324 - LOCAL instance_325 - LOCAL result_init_326 - LOCAL internal_327 - LOCAL instance_328 - LOCAL result_init_329 - LOCAL internal_330 - LOCAL instance_331 - LOCAL result_init_332 - LOCAL internal_333 - LOCAL instance_334 - LOCAL result_init_335 - LOCAL internal_336 - LOCAL instance_337 - LOCAL result_init_338 - LOCAL internal_339 - LOCAL instance_340 - LOCAL result_init_341 - LOCAL internal_342 - LOCAL instance_343 - LOCAL result_init_344 - LOCAL internal_345 - LOCAL instance_346 - LOCAL result_init_347 - LOCAL internal_348 - LOCAL instance_349 - LOCAL result_init_350 - LOCAL internal_351 - LOCAL instance_352 - LOCAL result_init_353 - LOCAL let_result_354 - - num_0 = [] - internal_2 = LOAD s_7 - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - result_1 = VCALL CellularAutomaton out_string - internal_6 = LOAD s_8 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - result_5 = VCALL CellularAutomaton out_string - internal_10 = LOAD s_9 - instance_11 = ALLOCATE String - result_init_12 = CALL String_init - result_9 = VCALL CellularAutomaton out_string - internal_14 = LOAD s_10 - instance_15 = ALLOCATE String - result_init_16 = CALL String_init - result_13 = VCALL CellularAutomaton out_string - internal_18 = LOAD s_11 - instance_19 = ALLOCATE String - result_init_20 = CALL String_init - result_17 = VCALL CellularAutomaton out_string - internal_22 = LOAD s_12 - instance_23 = ALLOCATE String - result_init_24 = CALL String_init - result_21 = VCALL CellularAutomaton out_string - internal_26 = LOAD s_13 - instance_27 = ALLOCATE String - result_init_28 = CALL String_init - result_25 = VCALL CellularAutomaton out_string - internal_30 = LOAD s_14 - instance_31 = ALLOCATE String - result_init_32 = CALL String_init - result_29 = VCALL CellularAutomaton out_string - internal_34 = LOAD s_15 - instance_35 = ALLOCATE String - result_init_36 = CALL String_init - result_33 = VCALL CellularAutomaton out_string - internal_38 = LOAD s_16 - instance_39 = ALLOCATE String - result_init_40 = CALL String_init - result_37 = VCALL CellularAutomaton out_string - internal_42 = LOAD s_17 - instance_43 = ALLOCATE String - result_init_44 = CALL String_init - result_41 = VCALL CellularAutomaton out_string - internal_46 = LOAD s_18 - instance_47 = ALLOCATE String - result_init_48 = CALL String_init - result_45 = VCALL CellularAutomaton out_string - internal_50 = LOAD s_19 - instance_51 = ALLOCATE String - result_init_52 = CALL String_init - result_49 = VCALL CellularAutomaton out_string - internal_54 = LOAD s_20 - instance_55 = ALLOCATE String - result_init_56 = CALL String_init - result_53 = VCALL CellularAutomaton out_string - internal_58 = LOAD s_21 - instance_59 = ALLOCATE String - result_init_60 = CALL String_init - result_57 = VCALL CellularAutomaton out_string - internal_62 = LOAD s_22 - instance_63 = ALLOCATE String - result_init_64 = CALL String_init - result_61 = VCALL CellularAutomaton out_string - internal_66 = LOAD s_23 - instance_67 = ALLOCATE String - result_init_68 = CALL String_init - result_65 = VCALL CellularAutomaton out_string - internal_70 = LOAD s_24 - instance_71 = ALLOCATE String - result_init_72 = CALL String_init - result_69 = VCALL CellularAutomaton out_string - internal_74 = LOAD s_25 - instance_75 = ALLOCATE String - result_init_76 = CALL String_init - result_73 = VCALL CellularAutomaton out_string - internal_78 = LOAD s_26 - instance_79 = ALLOCATE String - result_init_80 = CALL String_init - result_77 = VCALL CellularAutomaton out_string - internal_82 = LOAD s_27 - instance_83 = ALLOCATE String - result_init_84 = CALL String_init - result_81 = VCALL CellularAutomaton out_string - internal_86 = LOAD s_28 - instance_87 = ALLOCATE String - result_init_88 = CALL String_init - result_85 = VCALL CellularAutomaton out_string - internal_90 = LOAD s_29 - instance_91 = ALLOCATE String - result_init_92 = CALL String_init - result_89 = VCALL CellularAutomaton out_string - result_93 = VCALL CellularAutomaton in_int - num_0 = result_93 - internal_96 = LOAD s_3 - instance_97 = ALLOCATE String - result_init_98 = CALL String_init - result_95 = VCALL CellularAutomaton out_string - instance_104 = ALLOCATE Int - value_105 = LOAD 1 - result_init_106 = CALL Int_init - left_102 = GetAttr num_0 value - right_103 = GetAttr instance_104 value - op_101 = left_102 = right_103 - result_100 = ALLOCATE Bool - result_init_107 = CALL Bool_init - IF result_100 GOTO label_69 - instance_113 = ALLOCATE Int - value_114 = LOAD 2 - result_init_115 = CALL Int_init - left_111 = GetAttr num_0 value - right_112 = GetAttr instance_113 value - op_110 = left_111 = right_112 - result_109 = ALLOCATE Bool - result_init_116 = CALL Bool_init - IF result_109 GOTO label_70 - instance_122 = ALLOCATE Int - value_123 = LOAD 3 - result_init_124 = CALL Int_init - left_120 = GetAttr num_0 value - right_121 = GetAttr instance_122 value - op_119 = left_120 = right_121 - result_118 = ALLOCATE Bool - result_init_125 = CALL Bool_init - IF result_118 GOTO label_71 - instance_131 = ALLOCATE Int - value_132 = LOAD 4 - result_init_133 = CALL Int_init - left_129 = GetAttr num_0 value - right_130 = GetAttr instance_131 value - op_128 = left_129 = right_130 - result_127 = ALLOCATE Bool - result_init_134 = CALL Bool_init - IF result_127 GOTO label_72 - instance_140 = ALLOCATE Int - value_141 = LOAD 5 - result_init_142 = CALL Int_init - left_138 = GetAttr num_0 value - right_139 = GetAttr instance_140 value - op_137 = left_138 = right_139 - result_136 = ALLOCATE Bool - result_init_143 = CALL Bool_init - IF result_136 GOTO label_73 - instance_149 = ALLOCATE Int - value_150 = LOAD 6 - result_init_151 = CALL Int_init - left_147 = GetAttr num_0 value - right_148 = GetAttr instance_149 value - op_146 = left_147 = right_148 - result_145 = ALLOCATE Bool - result_init_152 = CALL Bool_init - IF result_145 GOTO label_74 - instance_158 = ALLOCATE Int - value_159 = LOAD 7 - result_init_160 = CALL Int_init - left_156 = GetAttr num_0 value - right_157 = GetAttr instance_158 value - op_155 = left_156 = right_157 - result_154 = ALLOCATE Bool - result_init_161 = CALL Bool_init - IF result_154 GOTO label_75 - instance_167 = ALLOCATE Int - value_168 = LOAD 8 - result_init_169 = CALL Int_init - left_165 = GetAttr num_0 value - right_166 = GetAttr instance_167 value - op_164 = left_165 = right_166 - result_163 = ALLOCATE Bool - result_init_170 = CALL Bool_init - IF result_163 GOTO label_76 - instance_176 = ALLOCATE Int - value_177 = LOAD 9 - result_init_178 = CALL Int_init - left_174 = GetAttr num_0 value - right_175 = GetAttr instance_176 value - op_173 = left_174 = right_175 - result_172 = ALLOCATE Bool - result_init_179 = CALL Bool_init - IF result_172 GOTO label_77 - instance_185 = ALLOCATE Int - value_186 = LOAD 10 - result_init_187 = CALL Int_init - left_183 = GetAttr num_0 value - right_184 = GetAttr instance_185 value - op_182 = left_183 = right_184 - result_181 = ALLOCATE Bool - result_init_188 = CALL Bool_init - IF result_181 GOTO label_78 - instance_194 = ALLOCATE Int - value_195 = LOAD 11 - result_init_196 = CALL Int_init - left_192 = GetAttr num_0 value - right_193 = GetAttr instance_194 value - op_191 = left_192 = right_193 - result_190 = ALLOCATE Bool - result_init_197 = CALL Bool_init - IF result_190 GOTO label_79 - instance_203 = ALLOCATE Int - value_204 = LOAD 12 - result_init_205 = CALL Int_init - left_201 = GetAttr num_0 value - right_202 = GetAttr instance_203 value - op_200 = left_201 = right_202 - result_199 = ALLOCATE Bool - result_init_206 = CALL Bool_init - IF result_199 GOTO label_80 - instance_212 = ALLOCATE Int - value_213 = LOAD 13 - result_init_214 = CALL Int_init - left_210 = GetAttr num_0 value - right_211 = GetAttr instance_212 value - op_209 = left_210 = right_211 - result_208 = ALLOCATE Bool - result_init_215 = CALL Bool_init - IF result_208 GOTO label_81 - instance_221 = ALLOCATE Int - value_222 = LOAD 14 - result_init_223 = CALL Int_init - left_219 = GetAttr num_0 value - right_220 = GetAttr instance_221 value - op_218 = left_219 = right_220 - result_217 = ALLOCATE Bool - result_init_224 = CALL Bool_init - IF result_217 GOTO label_82 - instance_230 = ALLOCATE Int - value_231 = LOAD 15 - result_init_232 = CALL Int_init - left_228 = GetAttr num_0 value - right_229 = GetAttr instance_230 value - op_227 = left_228 = right_229 - result_226 = ALLOCATE Bool - result_init_233 = CALL Bool_init - IF result_226 GOTO label_83 - instance_239 = ALLOCATE Int - value_240 = LOAD 16 - result_init_241 = CALL Int_init - left_237 = GetAttr num_0 value - right_238 = GetAttr instance_239 value - op_236 = left_237 = right_238 - result_235 = ALLOCATE Bool - result_init_242 = CALL Bool_init - IF result_235 GOTO label_84 - instance_248 = ALLOCATE Int - value_249 = LOAD 17 - result_init_250 = CALL Int_init - left_246 = GetAttr num_0 value - right_247 = GetAttr instance_248 value - op_245 = left_246 = right_247 - result_244 = ALLOCATE Bool - result_init_251 = CALL Bool_init - IF result_244 GOTO label_85 - instance_257 = ALLOCATE Int - value_258 = LOAD 18 - result_init_259 = CALL Int_init - left_255 = GetAttr num_0 value - right_256 = GetAttr instance_257 value - op_254 = left_255 = right_256 - result_253 = ALLOCATE Bool - result_init_260 = CALL Bool_init - IF result_253 GOTO label_86 - instance_266 = ALLOCATE Int - value_267 = LOAD 19 - result_init_268 = CALL Int_init - left_264 = GetAttr num_0 value - right_265 = GetAttr instance_266 value - op_263 = left_264 = right_265 - result_262 = ALLOCATE Bool - result_init_269 = CALL Bool_init - IF result_262 GOTO label_87 - instance_275 = ALLOCATE Int - value_276 = LOAD 20 - result_init_277 = CALL Int_init - left_273 = GetAttr num_0 value - right_274 = GetAttr instance_275 value - op_272 = left_273 = right_274 - result_271 = ALLOCATE Bool - result_init_278 = CALL Bool_init - IF result_271 GOTO label_88 - instance_284 = ALLOCATE Int - value_285 = LOAD 21 - result_init_286 = CALL Int_init - left_282 = GetAttr num_0 value - right_283 = GetAttr instance_284 value - op_281 = left_282 = right_283 - result_280 = ALLOCATE Bool - result_init_287 = CALL Bool_init - IF result_280 GOTO label_89 - internal_288 = LOAD s_30 - instance_289 = ALLOCATE String - result_init_290 = CALL String_init - result_279 = instance_289 - GOTO label_90 - LABEL label_89 - internal_291 = LOAD s_31 - instance_292 = ALLOCATE String - result_init_293 = CALL String_init - result_279 = instance_292 - LABEL label_90 - result_270 = result_279 - GOTO label_91 - LABEL label_88 - internal_294 = LOAD s_32 - instance_295 = ALLOCATE String - result_init_296 = CALL String_init - result_270 = instance_295 - LABEL label_91 - result_261 = result_270 - GOTO label_92 - LABEL label_87 - internal_297 = LOAD s_33 - instance_298 = ALLOCATE String - result_init_299 = CALL String_init - result_261 = instance_298 - LABEL label_92 - result_252 = result_261 - GOTO label_93 - LABEL label_86 - internal_300 = LOAD s_34 - instance_301 = ALLOCATE String - result_init_302 = CALL String_init - result_252 = instance_301 - LABEL label_93 - result_243 = result_252 - GOTO label_94 - LABEL label_85 - internal_303 = LOAD s_35 - instance_304 = ALLOCATE String - result_init_305 = CALL String_init - result_243 = instance_304 - LABEL label_94 - result_234 = result_243 - GOTO label_95 - LABEL label_84 - internal_306 = LOAD s_36 - instance_307 = ALLOCATE String - result_init_308 = CALL String_init - result_234 = instance_307 - LABEL label_95 - result_225 = result_234 - GOTO label_96 - LABEL label_83 - internal_309 = LOAD s_37 - instance_310 = ALLOCATE String - result_init_311 = CALL String_init - result_225 = instance_310 - LABEL label_96 - result_216 = result_225 - GOTO label_97 - LABEL label_82 - internal_312 = LOAD s_38 - instance_313 = ALLOCATE String - result_init_314 = CALL String_init - result_216 = instance_313 - LABEL label_97 - result_207 = result_216 - GOTO label_98 - LABEL label_81 - internal_315 = LOAD s_39 - instance_316 = ALLOCATE String - result_init_317 = CALL String_init - result_207 = instance_316 - LABEL label_98 - result_198 = result_207 - GOTO label_99 - LABEL label_80 - internal_318 = LOAD s_40 - instance_319 = ALLOCATE String - result_init_320 = CALL String_init - result_198 = instance_319 - LABEL label_99 - result_189 = result_198 - GOTO label_100 - LABEL label_79 - internal_321 = LOAD s_41 - instance_322 = ALLOCATE String - result_init_323 = CALL String_init - result_189 = instance_322 - LABEL label_100 - result_180 = result_189 - GOTO label_101 - LABEL label_78 - internal_324 = LOAD s_42 - instance_325 = ALLOCATE String - result_init_326 = CALL String_init - result_180 = instance_325 - LABEL label_101 - result_171 = result_180 - GOTO label_102 - LABEL label_77 - internal_327 = LOAD s_43 - instance_328 = ALLOCATE String - result_init_329 = CALL String_init - result_171 = instance_328 - LABEL label_102 - result_162 = result_171 - GOTO label_103 - LABEL label_76 - internal_330 = LOAD s_44 - instance_331 = ALLOCATE String - result_init_332 = CALL String_init - result_162 = instance_331 - LABEL label_103 - result_153 = result_162 - GOTO label_104 - LABEL label_75 - internal_333 = LOAD s_45 - instance_334 = ALLOCATE String - result_init_335 = CALL String_init - result_153 = instance_334 - LABEL label_104 - result_144 = result_153 - GOTO label_105 - LABEL label_74 - internal_336 = LOAD s_46 - instance_337 = ALLOCATE String - result_init_338 = CALL String_init - result_144 = instance_337 - LABEL label_105 - result_135 = result_144 - GOTO label_106 - LABEL label_73 - internal_339 = LOAD s_47 - instance_340 = ALLOCATE String - result_init_341 = CALL String_init - result_135 = instance_340 - LABEL label_106 - result_126 = result_135 - GOTO label_107 - LABEL label_72 - internal_342 = LOAD s_48 - instance_343 = ALLOCATE String - result_init_344 = CALL String_init - result_126 = instance_343 - LABEL label_107 - result_117 = result_126 - GOTO label_108 - LABEL label_71 - internal_345 = LOAD s_49 - instance_346 = ALLOCATE String - result_init_347 = CALL String_init - result_117 = instance_346 - LABEL label_108 - result_108 = result_117 - GOTO label_109 - LABEL label_70 - internal_348 = LOAD s_50 - instance_349 = ALLOCATE String - result_init_350 = CALL String_init - result_108 = instance_349 - LABEL label_109 - result_99 = result_108 - GOTO label_110 - LABEL label_69 - internal_351 = LOAD s_51 - instance_352 = ALLOCATE String - result_init_353 = CALL String_init - result_99 = instance_352 - LABEL label_110 - let_result_354 = result_99 - - RETURN let_result_354 -} -function CellularAutomaton.prompt { - PARAM self - - LOCAL ans_0 - LOCAL result_1 - LOCAL internal_2 - LOCAL instance_3 - LOCAL result_init_4 - LOCAL result_5 - LOCAL internal_6 - LOCAL instance_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL result_10 - LOCAL result_11 - LOCAL internal_12 - LOCAL instance_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - LOCAL result_init_23 - LOCAL instance_24 - LOCAL value_25 - LOCAL result_init_26 - LOCAL instance_27 - LOCAL value_28 - LOCAL result_init_29 - LOCAL let_result_30 - - ans_0 = [] - internal_2 = LOAD s_52 - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - result_1 = VCALL CellularAutomaton out_string - internal_6 = LOAD s_53 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - result_5 = VCALL CellularAutomaton out_string - result_9 = VCALL CellularAutomaton in_string - ans_0 = result_9 - internal_12 = LOAD s_3 - instance_13 = ALLOCATE String - result_init_14 = CALL String_init - result_11 = VCALL CellularAutomaton out_string - internal_20 = LOAD s_54 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - op_17 = CALL String_equals - result_16 = ALLOCATE Bool - result_init_23 = CALL Bool_init - IF result_16 GOTO label_111 - instance_24 = ALLOCATE Bool - value_25 = LOAD 0 - result_init_26 = CALL Bool_init - result_15 = instance_24 - GOTO label_112 - LABEL label_111 - instance_27 = ALLOCATE Bool - value_28 = LOAD 0 - result_init_29 = CALL Bool_init - result_15 = instance_27 - LABEL label_112 - let_result_30 = result_15 - - RETURN let_result_30 -} -function CellularAutomaton.prompt2 { - PARAM self - - LOCAL ans_0 - LOCAL result_1 - LOCAL internal_2 - LOCAL instance_3 - LOCAL result_init_4 - LOCAL result_5 - LOCAL internal_6 - LOCAL instance_7 - LOCAL result_init_8 - LOCAL result_9 - LOCAL internal_10 - LOCAL instance_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL result_14 - LOCAL result_15 - LOCAL result_16 - LOCAL op_17 - LOCAL left_18 - LOCAL right_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - LOCAL result_init_23 - LOCAL instance_24 - LOCAL value_25 - LOCAL result_init_26 - LOCAL instance_27 - LOCAL value_28 - LOCAL result_init_29 - LOCAL let_result_30 - - ans_0 = [] - internal_2 = LOAD s_55 - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - result_1 = VCALL CellularAutomaton out_string - internal_6 = LOAD s_56 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - result_5 = VCALL CellularAutomaton out_string - internal_10 = LOAD s_57 - instance_11 = ALLOCATE String - result_init_12 = CALL String_init - result_9 = VCALL CellularAutomaton out_string - result_13 = VCALL CellularAutomaton in_string - ans_0 = result_13 - internal_20 = LOAD s_58 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - op_17 = CALL String_equals - result_16 = ALLOCATE Bool - result_init_23 = CALL Bool_init - IF result_16 GOTO label_113 - instance_24 = ALLOCATE Bool - value_25 = LOAD 0 - result_init_26 = CALL Bool_init - result_15 = instance_24 - GOTO label_114 - LABEL label_113 - instance_27 = ALLOCATE Bool - value_28 = LOAD 0 - result_init_29 = CALL Bool_init - result_15 = instance_27 - LABEL label_114 - let_result_30 = result_15 - - RETURN let_result_30 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL CellularAutomaton_init - - RETURN - SetAttr self cells None -} -function Main.main { - PARAM self - - LOCAL continue_0 - LOCAL choice_1 - LOCAL result_2 - LOCAL internal_3 - LOCAL instance_4 - LOCAL result_init_5 - LOCAL result_6 - LOCAL internal_7 - LOCAL instance_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL instance_12 - LOCAL value_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL result_16 - LOCAL result_17 - LOCAL result_18 - LOCAL result_19 - LOCAL init_20 - LOCAL result_21 - LOCAL result_22 - LOCAL cells_23 - LOCAL result_24 - LOCAL result_25 - LOCAL result_26 - LOCAL instance_27 - LOCAL value_28 - LOCAL result_init_29 - LOCAL result_30 - LOCAL result_31 - LOCAL cells_32 - LOCAL result_33 - LOCAL cells_34 - LOCAL let_result_35 - LOCAL let_result_36 - - continue_0 = [] - choice_1 = [] - internal_3 = LOAD s_59 - instance_4 = ALLOCATE String - result_init_5 = CALL String_init - result_2 = VCALL Main out_string - internal_7 = LOAD s_60 - instance_8 = ALLOCATE String - result_init_9 = CALL String_init - result_6 = VCALL Main out_string - LABEL label_115 - result_11 = VCALL Main prompt2 - IF result_11 GOTO label_116 - GOTO label_117 - LABEL label_116 - instance_12 = ALLOCATE Bool - value_13 = LOAD 0 - result_init_14 = CALL Bool_init - continue_0 = instance_12 - result_16 = VCALL Main option - choice_1 = result_16 - result_19 = ALLOCATE CellularAutomaton - init_20 = CALL CellularAutomaton_init - result_18 = VCALL CellularAutomaton init - SetAttr self cells result_18 - cells_23 = GetAttr self cells - result_22 = VCALL CellularAutomaton print - LABEL label_118 - IF continue_0 GOTO label_119 - GOTO label_120 - LABEL label_119 - result_26 = VCALL Main prompt - IF result_26 GOTO label_121 - instance_27 = ALLOCATE Bool - value_28 = LOAD 0 - result_init_29 = CALL Bool_init - continue_0 = instance_27 - result_25 = instance_27 - GOTO label_122 - LABEL label_121 - cells_32 = GetAttr self cells - result_31 = VCALL CellularAutomaton evolve - cells_34 = GetAttr self cells - result_33 = VCALL CellularAutomaton print - result_25 = result_33 - LABEL label_122 - GOTO label_118 - LABEL label_120 - result_24 = LOAD None - GOTO label_115 - LABEL label_117 - result_10 = LOAD None - let_result_35 = self - let_result_36 = let_result_35 - - RETURN let_result_36 -} \ No newline at end of file diff --git a/tests/codegen/list.cil b/tests/codegen/list.cil deleted file mode 100644 index 01cd43fe..00000000 --- a/tests/codegen/list.cil +++ /dev/null @@ -1,559 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type List { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method isNil : List.isNil - method head : List.head - method tail : List.tail - method cons : List.cons -} -type Cons { - attribute car - attribute cdr - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method isNil : Cons.isNil - method head : Cons.head - method tail : Cons.tail - method cons : List.cons - method init : Cons.init -} -type Main { - attribute mylist - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method print_list : Main.print_list - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT msg_0 - type_name_1 = TYPEOF self - PRINT type_name_1 - eol_2 = LOAD s_1 - PRINT eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function List_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL Object_init - - RETURN -} -function List.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 1 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function List.head { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = VCALL List abort - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - - RETURN instance_1 -} -function List.tail { - PARAM self - - LOCAL result_0 - - result_0 = VCALL List abort - - RETURN self -} -function List.cons { - PARAM self - PARAM i - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_1 = ALLOCATE Cons - init_2 = CALL Cons_init - result_0 = VCALL Cons init - - RETURN result_0 -} -function Cons_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = CALL List_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self car instance_1 - SetAttr self cdr None -} -function Cons.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function Cons.head { - PARAM self - - LOCAL Cons.car - - Cons.car = GetAttr self car - - RETURN Cons.car -} -function Cons.tail { - PARAM self - - LOCAL Cons.cdr - - Cons.cdr = GetAttr self cdr - - RETURN Cons.cdr -} -function Cons.init { - PARAM self - PARAM i - PARAM rest - - LOCAL result_0 - LOCAL result_1 - - SetAttr self car i - SetAttr self cdr rest - - RETURN self -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN - SetAttr self mylist None -} -function Main.print_list { - PARAM self - PARAM l - - LOCAL result_0 - LOCAL result_1 - LOCAL result_2 - LOCAL result_3 - LOCAL result_4 - LOCAL internal_5 - LOCAL instance_6 - LOCAL result_init_7 - LOCAL result_8 - LOCAL result_9 - LOCAL result_10 - LOCAL internal_11 - LOCAL instance_12 - LOCAL result_init_13 - - result_1 = VCALL List isNil - IF result_1 GOTO label_1 - result_3 = VCALL List head - result_2 = VCALL Main out_int - internal_5 = LOAD s_3 - instance_6 = ALLOCATE String - result_init_7 = CALL String_init - result_4 = VCALL Main out_string - result_9 = VCALL List tail - result_8 = VCALL Main print_list - result_0 = result_8 - GOTO label_2 - LABEL label_1 - internal_11 = LOAD s_1 - instance_12 = ALLOCATE String - result_init_13 = CALL String_init - result_10 = VCALL Main out_string - result_0 = result_10 - LABEL label_2 - - RETURN result_0 -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL result_2 - LOCAL result_3 - LOCAL result_4 - LOCAL result_5 - LOCAL init_6 - LOCAL instance_7 - LOCAL value_8 - LOCAL result_init_9 - LOCAL instance_10 - LOCAL value_11 - LOCAL result_init_12 - LOCAL instance_13 - LOCAL value_14 - LOCAL result_init_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL instance_19 - LOCAL value_20 - LOCAL result_init_21 - LOCAL result_22 - LOCAL result_23 - LOCAL result_24 - LOCAL op_25 - LOCAL internal_26 - LOCAL result_27 - LOCAL Main.mylist - LOCAL result_init_29 - LOCAL result_30 - LOCAL Main.mylist - LOCAL result_32 - LOCAL Main.mylist - LOCAL result_34 - - result_5 = ALLOCATE List - init_6 = CALL List_init - instance_7 = ALLOCATE Int - value_8 = LOAD 1 - result_init_9 = CALL Int_init - result_4 = VCALL List cons - instance_10 = ALLOCATE Int - value_11 = LOAD 2 - result_init_12 = CALL Int_init - result_3 = VCALL List cons - instance_13 = ALLOCATE Int - value_14 = LOAD 3 - result_init_15 = CALL Int_init - result_2 = VCALL List cons - instance_16 = ALLOCATE Int - value_17 = LOAD 4 - result_init_18 = CALL Int_init - result_1 = VCALL List cons - instance_19 = ALLOCATE Int - value_20 = LOAD 5 - result_init_21 = CALL Int_init - result_0 = VCALL List cons - SetAttr self mylist result_0 - LABEL label_3 - Main.mylist = GetAttr self mylist - result_27 = VCALL List isNil - internal_26 = GetAttr result_27 value - op_25 = not internal_26 - result_24 = ALLOCATE Bool - result_init_29 = CALL Bool_init - IF result_24 GOTO label_4 - GOTO label_5 - LABEL label_4 - Main.mylist = GetAttr self mylist - result_30 = VCALL Main print_list - Main.mylist = GetAttr self mylist - result_32 = VCALL List tail - SetAttr self mylist result_32 - GOTO label_3 - LABEL label_5 - result_23 = LOAD VOID - - RETURN result_23 -} \ No newline at end of file diff --git a/tests/codegen/list_test.cil b/tests/codegen/list_test.cil deleted file mode 100644 index 5b6efabf..00000000 --- a/tests/codegen/list_test.cil +++ /dev/null @@ -1,560 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type List { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method isNil : List.isNil - method head : List.head - method tail : List.tail - method cons : List.cons -} -type Cons { - attribute car - attribute cdr - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method isNil : Cons.isNil - method head : Cons.head - method tail : Cons.tail - method cons : List.cons - method init : Cons.init -} -type Main { - attribute mylist - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method print_list : Main.print_list - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: -s_4: \n - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function List_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL Object_init - - RETURN -} -function List.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function List.head { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = VCALL List abort - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - - RETURN instance_1 -} -function List.tail { - PARAM self - - LOCAL result_0 - - result_0 = VCALL List abort - - RETURN self -} -function List.cons { - PARAM self - PARAM i - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_1 = ALLOCATE Cons - init_2 = CALL Cons_init - result_0 = VCALL Cons init - - RETURN result_0 -} -function Cons_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = CALL List_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self car instance_1 - SetAttr self cdr None -} -function Cons.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function Cons.head { - PARAM self - - LOCAL car_0 - - car_0 = GetAttr self car - - RETURN car_0 -} -function Cons.tail { - PARAM self - - LOCAL cdr_0 - - cdr_0 = GetAttr self cdr - - RETURN cdr_0 -} -function Cons.init { - PARAM self - PARAM i - PARAM rest - - LOCAL result_0 - LOCAL result_1 - - SetAttr self car i - SetAttr self cdr rest - - RETURN self -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN - SetAttr self mylist None -} -function Main.print_list { - PARAM self - PARAM l - - LOCAL result_0 - LOCAL result_1 - LOCAL result_2 - LOCAL result_3 - LOCAL result_4 - LOCAL internal_5 - LOCAL instance_6 - LOCAL result_init_7 - LOCAL result_8 - LOCAL result_9 - LOCAL result_10 - LOCAL internal_11 - LOCAL instance_12 - LOCAL result_init_13 - - result_1 = VCALL List isNil - IF result_1 GOTO label_1 - result_3 = VCALL List head - result_2 = VCALL Main out_int - internal_5 = LOAD s_3 - instance_6 = ALLOCATE String - result_init_7 = CALL String_init - result_4 = VCALL Main out_string - result_9 = VCALL List tail - result_8 = VCALL Main print_list - result_0 = result_8 - GOTO label_2 - LABEL label_1 - internal_11 = LOAD s_4 - instance_12 = ALLOCATE String - result_init_13 = CALL String_init - result_10 = VCALL Main out_string - result_0 = result_10 - LABEL label_2 - - RETURN result_0 -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL result_2 - LOCAL result_3 - LOCAL result_4 - LOCAL result_5 - LOCAL init_6 - LOCAL instance_7 - LOCAL value_8 - LOCAL result_init_9 - LOCAL instance_10 - LOCAL value_11 - LOCAL result_init_12 - LOCAL instance_13 - LOCAL value_14 - LOCAL result_init_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL instance_19 - LOCAL value_20 - LOCAL result_init_21 - LOCAL result_22 - LOCAL result_23 - LOCAL result_24 - LOCAL op_25 - LOCAL internal_26 - LOCAL result_27 - LOCAL mylist_28 - LOCAL result_init_29 - LOCAL result_30 - LOCAL mylist_31 - LOCAL result_32 - LOCAL mylist_33 - LOCAL result_34 - - result_5 = ALLOCATE List - init_6 = CALL List_init - instance_7 = ALLOCATE Int - value_8 = LOAD 1 - result_init_9 = CALL Int_init - result_4 = VCALL List cons - instance_10 = ALLOCATE Int - value_11 = LOAD 2 - result_init_12 = CALL Int_init - result_3 = VCALL List cons - instance_13 = ALLOCATE Int - value_14 = LOAD 3 - result_init_15 = CALL Int_init - result_2 = VCALL List cons - instance_16 = ALLOCATE Int - value_17 = LOAD 4 - result_init_18 = CALL Int_init - result_1 = VCALL List cons - instance_19 = ALLOCATE Int - value_20 = LOAD 5 - result_init_21 = CALL Int_init - result_0 = VCALL List cons - SetAttr self mylist result_0 - LABEL label_3 - mylist_28 = GetAttr self mylist - result_27 = VCALL List isNil - internal_26 = GetAttr result_27 value - op_25 = not internal_26 - result_24 = ALLOCATE Bool - result_init_29 = CALL Bool_init - IF result_24 GOTO label_4 - GOTO label_5 - LABEL label_4 - mylist_31 = GetAttr self mylist - result_30 = VCALL Main print_list - mylist_33 = GetAttr self mylist - result_32 = VCALL List tail - SetAttr self mylist result_32 - GOTO label_3 - LABEL label_5 - result_23 = LOAD None - - RETURN result_23 -} \ No newline at end of file diff --git a/tests/codegen/new_complex_test.cil b/tests/codegen/new_complex_test.cil deleted file mode 100644 index 8c07af1f..00000000 --- a/tests/codegen/new_complex_test.cil +++ /dev/null @@ -1,719 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} -type Complex { - attribute x - attribute y - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method init : Complex.init - method print : Complex.print - method reflect_0 : Complex.reflect_0 - method reflect_X : Complex.reflect_X - method reflect_Y : Complex.reflect_Y - method equal : Complex.equal - method x_value : Complex.x_value - method y_value : Complex.y_value -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: =(\n -s_4: =)\n -s_5: + -s_6: I - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL instance_3 - LOCAL value_4 - LOCAL result_init_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL c_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_15 - LOCAL result_16 - LOCAL result_init_17 - LOCAL result_18 - LOCAL internal_19 - LOCAL instance_20 - LOCAL result_init_21 - LOCAL result_22 - LOCAL internal_23 - LOCAL instance_24 - LOCAL result_init_25 - LOCAL result_26 - LOCAL result_27 - LOCAL result_28 - LOCAL result_29 - LOCAL result_30 - LOCAL result_31 - LOCAL internal_32 - LOCAL instance_33 - LOCAL result_init_34 - LOCAL result_35 - LOCAL internal_36 - LOCAL instance_37 - LOCAL result_init_38 - LOCAL let_result_39 - - result_1 = ALLOCATE Complex - init_2 = CALL Complex_init - instance_3 = ALLOCATE Int - value_4 = LOAD 1 - result_init_5 = CALL Int_init - instance_6 = ALLOCATE Int - value_7 = LOAD 1 - result_init_8 = CALL Int_init - result_0 = VCALL Complex init - c_9 = result_0 - result_15 = VCALL Complex reflect_X - result_16 = VCALL Complex reflect_0 - left_13 = GetAttr result_15 value - right_14 = GetAttr result_16 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_17 = CALL Bool_init - IF result_11 GOTO label_1 - internal_19 = LOAD s_3 - instance_20 = ALLOCATE String - result_init_21 = CALL String_init - result_18 = VCALL Main out_string - result_10 = result_18 - GOTO label_2 - LABEL label_1 - internal_23 = LOAD s_4 - instance_24 = ALLOCATE String - result_init_25 = CALL String_init - result_22 = VCALL Main out_string - result_10 = result_22 - LABEL label_2 - result_29 = VCALL Complex reflect_X - result_28 = VCALL Complex reflect_Y - result_30 = VCALL Complex reflect_0 - result_27 = VCALL Complex equal - IF result_27 GOTO label_3 - internal_32 = LOAD s_3 - instance_33 = ALLOCATE String - result_init_34 = CALL String_init - result_31 = VCALL Main out_string - result_26 = result_31 - GOTO label_4 - LABEL label_3 - internal_36 = LOAD s_4 - instance_37 = ALLOCATE String - result_init_38 = CALL String_init - result_35 = VCALL Main out_string - result_26 = result_35 - LABEL label_4 - let_result_39 = result_26 - - RETURN let_result_39 -} -function Complex_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - LOCAL instance_4 - LOCAL value_5 - LOCAL result_init_6 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self x instance_1 - instance_4 = ALLOCATE Int - value_5 = LOAD 0 - result_init_6 = CALL Int_init - SetAttr self y instance_4 -} -function Complex.init { - PARAM self - PARAM a - PARAM b - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL x_4 - LOCAL result_init_5 - LOCAL result_6 - LOCAL op_7 - LOCAL left_8 - LOCAL right_9 - LOCAL y_10 - LOCAL result_init_11 - - x_4 = GetAttr self x - left_2 = GetAttr x_4 value - right_3 = GetAttr a value - op_1 = left_2 = right_3 - result_0 = ALLOCATE Bool - result_init_5 = CALL Bool_init - y_10 = GetAttr self y - left_8 = GetAttr y_10 value - right_9 = GetAttr b value - op_7 = left_8 = right_9 - result_6 = ALLOCATE Bool - result_init_11 = CALL Bool_init - - RETURN self -} -function Complex.print { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL y_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL result_12 - LOCAL result_13 - LOCAL x_14 - LOCAL internal_15 - LOCAL instance_16 - LOCAL result_init_17 - LOCAL y_18 - LOCAL internal_19 - LOCAL instance_20 - LOCAL result_init_21 - LOCAL result_22 - LOCAL x_23 - - y_5 = GetAttr self y - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - left_3 = GetAttr y_5 value - right_4 = GetAttr instance_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_1 GOTO label_5 - x_14 = GetAttr self x - result_13 = VCALL Complex out_int - internal_15 = LOAD s_5 - instance_16 = ALLOCATE String - result_init_17 = CALL String_init - result_12 = VCALL IO out_string - y_18 = GetAttr self y - result_11 = VCALL IO out_int - internal_19 = LOAD s_6 - instance_20 = ALLOCATE String - result_init_21 = CALL String_init - result_10 = VCALL IO out_string - result_0 = result_10 - GOTO label_6 - LABEL label_5 - x_23 = GetAttr self x - result_22 = VCALL Complex out_int - result_0 = result_22 - LABEL label_6 - - RETURN result_0 -} -function Complex.reflect_0 { - PARAM self - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL x_4 - LOCAL result_5 - LOCAL op_6 - LOCAL internal_7 - LOCAL x_8 - LOCAL result_init_9 - LOCAL result_init_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL y_15 - LOCAL result_16 - LOCAL op_17 - LOCAL internal_18 - LOCAL y_19 - LOCAL result_init_20 - LOCAL result_init_21 - - x_4 = GetAttr self x - x_8 = GetAttr self x - internal_7 = GetAttr x_8 value - op_6 = ~ internal_7 - result_5 = ALLOCATE Int - result_init_9 = CALL Int_init - left_2 = GetAttr x_4 value - left_2 = GetAttr x_4 value - op_1 = left_2 = right_3 - result_0 = ALLOCATE Bool - result_init_10 = CALL Bool_init - y_15 = GetAttr self y - y_19 = GetAttr self y - internal_18 = GetAttr y_19 value - op_17 = ~ internal_18 - result_16 = ALLOCATE Int - result_init_20 = CALL Int_init - left_13 = GetAttr y_15 value - left_13 = GetAttr y_15 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_21 = CALL Bool_init - - RETURN self -} -function Complex.reflect_X { - PARAM self - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL y_4 - LOCAL result_5 - LOCAL op_6 - LOCAL internal_7 - LOCAL y_8 - LOCAL result_init_9 - LOCAL result_init_10 - - y_4 = GetAttr self y - y_8 = GetAttr self y - internal_7 = GetAttr y_8 value - op_6 = ~ internal_7 - result_5 = ALLOCATE Int - result_init_9 = CALL Int_init - left_2 = GetAttr y_4 value - left_2 = GetAttr y_4 value - op_1 = left_2 = right_3 - result_0 = ALLOCATE Bool - result_init_10 = CALL Bool_init - - RETURN self -} -function Complex.reflect_Y { - PARAM self - - LOCAL result_0 - LOCAL op_1 - LOCAL left_2 - LOCAL right_3 - LOCAL x_4 - LOCAL result_5 - LOCAL op_6 - LOCAL internal_7 - LOCAL x_8 - LOCAL result_init_9 - LOCAL result_init_10 - - x_4 = GetAttr self x - x_8 = GetAttr self x - internal_7 = GetAttr x_8 value - op_6 = ~ internal_7 - result_5 = ALLOCATE Int - result_init_9 = CALL Int_init - left_2 = GetAttr x_4 value - left_2 = GetAttr x_4 value - op_1 = left_2 = right_3 - result_0 = ALLOCATE Bool - result_init_10 = CALL Bool_init - - RETURN self -} -function Complex.equal { - PARAM self - PARAM d - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL x_5 - LOCAL result_6 - LOCAL result_init_7 - LOCAL instance_8 - LOCAL value_9 - LOCAL result_init_10 - LOCAL result_11 - LOCAL result_12 - LOCAL op_13 - LOCAL left_14 - LOCAL right_15 - LOCAL y_16 - LOCAL result_17 - LOCAL result_init_18 - LOCAL instance_19 - LOCAL value_20 - LOCAL result_init_21 - LOCAL instance_22 - LOCAL value_23 - LOCAL result_init_24 - - x_5 = GetAttr self x - result_6 = VCALL Complex x_value - left_3 = GetAttr x_5 value - right_4 = GetAttr result_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_7 = CALL Bool_init - IF result_1 GOTO label_7 - instance_8 = ALLOCATE Bool - value_9 = LOAD 0 - result_init_10 = CALL Bool_init - result_0 = instance_8 - GOTO label_8 - LABEL label_7 - y_16 = GetAttr self y - result_17 = VCALL Complex y_value - left_14 = GetAttr y_16 value - right_15 = GetAttr result_17 value - op_13 = left_14 = right_15 - result_12 = ALLOCATE Bool - result_init_18 = CALL Bool_init - IF result_12 GOTO label_9 - instance_19 = ALLOCATE Bool - value_20 = LOAD 0 - result_init_21 = CALL Bool_init - result_11 = instance_19 - GOTO label_10 - LABEL label_9 - instance_22 = ALLOCATE Bool - value_23 = LOAD 0 - result_init_24 = CALL Bool_init - result_11 = instance_22 - LABEL label_10 - result_0 = result_11 - LABEL label_8 - - RETURN result_0 -} -function Complex.x_value { - PARAM self - - LOCAL x_0 - - x_0 = GetAttr self x - - RETURN x_0 -} -function Complex.y_value { - PARAM self - - LOCAL y_0 - - y_0 = GetAttr self y - - RETURN y_0 -} \ No newline at end of file diff --git a/tests/codegen/palindrome.cil b/tests/codegen/palindrome.cil deleted file mode 100644 index 18268e24..00000000 --- a/tests/codegen/palindrome.cil +++ /dev/null @@ -1,518 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - attribute i - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method pal : Main.pal - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: enter a string\n - -s_4: that was not a palindrome\n - -s_5: that was a palindrome\n - - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT msg_0 - type_name_1 = TYPEOF self - PRINT type_name_1 - eol_2 = LOAD s_1 - PRINT eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self i instance_1 -} -function Main.pal { - PARAM self - PARAM s - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL result_20 - LOCAL result_21 - LOCAL op_22 - LOCAL left_23 - LOCAL right_24 - LOCAL result_25 - LOCAL instance_26 - LOCAL value_27 - LOCAL result_init_28 - LOCAL instance_29 - LOCAL value_30 - LOCAL result_init_31 - LOCAL result_32 - LOCAL instance_33 - LOCAL value_34 - LOCAL result_init_35 - LOCAL result_36 - LOCAL op_37 - LOCAL left_38 - LOCAL right_39 - LOCAL result_40 - LOCAL instance_41 - LOCAL value_42 - LOCAL result_init_43 - LOCAL result_init_44 - LOCAL result_init_45 - LOCAL instance_46 - LOCAL value_47 - LOCAL result_init_48 - LOCAL result_49 - LOCAL result_50 - LOCAL result_51 - LOCAL op_52 - LOCAL left_53 - LOCAL right_54 - LOCAL result_55 - LOCAL instance_56 - LOCAL value_57 - LOCAL result_init_58 - LOCAL result_init_59 - LOCAL instance_60 - LOCAL value_61 - LOCAL result_init_62 - LOCAL instance_63 - LOCAL value_64 - LOCAL result_init_65 - LOCAL instance_66 - LOCAL value_67 - LOCAL result_init_68 - - result_5 = VCALL String length - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_1 GOTO label_1 - result_15 = VCALL String length - instance_16 = ALLOCATE Int - value_17 = LOAD 1 - result_init_18 = CALL Int_init - left_13 = GetAttr result_15 value - right_14 = GetAttr instance_16 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_19 = CALL Bool_init - IF result_11 GOTO label_2 - instance_26 = ALLOCATE Int - value_27 = LOAD 1 - result_init_28 = CALL Int_init - instance_29 = ALLOCATE Int - value_30 = LOAD 0 - result_init_31 = CALL Int_init - result_25 = VCALL String substr - instance_33 = ALLOCATE Int - value_34 = LOAD 1 - result_init_35 = CALL Int_init - result_40 = VCALL String length - instance_41 = ALLOCATE Int - value_42 = LOAD 1 - result_init_43 = CALL Int_init - left_38 = GetAttr result_40 value - right_39 = GetAttr instance_41 value - op_37 = left_38 - right_39 - result_36 = ALLOCATE Int - result_init_44 = CALL Int_init - result_32 = VCALL String substr - op_22 = CALL String_equals - result_21 = ALLOCATE Bool - result_init_45 = CALL Bool_init - IF result_21 GOTO label_3 - instance_46 = ALLOCATE Bool - value_47 = LOAD 0 - result_init_48 = CALL Bool_init - result_20 = instance_46 - GOTO label_4 - LABEL label_3 - result_55 = VCALL String length - instance_56 = ALLOCATE Int - value_57 = LOAD 2 - result_init_58 = CALL Int_init - left_53 = GetAttr result_55 value - right_54 = GetAttr instance_56 value - op_52 = left_53 - right_54 - result_51 = ALLOCATE Int - result_init_59 = CALL Int_init - instance_60 = ALLOCATE Int - value_61 = LOAD 1 - result_init_62 = CALL Int_init - result_50 = VCALL String substr - result_49 = VCALL Main pal - result_20 = result_49 - LABEL label_4 - result_10 = result_20 - GOTO label_5 - LABEL label_2 - instance_63 = ALLOCATE Bool - value_64 = LOAD 1 - result_init_65 = CALL Bool_init - result_10 = instance_63 - LABEL label_5 - result_0 = result_10 - GOTO label_6 - LABEL label_1 - instance_66 = ALLOCATE Bool - value_67 = LOAD 1 - result_init_68 = CALL Bool_init - result_0 = instance_66 - LABEL label_6 - - RETURN result_0 -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL op_1 - LOCAL internal_2 - LOCAL instance_3 - LOCAL value_4 - LOCAL result_init_5 - LOCAL result_init_6 - LOCAL result_7 - LOCAL result_8 - LOCAL internal_9 - LOCAL instance_10 - LOCAL result_init_11 - LOCAL result_12 - LOCAL result_13 - LOCAL result_14 - LOCAL result_15 - LOCAL internal_16 - LOCAL instance_17 - LOCAL result_init_18 - LOCAL result_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - - instance_3 = ALLOCATE Int - value_4 = LOAD 1 - result_init_5 = CALL Int_init - internal_2 = GetAttr instance_3 value - op_1 = ~ internal_2 - result_0 = ALLOCATE Int - result_init_6 = CALL Int_init - SetAttr self i result_0 - internal_9 = LOAD s_3 - instance_10 = ALLOCATE String - result_init_11 = CALL String_init - result_8 = VCALL Main out_string - result_14 = VCALL Main in_string - result_13 = VCALL Main pal - IF result_13 GOTO label_7 - internal_16 = LOAD s_4 - instance_17 = ALLOCATE String - result_init_18 = CALL String_init - result_15 = VCALL Main out_string - result_12 = result_15 - GOTO label_8 - LABEL label_7 - internal_20 = LOAD s_5 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - result_19 = VCALL Main out_string - result_12 = result_19 - LABEL label_8 - - RETURN result_12 -} \ No newline at end of file diff --git a/tests/codegen/palindrome_test.cil b/tests/codegen/palindrome_test.cil deleted file mode 100644 index 63d0f3db..00000000 --- a/tests/codegen/palindrome_test.cil +++ /dev/null @@ -1,520 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - attribute i - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method pal : Main.pal - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: enter a string\n - -s_4: that was not a palindrome\n - -s_5: that was a palindrome\n - - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = CALL IO_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self i instance_1 -} -function Main.pal { - PARAM self - PARAM s - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL result_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL result_init_9 - LOCAL result_10 - LOCAL result_11 - LOCAL op_12 - LOCAL left_13 - LOCAL right_14 - LOCAL result_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL result_init_19 - LOCAL result_20 - LOCAL result_21 - LOCAL op_22 - LOCAL left_23 - LOCAL right_24 - LOCAL result_25 - LOCAL instance_26 - LOCAL value_27 - LOCAL result_init_28 - LOCAL instance_29 - LOCAL value_30 - LOCAL result_init_31 - LOCAL result_32 - LOCAL instance_33 - LOCAL value_34 - LOCAL result_init_35 - LOCAL result_36 - LOCAL op_37 - LOCAL left_38 - LOCAL right_39 - LOCAL result_40 - LOCAL instance_41 - LOCAL value_42 - LOCAL result_init_43 - LOCAL result_init_44 - LOCAL result_init_45 - LOCAL instance_46 - LOCAL value_47 - LOCAL result_init_48 - LOCAL result_49 - LOCAL result_50 - LOCAL result_51 - LOCAL op_52 - LOCAL left_53 - LOCAL right_54 - LOCAL result_55 - LOCAL instance_56 - LOCAL value_57 - LOCAL result_init_58 - LOCAL result_init_59 - LOCAL instance_60 - LOCAL value_61 - LOCAL result_init_62 - LOCAL instance_63 - LOCAL value_64 - LOCAL result_init_65 - LOCAL instance_66 - LOCAL value_67 - LOCAL result_init_68 - - result_5 = VCALL String length - instance_6 = ALLOCATE Int - value_7 = LOAD 0 - result_init_8 = CALL Int_init - left_3 = GetAttr result_5 value - right_4 = GetAttr instance_6 value - op_2 = left_3 = right_4 - result_1 = ALLOCATE Bool - result_init_9 = CALL Bool_init - IF result_1 GOTO label_1 - result_15 = VCALL String length - instance_16 = ALLOCATE Int - value_17 = LOAD 1 - result_init_18 = CALL Int_init - left_13 = GetAttr result_15 value - right_14 = GetAttr instance_16 value - op_12 = left_13 = right_14 - result_11 = ALLOCATE Bool - result_init_19 = CALL Bool_init - IF result_11 GOTO label_2 - instance_26 = ALLOCATE Int - value_27 = LOAD 1 - result_init_28 = CALL Int_init - instance_29 = ALLOCATE Int - value_30 = LOAD 0 - result_init_31 = CALL Int_init - result_25 = VCALL String substr - instance_33 = ALLOCATE Int - value_34 = LOAD 1 - result_init_35 = CALL Int_init - result_40 = VCALL String length - instance_41 = ALLOCATE Int - value_42 = LOAD 1 - result_init_43 = CALL Int_init - left_38 = GetAttr result_40 value - right_39 = GetAttr instance_41 value - op_37 = left_38 - right_39 - result_36 = ALLOCATE Int - result_init_44 = CALL Int_init - result_32 = VCALL String substr - left_23 = GetAttr result_25 value - right_24 = GetAttr result_32 value - op_22 = left_23 = right_24 - result_21 = ALLOCATE Bool - result_init_45 = CALL Bool_init - IF result_21 GOTO label_3 - instance_46 = ALLOCATE Bool - value_47 = LOAD 0 - result_init_48 = CALL Bool_init - result_20 = instance_46 - GOTO label_4 - LABEL label_3 - result_55 = VCALL String length - instance_56 = ALLOCATE Int - value_57 = LOAD 2 - result_init_58 = CALL Int_init - left_53 = GetAttr result_55 value - right_54 = GetAttr instance_56 value - op_52 = left_53 - right_54 - result_51 = ALLOCATE Int - result_init_59 = CALL Int_init - instance_60 = ALLOCATE Int - value_61 = LOAD 1 - result_init_62 = CALL Int_init - result_50 = VCALL String substr - result_49 = VCALL Main pal - result_20 = result_49 - LABEL label_4 - result_10 = result_20 - GOTO label_5 - LABEL label_2 - instance_63 = ALLOCATE Bool - value_64 = LOAD 0 - result_init_65 = CALL Bool_init - result_10 = instance_63 - LABEL label_5 - result_0 = result_10 - GOTO label_6 - LABEL label_1 - instance_66 = ALLOCATE Bool - value_67 = LOAD 0 - result_init_68 = CALL Bool_init - result_0 = instance_66 - LABEL label_6 - - RETURN result_0 -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL op_1 - LOCAL internal_2 - LOCAL instance_3 - LOCAL value_4 - LOCAL result_init_5 - LOCAL result_init_6 - LOCAL result_7 - LOCAL result_8 - LOCAL internal_9 - LOCAL instance_10 - LOCAL result_init_11 - LOCAL result_12 - LOCAL result_13 - LOCAL result_14 - LOCAL result_15 - LOCAL internal_16 - LOCAL instance_17 - LOCAL result_init_18 - LOCAL result_19 - LOCAL internal_20 - LOCAL instance_21 - LOCAL result_init_22 - - instance_3 = ALLOCATE Int - value_4 = LOAD 1 - result_init_5 = CALL Int_init - internal_2 = GetAttr instance_3 value - op_1 = ~ internal_2 - result_0 = ALLOCATE Int - result_init_6 = CALL Int_init - SetAttr self i result_0 - internal_9 = LOAD s_3 - instance_10 = ALLOCATE String - result_init_11 = CALL String_init - result_8 = VCALL Main out_string - result_14 = VCALL Main in_string - result_13 = VCALL Main pal - IF result_13 GOTO label_7 - internal_16 = LOAD s_4 - instance_17 = ALLOCATE String - result_init_18 = CALL String_init - result_15 = VCALL Main out_string - result_12 = result_15 - GOTO label_8 - LABEL label_7 - internal_20 = LOAD s_5 - instance_21 = ALLOCATE String - result_init_22 = CALL String_init - result_19 = VCALL Main out_string - result_12 = result_19 - LABEL label_8 - - RETURN result_12 -} \ No newline at end of file diff --git a/tests/codegen/primes.cil b/tests/codegen/primes.cil deleted file mode 100644 index d4a672fc..00000000 --- a/tests/codegen/primes.cil +++ /dev/null @@ -1,615 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - attribute out - attribute testee - attribute divisor - attribute stop - attribute m - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: 2 is trivially prime. - -s_4: is prime. - -s_5: continue -s_6: halt - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT msg_0 - type_name_1 = TYPEOF self - PRINT type_name_1 - eol_2 = LOAD s_1 - PRINT eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL internal_2 - LOCAL instance_3 - LOCAL result_init_4 - LOCAL instance_5 - LOCAL value_6 - LOCAL result_init_7 - LOCAL Main.out - LOCAL instance_9 - LOCAL value_10 - LOCAL result_init_11 - LOCAL instance_12 - LOCAL value_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL Main.testee - LOCAL instance_24 - LOCAL value_25 - LOCAL result_init_26 - LOCAL result_init_27 - LOCAL result_28 - LOCAL instance_29 - LOCAL value_30 - LOCAL result_init_31 - LOCAL result_32 - LOCAL result_33 - LOCAL result_34 - LOCAL result_35 - LOCAL op_36 - LOCAL left_37 - LOCAL right_38 - LOCAL Main.testee - LOCAL result_40 - LOCAL op_41 - LOCAL left_42 - LOCAL right_43 - LOCAL Main.divisor - LOCAL Main.divisor - LOCAL result_init_46 - LOCAL result_init_47 - LOCAL result_48 - LOCAL result_49 - LOCAL op_50 - LOCAL left_51 - LOCAL right_52 - LOCAL result_53 - LOCAL op_54 - LOCAL left_55 - LOCAL right_56 - LOCAL Main.testee - LOCAL result_58 - LOCAL op_59 - LOCAL left_60 - LOCAL right_61 - LOCAL Main.divisor - LOCAL result_63 - LOCAL op_64 - LOCAL left_65 - LOCAL right_66 - LOCAL Main.testee - LOCAL Main.divisor - LOCAL result_init_69 - LOCAL result_init_70 - LOCAL result_init_71 - LOCAL instance_72 - LOCAL value_73 - LOCAL result_init_74 - LOCAL result_init_75 - LOCAL instance_76 - LOCAL value_77 - LOCAL result_init_78 - LOCAL instance_79 - LOCAL value_80 - LOCAL result_init_81 - LOCAL instance_82 - LOCAL value_83 - LOCAL result_init_84 - LOCAL result_85 - LOCAL op_86 - LOCAL left_87 - LOCAL right_88 - LOCAL Main.divisor - LOCAL instance_90 - LOCAL value_91 - LOCAL result_init_92 - LOCAL result_init_93 - LOCAL result_94 - LOCAL result_95 - LOCAL result_96 - LOCAL op_97 - LOCAL left_98 - LOCAL right_99 - LOCAL Main.testee - LOCAL result_101 - LOCAL op_102 - LOCAL left_103 - LOCAL right_104 - LOCAL Main.divisor - LOCAL Main.divisor - LOCAL result_init_107 - LOCAL result_init_108 - LOCAL instance_109 - LOCAL value_110 - LOCAL result_init_111 - LOCAL Main.testee - LOCAL result_113 - LOCAL result_114 - LOCAL Main.out - LOCAL result_116 - LOCAL internal_117 - LOCAL instance_118 - LOCAL result_init_119 - LOCAL result_120 - LOCAL result_121 - LOCAL op_122 - LOCAL left_123 - LOCAL right_124 - LOCAL Main.stop - LOCAL Main.testee - LOCAL result_init_127 - LOCAL internal_128 - LOCAL instance_129 - LOCAL result_init_130 - LOCAL result_131 - LOCAL internal_132 - LOCAL instance_133 - LOCAL result_init_134 - - result_0 = CALL IO_init - - RETURN - internal_2 = LOAD s_3 - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - result_1 = VCALL Main out_string - instance_5 = ALLOCATE Int - value_6 = LOAD 2 - result_init_7 = CALL Int_init - SetAttr self out instance_5 - Main.out = GetAttr self out - SetAttr self testee Main.out - instance_9 = ALLOCATE Int - value_10 = LOAD 0 - result_init_11 = CALL Int_init - SetAttr self divisor instance_9 - instance_12 = ALLOCATE Int - value_13 = LOAD 500 - result_init_14 = CALL Int_init - SetAttr self stop instance_12 - LABEL label_1 - instance_16 = ALLOCATE Bool - value_17 = LOAD 1 - result_init_18 = CALL Bool_init - IF instance_16 GOTO label_2 - GOTO label_3 - LABEL label_2 - Main.testee = GetAttr self testee - instance_24 = ALLOCATE Int - value_25 = LOAD 1 - result_init_26 = CALL Int_init - left_21 = GetAttr Main.testee value - right_22 = GetAttr instance_24 value - op_20 = left_21 + right_22 - result_19 = ALLOCATE Int - result_init_27 = CALL Int_init - SetAttr self testee result_19 - instance_29 = ALLOCATE Int - value_30 = LOAD 2 - result_init_31 = CALL Int_init - SetAttr self divisor instance_29 - LABEL label_4 - Main.testee = GetAttr self testee - Main.divisor = GetAttr self divisor - Main.divisor = GetAttr self divisor - left_42 = GetAttr Main.divisor value - right_43 = GetAttr Main.divisor value - op_41 = left_42 * right_43 - result_40 = ALLOCATE Int - result_init_46 = CALL Int_init - left_37 = GetAttr Main.testee value - right_38 = GetAttr result_40 value - op_36 = left_37 < right_38 - result_35 = ALLOCATE Bool - result_init_47 = CALL Bool_init - IF result_35 GOTO label_7 - Main.testee = GetAttr self testee - Main.divisor = GetAttr self divisor - Main.testee = GetAttr self testee - Main.divisor = GetAttr self divisor - left_65 = GetAttr Main.testee value - right_66 = GetAttr Main.divisor value - op_64 = left_65 / right_66 - result_63 = ALLOCATE Int - result_init_69 = CALL Int_init - left_60 = GetAttr Main.divisor value - right_61 = GetAttr result_63 value - op_59 = left_60 * right_61 - result_58 = ALLOCATE Int - result_init_70 = CALL Int_init - left_55 = GetAttr Main.testee value - right_56 = GetAttr result_58 value - op_54 = left_55 - right_56 - result_53 = ALLOCATE Int - result_init_71 = CALL Int_init - instance_72 = ALLOCATE Int - value_73 = LOAD 0 - result_init_74 = CALL Int_init - left_51 = GetAttr result_53 value - right_52 = GetAttr instance_72 value - op_50 = left_51 = right_52 - result_49 = ALLOCATE Bool - result_init_75 = CALL Bool_init - IF result_49 GOTO label_8 - instance_76 = ALLOCATE Bool - value_77 = LOAD 1 - result_init_78 = CALL Bool_init - result_48 = instance_76 - GOTO label_9 - LABEL label_8 - instance_79 = ALLOCATE Bool - value_80 = LOAD 0 - result_init_81 = CALL Bool_init - result_48 = instance_79 - LABEL label_9 - result_34 = result_48 - GOTO label_10 - LABEL label_7 - instance_82 = ALLOCATE Bool - value_83 = LOAD 0 - result_init_84 = CALL Bool_init - result_34 = instance_82 - LABEL label_10 - IF result_34 GOTO label_5 - GOTO label_6 - LABEL label_5 - Main.divisor = GetAttr self divisor - instance_90 = ALLOCATE Int - value_91 = LOAD 1 - result_init_92 = CALL Int_init - left_87 = GetAttr Main.divisor value - right_88 = GetAttr instance_90 value - op_86 = left_87 + right_88 - result_85 = ALLOCATE Int - result_init_93 = CALL Int_init - SetAttr self divisor result_85 - GOTO label_4 - LABEL label_6 - result_33 = LOAD VOID - Main.testee = GetAttr self testee - Main.divisor = GetAttr self divisor - Main.divisor = GetAttr self divisor - left_103 = GetAttr Main.divisor value - right_104 = GetAttr Main.divisor value - op_102 = left_103 * right_104 - result_101 = ALLOCATE Int - result_init_107 = CALL Int_init - left_98 = GetAttr Main.testee value - right_99 = GetAttr result_101 value - op_97 = left_98 < right_99 - result_96 = ALLOCATE Bool - result_init_108 = CALL Bool_init - IF result_96 GOTO label_11 - instance_109 = ALLOCATE Int - value_110 = LOAD 0 - result_init_111 = CALL Int_init - result_95 = instance_109 - GOTO label_12 - LABEL label_11 - Main.testee = GetAttr self testee - SetAttr self out Main.testee - Main.out = GetAttr self out - result_114 = VCALL Main out_int - internal_117 = LOAD s_4 - instance_118 = ALLOCATE String - result_init_119 = CALL String_init - result_116 = VCALL Main out_string - result_95 = result_116 - LABEL label_12 - Main.stop = GetAttr self stop - Main.testee = GetAttr self testee - left_123 = GetAttr Main.stop value - right_124 = GetAttr Main.testee value - op_122 = left_123 <= right_124 - result_121 = ALLOCATE Bool - result_init_127 = CALL Bool_init - IF result_121 GOTO label_13 - internal_128 = LOAD s_5 - instance_129 = ALLOCATE String - result_init_130 = CALL String_init - result_120 = instance_129 - GOTO label_14 - LABEL label_13 - internal_132 = LOAD s_6 - instance_133 = ALLOCATE String - result_init_134 = CALL String_init - result_131 = VCALL String abort - result_120 = result_131 - LABEL label_14 - GOTO label_1 - LABEL label_3 - result_15 = LOAD VOID - SetAttr self m result_15 -} -function Main.main { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - - RETURN instance_0 -} \ No newline at end of file diff --git a/tests/codegen/primes_test.cil b/tests/codegen/primes_test.cil deleted file mode 100644 index 607d37a7..00000000 --- a/tests/codegen/primes_test.cil +++ /dev/null @@ -1,613 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - attribute out - attribute testee - attribute divisor - attribute stop - attribute m - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: 2 is trivially prime.\n -s_4: is prime.\n -s_5: continue -s_6: halt - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL internal_2 - LOCAL instance_3 - LOCAL result_init_4 - LOCAL instance_5 - LOCAL value_6 - LOCAL result_init_7 - LOCAL out_8 - LOCAL instance_9 - LOCAL value_10 - LOCAL result_init_11 - LOCAL instance_12 - LOCAL value_13 - LOCAL result_init_14 - LOCAL result_15 - LOCAL instance_16 - LOCAL value_17 - LOCAL result_init_18 - LOCAL result_19 - LOCAL op_20 - LOCAL left_21 - LOCAL right_22 - LOCAL testee_23 - LOCAL instance_24 - LOCAL value_25 - LOCAL result_init_26 - LOCAL result_init_27 - LOCAL result_28 - LOCAL instance_29 - LOCAL value_30 - LOCAL result_init_31 - LOCAL result_32 - LOCAL result_33 - LOCAL result_34 - LOCAL result_35 - LOCAL op_36 - LOCAL left_37 - LOCAL right_38 - LOCAL testee_39 - LOCAL result_40 - LOCAL op_41 - LOCAL left_42 - LOCAL right_43 - LOCAL divisor_44 - LOCAL divisor_45 - LOCAL result_init_46 - LOCAL result_init_47 - LOCAL result_48 - LOCAL result_49 - LOCAL op_50 - LOCAL left_51 - LOCAL right_52 - LOCAL result_53 - LOCAL op_54 - LOCAL left_55 - LOCAL right_56 - LOCAL testee_57 - LOCAL result_58 - LOCAL op_59 - LOCAL left_60 - LOCAL right_61 - LOCAL divisor_62 - LOCAL result_63 - LOCAL op_64 - LOCAL left_65 - LOCAL right_66 - LOCAL testee_67 - LOCAL divisor_68 - LOCAL result_init_69 - LOCAL result_init_70 - LOCAL result_init_71 - LOCAL instance_72 - LOCAL value_73 - LOCAL result_init_74 - LOCAL result_init_75 - LOCAL instance_76 - LOCAL value_77 - LOCAL result_init_78 - LOCAL instance_79 - LOCAL value_80 - LOCAL result_init_81 - LOCAL instance_82 - LOCAL value_83 - LOCAL result_init_84 - LOCAL result_85 - LOCAL op_86 - LOCAL left_87 - LOCAL right_88 - LOCAL divisor_89 - LOCAL instance_90 - LOCAL value_91 - LOCAL result_init_92 - LOCAL result_init_93 - LOCAL result_94 - LOCAL result_95 - LOCAL result_96 - LOCAL op_97 - LOCAL left_98 - LOCAL right_99 - LOCAL testee_100 - LOCAL result_101 - LOCAL op_102 - LOCAL left_103 - LOCAL right_104 - LOCAL divisor_105 - LOCAL divisor_106 - LOCAL result_init_107 - LOCAL result_init_108 - LOCAL instance_109 - LOCAL value_110 - LOCAL result_init_111 - LOCAL testee_112 - LOCAL result_113 - LOCAL result_114 - LOCAL out_115 - LOCAL result_116 - LOCAL internal_117 - LOCAL instance_118 - LOCAL result_init_119 - LOCAL result_120 - LOCAL result_121 - LOCAL op_122 - LOCAL left_123 - LOCAL right_124 - LOCAL stop_125 - LOCAL testee_126 - LOCAL result_init_127 - LOCAL internal_128 - LOCAL instance_129 - LOCAL result_init_130 - LOCAL result_131 - LOCAL internal_132 - LOCAL instance_133 - LOCAL result_init_134 - - result_0 = CALL IO_init - - RETURN - internal_2 = LOAD s_3 - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - result_1 = VCALL Main out_string - instance_5 = ALLOCATE Int - value_6 = LOAD 2 - result_init_7 = CALL Int_init - SetAttr self out instance_5 - out_8 = GetAttr self out - SetAttr self testee out_8 - instance_9 = ALLOCATE Int - value_10 = LOAD 0 - result_init_11 = CALL Int_init - SetAttr self divisor instance_9 - instance_12 = ALLOCATE Int - value_13 = LOAD 500 - result_init_14 = CALL Int_init - SetAttr self stop instance_12 - LABEL label_1 - instance_16 = ALLOCATE Bool - value_17 = LOAD 0 - result_init_18 = CALL Bool_init - IF instance_16 GOTO label_2 - GOTO label_3 - LABEL label_2 - testee_23 = GetAttr self testee - instance_24 = ALLOCATE Int - value_25 = LOAD 1 - result_init_26 = CALL Int_init - left_21 = GetAttr testee_23 value - right_22 = GetAttr instance_24 value - op_20 = left_21 + right_22 - result_19 = ALLOCATE Int - result_init_27 = CALL Int_init - SetAttr self testee result_19 - instance_29 = ALLOCATE Int - value_30 = LOAD 2 - result_init_31 = CALL Int_init - SetAttr self divisor instance_29 - LABEL label_4 - testee_39 = GetAttr self testee - divisor_44 = GetAttr self divisor - divisor_45 = GetAttr self divisor - left_42 = GetAttr divisor_44 value - right_43 = GetAttr divisor_45 value - op_41 = left_42 * right_43 - result_40 = ALLOCATE Int - result_init_46 = CALL Int_init - left_37 = GetAttr testee_39 value - right_38 = GetAttr result_40 value - op_36 = left_37 < right_38 - result_35 = ALLOCATE Bool - result_init_47 = CALL Bool_init - IF result_35 GOTO label_7 - testee_57 = GetAttr self testee - divisor_62 = GetAttr self divisor - testee_67 = GetAttr self testee - divisor_68 = GetAttr self divisor - left_65 = GetAttr testee_67 value - right_66 = GetAttr divisor_68 value - op_64 = left_65 / right_66 - result_63 = ALLOCATE Int - result_init_69 = CALL Int_init - left_60 = GetAttr divisor_62 value - right_61 = GetAttr result_63 value - op_59 = left_60 * right_61 - result_58 = ALLOCATE Int - result_init_70 = CALL Int_init - left_55 = GetAttr testee_57 value - right_56 = GetAttr result_58 value - op_54 = left_55 - right_56 - result_53 = ALLOCATE Int - result_init_71 = CALL Int_init - instance_72 = ALLOCATE Int - value_73 = LOAD 0 - result_init_74 = CALL Int_init - left_51 = GetAttr result_53 value - right_52 = GetAttr instance_72 value - op_50 = left_51 = right_52 - result_49 = ALLOCATE Bool - result_init_75 = CALL Bool_init - IF result_49 GOTO label_8 - instance_76 = ALLOCATE Bool - value_77 = LOAD 0 - result_init_78 = CALL Bool_init - result_48 = instance_76 - GOTO label_9 - LABEL label_8 - instance_79 = ALLOCATE Bool - value_80 = LOAD 0 - result_init_81 = CALL Bool_init - result_48 = instance_79 - LABEL label_9 - result_34 = result_48 - GOTO label_10 - LABEL label_7 - instance_82 = ALLOCATE Bool - value_83 = LOAD 0 - result_init_84 = CALL Bool_init - result_34 = instance_82 - LABEL label_10 - IF result_34 GOTO label_5 - GOTO label_6 - LABEL label_5 - divisor_89 = GetAttr self divisor - instance_90 = ALLOCATE Int - value_91 = LOAD 1 - result_init_92 = CALL Int_init - left_87 = GetAttr divisor_89 value - right_88 = GetAttr instance_90 value - op_86 = left_87 + right_88 - result_85 = ALLOCATE Int - result_init_93 = CALL Int_init - SetAttr self divisor result_85 - GOTO label_4 - LABEL label_6 - result_33 = LOAD None - testee_100 = GetAttr self testee - divisor_105 = GetAttr self divisor - divisor_106 = GetAttr self divisor - left_103 = GetAttr divisor_105 value - right_104 = GetAttr divisor_106 value - op_102 = left_103 * right_104 - result_101 = ALLOCATE Int - result_init_107 = CALL Int_init - left_98 = GetAttr testee_100 value - right_99 = GetAttr result_101 value - op_97 = left_98 < right_99 - result_96 = ALLOCATE Bool - result_init_108 = CALL Bool_init - IF result_96 GOTO label_11 - instance_109 = ALLOCATE Int - value_110 = LOAD 0 - result_init_111 = CALL Int_init - result_95 = instance_109 - GOTO label_12 - LABEL label_11 - testee_112 = GetAttr self testee - SetAttr self out testee_112 - out_115 = GetAttr self out - result_114 = VCALL Main out_int - internal_117 = LOAD s_4 - instance_118 = ALLOCATE String - result_init_119 = CALL String_init - result_116 = VCALL Main out_string - result_95 = result_116 - LABEL label_12 - stop_125 = GetAttr self stop - testee_126 = GetAttr self testee - left_123 = GetAttr stop_125 value - right_124 = GetAttr testee_126 value - op_122 = left_123 <= right_124 - result_121 = ALLOCATE Bool - result_init_127 = CALL Bool_init - IF result_121 GOTO label_13 - internal_128 = LOAD s_5 - instance_129 = ALLOCATE String - result_init_130 = CALL String_init - result_120 = instance_129 - GOTO label_14 - LABEL label_13 - internal_132 = LOAD s_6 - instance_133 = ALLOCATE String - result_init_134 = CALL String_init - result_131 = VCALL String abort - result_120 = result_131 - LABEL label_14 - GOTO label_1 - LABEL label_3 - result_15 = LOAD None - SetAttr self m result_15 -} -function Main.main { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Int - value_1 = LOAD 0 - result_init_2 = CALL Int_init - - RETURN instance_0 -} \ No newline at end of file diff --git a/tests/codegen/print-cool_test.cil b/tests/codegen/print-cool_test.cil deleted file mode 100644 index d9e46f2f..00000000 --- a/tests/codegen/print-cool_test.cil +++ /dev/null @@ -1,349 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type Main { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: \n - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL result_2 - LOCAL result_3 - LOCAL result_4 - LOCAL init_5 - LOCAL instance_6 - LOCAL value_7 - LOCAL result_init_8 - LOCAL instance_9 - LOCAL value_10 - LOCAL result_init_11 - LOCAL result_12 - LOCAL result_13 - LOCAL isvoid_result_14 - LOCAL instance_15 - LOCAL result_init_16 - LOCAL instance_17 - LOCAL value_18 - LOCAL result_init_19 - LOCAL instance_20 - LOCAL value_21 - LOCAL result_init_22 - LOCAL result_23 - LOCAL internal_24 - LOCAL instance_25 - LOCAL result_init_26 - - result_4 = ALLOCATE Object - init_5 = CALL Object_init - result_3 = VCALL Object type_name - instance_6 = ALLOCATE Int - value_7 = LOAD 1 - result_init_8 = CALL Int_init - instance_9 = ALLOCATE Int - value_10 = LOAD 4 - result_init_11 = CALL Int_init - result_2 = VCALL String substr - result_1 = VCALL Main out_string - isvoid_result_14 ISVOID self - instance_15 = ALLOCATE Bool - result_init_16 = CALL Bool_init - result_13 = VCALL Bool type_name - instance_17 = ALLOCATE Int - value_18 = LOAD 3 - result_init_19 = CALL Int_init - instance_20 = ALLOCATE Int - value_21 = LOAD 1 - result_init_22 = CALL Int_init - result_12 = VCALL String substr - result_0 = VCALL IO out_string - internal_24 = LOAD s_3 - instance_25 = ALLOCATE String - result_init_26 = CALL String_init - result_23 = VCALL Main out_string - - RETURN result_23 -} \ No newline at end of file diff --git a/tests/codegen/sort-list_test.cil b/tests/codegen/sort-list_test.cil deleted file mode 100644 index 1120b83a..00000000 --- a/tests/codegen/sort-list_test.cil +++ /dev/null @@ -1,819 +0,0 @@ -.TYPES -type Object { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type Int { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type String { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method length : String.length - method concat : String.concat - method substr : String.substr -} -type Bool { - attribute value - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy -} -type IO { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int -} -type List { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : List.isNil - method cons : List.cons - method car : List.car - method cdr : List.cdr - method rev : List.rev - method sort : List.sort - method insert : List.insert - method rcons : List.rcons - method print_list : List.print_list -} -type Cons { - attribute xcar - attribute xcdr - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : Cons.isNil - method cons : List.cons - method car : Cons.car - method cdr : Cons.cdr - method rev : Cons.rev - method sort : Cons.sort - method insert : Cons.insert - method rcons : Cons.rcons - method print_list : Cons.print_list - method init : Cons.init -} -type Nil { - - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method isNil : Nil.isNil - method cons : List.cons - method car : List.car - method cdr : List.cdr - method rev : Nil.rev - method sort : Nil.sort - method insert : Nil.insert - method rcons : Nil.rcons - method print_list : Nil.print_list -} -type Main { - attribute l - - method abort : Object.abort - method type_name : Object.type_name - method copy : Object.copy - method out_string : IO.out_string - method out_int : IO.out_int - method in_string : IO.in_string - method in_int : IO.in_int - method iota : Main.iota - method main : Main.main -} - -.DATA -s_0: Abort called from class -s_1: - -empty_str: -s_3: \n -s_4: How many numbers to sort? - -.CODE -function main { - - - LOCAL instance_0 - LOCAL result_1 - - instance_0 = ALLOCATE Main - result_1 = CALL Main_init - result_1 = CALL Main.main - - RETURN -} -function Object_init { - PARAM self - - - - - RETURN -} -function Object.abort { - PARAM self - - LOCAL msg_0 - LOCAL type_name_1 - LOCAL eol_2 - - msg_0 = LOAD s_0 - PRINT_STR msg_0 - type_name_1 = TYPEOF self - PRINT_STR type_name_1 - eol_2 = LOAD s_1 - PRINT_STR eol_2 - HALT -} -function Object.type_name { - PARAM self - - LOCAL type_name_0 - LOCAL instance_1 - LOCAL result_init_2 - - type_name_0 = TYPEOF self - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function Object.copy { - PARAM self - - LOCAL copy_0 - - copy_0 = COPY self - - RETURN copy_0 -} -function IO_init { - PARAM self - - - - - RETURN -} -function IO.out_string { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_STR v_0 - - RETURN self -} -function IO.out_int { - PARAM self - PARAM x - - LOCAL v_0 - - v_0 = GetAttr x value - PRINT_INT v_0 - - RETURN self -} -function IO.in_string { - PARAM self - - LOCAL read_str_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_str_0 = READ STR - instance_1 = ALLOCATE String - result_init_2 = CALL String_init - - RETURN instance_1 -} -function IO.in_int { - PARAM self - - LOCAL read_int_0 - LOCAL instance_1 - LOCAL result_init_2 - - read_int_0 = READ INT - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String.length { - PARAM self - - LOCAL length_0 - LOCAL instance_1 - LOCAL result_init_2 - - length_0 = LENGTH self - instance_1 = ALLOCATE Int - result_init_2 = CALL Int_init - - RETURN instance_1 -} -function String.concat { - PARAM self - PARAM s - - LOCAL str1_0 - LOCAL len1_1 - LOCAL str2_2 - LOCAL len2_3 - LOCAL local_len1_4 - LOCAL local_len2_5 - LOCAL concat_6 - LOCAL instance_7 - LOCAL result_init_8 - - str1_0 = GetAttr self value - len1_1 = CALL String.length - str2_2 = GetAttr s value - len2_3 = CALL String.length - local_len1_4 = GetAttr len1_1 value - local_len2_5 = GetAttr len2_3 value - concat_6 = CONCAT str1_0 str2_2 - instance_7 = ALLOCATE String - result_init_8 = CALL String_init - - RETURN instance_7 -} -function String.substr { - PARAM self - PARAM i - PARAM l - - LOCAL i_value_0 - LOCAL l_value_1 - LOCAL subs_result_2 - LOCAL instance_3 - LOCAL result_init_4 - - i_value_0 = GetAttr i value - l_value_1 = GetAttr l value - subs_result_2 = SUBSTR i_value_0 l_value_1 self - instance_3 = ALLOCATE String - result_init_4 = CALL String_init - - RETURN instance_3 -} -function Bool_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function Int_init { - PARAM self - PARAM v - - - - SetAttr self value v - - RETURN -} -function String_equals { - PARAM str1 - PARAM str2 - - LOCAL str1_0 - LOCAL str2_1 - LOCAL comparison_result_2 - - str1_0 = GetAttr str1 value - str2_1 = GetAttr str2 value - comparison_result_2 = str1_0 = str2_1 - - RETURN comparison_result_2 -} -function List_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN -} -function List.isNil { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = VCALL List abort - instance_1 = ALLOCATE Bool - value_2 = LOAD 0 - result_init_3 = CALL Bool_init - - RETURN instance_1 -} -function List.cons { - PARAM self - PARAM hd - - LOCAL result_0 - LOCAL init_1 - LOCAL new_cell_2 - LOCAL result_3 - LOCAL let_result_4 - - result_0 = ALLOCATE Cons - init_1 = CALL Cons_init - new_cell_2 = result_0 - result_3 = VCALL Cons init - let_result_4 = result_3 - - RETURN let_result_4 -} -function List.car { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_0 = VCALL List abort - result_1 = ALLOCATE Int - init_2 = CALL Int_init - - RETURN result_1 -} -function List.cdr { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_0 = VCALL List abort - result_1 = ALLOCATE List - init_2 = CALL List_init - - RETURN result_1 -} -function List.rev { - PARAM self - - LOCAL result_0 - - result_0 = VCALL List cdr - - RETURN result_0 -} -function List.sort { - PARAM self - - LOCAL result_0 - - result_0 = VCALL List cdr - - RETURN result_0 -} -function List.insert { - PARAM self - PARAM i - - LOCAL result_0 - - result_0 = VCALL List cdr - - RETURN result_0 -} -function List.rcons { - PARAM self - PARAM i - - LOCAL result_0 - - result_0 = VCALL List cdr - - RETURN result_0 -} -function List.print_list { - PARAM self - - LOCAL result_0 - - result_0 = VCALL List abort - - RETURN result_0 -} -function Cons_init { - PARAM self - - LOCAL result_0 - LOCAL instance_1 - LOCAL value_2 - LOCAL result_init_3 - - result_0 = CALL List_init - - RETURN - instance_1 = ALLOCATE Int - value_2 = LOAD 0 - result_init_3 = CALL Int_init - SetAttr self xcar instance_1 - SetAttr self xcdr None -} -function Cons.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function Cons.init { - PARAM self - PARAM hd - PARAM tl - - LOCAL result_0 - LOCAL result_1 - - SetAttr self xcar hd - SetAttr self xcdr tl - - RETURN self -} -function Cons.car { - PARAM self - - LOCAL xcar_0 - - xcar_0 = GetAttr self xcar - - RETURN xcar_0 -} -function Cons.cdr { - PARAM self - - LOCAL xcdr_0 - - xcdr_0 = GetAttr self xcdr - - RETURN xcdr_0 -} -function Cons.rev { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL xcdr_2 - LOCAL xcar_3 - - xcdr_2 = GetAttr self xcdr - result_1 = VCALL List rev - xcar_3 = GetAttr self xcar - result_0 = VCALL List rcons - - RETURN result_0 -} -function Cons.sort { - PARAM self - - LOCAL result_0 - LOCAL result_1 - LOCAL xcdr_2 - LOCAL xcar_3 - - xcdr_2 = GetAttr self xcdr - result_1 = VCALL List sort - xcar_3 = GetAttr self xcar - result_0 = VCALL List insert - - RETURN result_0 -} -function Cons.insert { - PARAM self - PARAM i - - LOCAL result_0 - LOCAL result_1 - LOCAL op_2 - LOCAL left_3 - LOCAL right_4 - LOCAL xcar_5 - LOCAL result_init_6 - LOCAL result_7 - LOCAL result_8 - LOCAL init_9 - LOCAL result_10 - LOCAL xcdr_11 - LOCAL xcar_12 - LOCAL result_13 - LOCAL result_14 - LOCAL init_15 - - xcar_5 = GetAttr self xcar - left_3 = GetAttr i value - right_4 = GetAttr xcar_5 value - op_2 = left_3 < right_4 - result_1 = ALLOCATE Bool - result_init_6 = CALL Bool_init - IF result_1 GOTO label_1 - result_8 = ALLOCATE Cons - init_9 = CALL Cons_init - xcdr_11 = GetAttr self xcdr - result_10 = VCALL List insert - xcar_12 = GetAttr self xcar - result_7 = VCALL Cons init - result_0 = result_7 - GOTO label_2 - LABEL label_1 - result_14 = ALLOCATE Cons - init_15 = CALL Cons_init - result_13 = VCALL Cons init - result_0 = result_13 - LABEL label_2 - - RETURN result_0 -} -function Cons.rcons { - PARAM self - PARAM i - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - LOCAL result_3 - LOCAL xcdr_4 - LOCAL xcar_5 - - result_1 = ALLOCATE Cons - init_2 = CALL Cons_init - xcdr_4 = GetAttr self xcdr - result_3 = VCALL List rcons - xcar_5 = GetAttr self xcar - result_0 = VCALL Cons init - - RETURN result_0 -} -function Cons.print_list { - PARAM self - - LOCAL result_0 - LOCAL xcar_1 - LOCAL result_2 - LOCAL internal_3 - LOCAL instance_4 - LOCAL result_init_5 - LOCAL result_6 - LOCAL xcdr_7 - - xcar_1 = GetAttr self xcar - result_0 = VCALL Cons out_int - internal_3 = LOAD s_3 - instance_4 = ALLOCATE String - result_init_5 = CALL String_init - result_2 = VCALL Cons out_string - xcdr_7 = GetAttr self xcdr - result_6 = VCALL List print_list - - RETURN result_6 -} -function Nil_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL List_init - - RETURN -} -function Nil.isNil { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function Nil.rev { - PARAM self - - - - - RETURN self -} -function Nil.sort { - PARAM self - - - - - RETURN self -} -function Nil.insert { - PARAM self - PARAM i - - LOCAL result_0 - - result_0 = VCALL Nil rcons - - RETURN result_0 -} -function Nil.rcons { - PARAM self - PARAM i - - LOCAL result_0 - LOCAL result_1 - LOCAL init_2 - - result_1 = ALLOCATE Cons - init_2 = CALL Cons_init - result_0 = VCALL Cons init - - RETURN result_0 -} -function Nil.print_list { - PARAM self - - LOCAL instance_0 - LOCAL value_1 - LOCAL result_init_2 - - instance_0 = ALLOCATE Bool - value_1 = LOAD 0 - result_init_2 = CALL Bool_init - - RETURN instance_0 -} -function Main_init { - PARAM self - - LOCAL result_0 - - result_0 = CALL IO_init - - RETURN - SetAttr self l None -} -function Main.iota { - PARAM self - PARAM i - - LOCAL result_0 - LOCAL init_1 - LOCAL result_2 - LOCAL instance_3 - LOCAL value_4 - LOCAL result_init_5 - LOCAL j_6 - LOCAL result_7 - LOCAL result_8 - LOCAL op_9 - LOCAL left_10 - LOCAL right_11 - LOCAL result_init_12 - LOCAL result_13 - LOCAL result_14 - LOCAL init_15 - LOCAL l_16 - LOCAL result_17 - LOCAL result_18 - LOCAL op_19 - LOCAL left_20 - LOCAL right_21 - LOCAL instance_22 - LOCAL value_23 - LOCAL result_init_24 - LOCAL result_init_25 - LOCAL result_26 - LOCAL let_result_27 - LOCAL l_28 - - result_0 = ALLOCATE Nil - init_1 = CALL Nil_init - SetAttr self l result_0 - instance_3 = ALLOCATE Int - value_4 = LOAD 0 - result_init_5 = CALL Int_init - j_6 = instance_3 - LABEL label_3 - left_10 = GetAttr j_6 value - right_11 = GetAttr i value - op_9 = left_10 < right_11 - result_8 = ALLOCATE Bool - result_init_12 = CALL Bool_init - IF result_8 GOTO label_4 - GOTO label_5 - LABEL label_4 - result_14 = ALLOCATE Cons - init_15 = CALL Cons_init - l_16 = GetAttr self l - result_13 = VCALL Cons init - SetAttr self l result_13 - instance_22 = ALLOCATE Int - value_23 = LOAD 1 - result_init_24 = CALL Int_init - left_20 = GetAttr j_6 value - right_21 = GetAttr instance_22 value - op_19 = left_20 + right_21 - result_18 = ALLOCATE Int - result_init_25 = CALL Int_init - j_6 = result_18 - GOTO label_3 - LABEL label_5 - result_7 = LOAD None - let_result_27 = result_7 - l_28 = GetAttr self l - - RETURN l_28 -} -function Main.main { - PARAM self - - LOCAL result_0 - LOCAL internal_1 - LOCAL instance_2 - LOCAL result_init_3 - LOCAL result_4 - LOCAL result_5 - LOCAL result_6 - LOCAL result_7 - LOCAL result_8 - - internal_1 = LOAD s_4 - instance_2 = ALLOCATE String - result_init_3 = CALL String_init - result_0 = VCALL Main out_string - result_8 = VCALL Main in_int - result_7 = VCALL Main iota - result_6 = VCALL List rev - result_5 = VCALL List sort - result_4 = VCALL List print_list - - RETURN result_4 -} \ No newline at end of file diff --git a/tests/codegen/test.py b/tests/codegen/test.py deleted file mode 100644 index 2f820f83..00000000 --- a/tests/codegen/test.py +++ /dev/null @@ -1,16 +0,0 @@ -f1 = open('arith.mips', 'r') -lines_1 = f1.readlines() - -f2 = open('arith_test.mips', 'r') -lines_2 = f2.readlines() -print(len(lines_1)) -print(len(lines_2)) -c = 0 -for i in range(0, len(lines_1)): - if lines_1[i] != lines_2[i]: - print('line: ',i) - print('f1: ', lines_1[i]) - print('f2: ', lines_2[i]) - c += 1 - if c == 20: - break